From d2570148ec3884de3af721bd99c4b7acbbdee075 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期二, 09 五月 2023 17:07:26 +0800
Subject: [PATCH] 前端代码提交

---
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/po/CodeClassifyPO.java                                      |    2 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java                                          |  226 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciUseEnum.java                           |   23 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java                          |   13 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTemplatePhaseMapper.xml                                               |   42 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineVO.java                                       |  248 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineEventVO.java                                  |  192 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java                                        |   29 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java                           |   42 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllSqlLiteMapper.java                                          |   41 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeAllCode.java                                     |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java                             |  103 
 Source/UBCS/pom.xml                                                                                                                    |   17 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempphaseWrapper.java                                   |   17 
 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/vo/FieldRangeVO.java                                          |   23 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecTypeEnum.java                                       |    7 
 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/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeFixedValueWrapper.java                                  |   35 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml                                                   |  156 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java                                  |    1 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTypeAttributeVO.java                                    |  161 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/AttributeCache.java                                     |   63 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java                              |   16 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempbuttonClient.java                                     |   10 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ReadExcelOption.java                              |   69 
 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                                                                                      |   20 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/PageDO2PageVO.java                                                     |   23 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestMethodEnum.java                       |    6 
 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-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseAttr.java                                   |   50 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml                                                   |   89 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeFixedValueMapper.java                                    |   22 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/EnumIdConstant.java                         |   60 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempphaseClient.java                                     |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java                                      |    3 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java                                |   18 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java                               |   57 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java                                 |   90 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/EnumDTO.java                                              |  163 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeSerialValue.java                                 |    1 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/StatusDTO.java                                            |   43 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java                                 |  157 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java                                       |    3 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/Lunar.java                                      |  194 
 Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml                                                                                     |   27 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleRule.java                                     |   95 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeClassifyProcessUseEnum.java                            |    7 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/RevisionRuleVO.java                                        |  247 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/RevisionInfo.java                         |  147 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeButtonMapper.xml                                                      |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/Tree.java                                  |  205 
 Source/UBCS-WEB/src/const/code/fixedValueMgrDialog.js                                                                                  |   37 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/TreeWrapperOptions.java                   |  122 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetRowData.java                                 |   33 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/KeyValue.java                              |   52 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java                             |   22 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java                            |  141 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeFixedValueMapper.xml                                                  |  109 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/RevisionRuleDTO.java                                      |   69 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java                            |    6 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateAttr.java                        |  357 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/PageHelper.java                            |  239 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/CommonUtil.java                                                        |    4 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetDataSet.java                                 |   44 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeMapRuleTypeEnum.java                                   |    7 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/LangBaseUtil.java                               |   32 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java                                         |   86 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/ModifyAtributeServiceImpl.java                           |   29 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java              |   10 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java                                     |    9 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeOsbtmtypeattributeVO.java                            |    7 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeButtonUseEnum.java                                     |    9 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java                                    |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java                          |  467 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstemplateMapper.xml                                                 |   56 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java                                    |    9 
 Source/UBCS-WEB/src/const/code/classifyTreeOptionDialog.js                                                                             |   35 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/FiledRangeWrapper.java                                        |   43 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/ModifyAttributeInfoVO.java                                 |  373 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClsflowtempEntity.java                           |   10 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/DataGrid.java                              |  112 
 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                             |   14 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java                            |   73 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java                                     |  153 
 Source/UBCS-WEB/src/const/code/referBtmDialog.js                                                                                       |   38 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/service/VciSecretServiceI.java                       |   28 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java                                    |   24 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmTypeAttribute.java                                  |  140 
 Source/UBCS-WEB/src/api/template/templateAttr.js                                                                                       |   52 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java                          |    6 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/VciFieldTypeEnum.java                        |   95 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java                                   |    6 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingDataVO.java                             |    3 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMapper.java                                                 |   29 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeButtonClient.java                                         |    6 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyProcessTempMapper.xml                                         |    6 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java                                |  230 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java                                       |   78 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeAttribute.java                                 |  141 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableCustomDefineVO.java                 |   80 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/DownloadTempOption.java                           |   42 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeMapper.java                                             |  118 
 Source/UBCS-WEB/src/api/code/codeFixedValue.js                                                                                         |   44 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java                                      |   10 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports |    1 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLine.java                                     |  101 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java                               |   72 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyTemplateAttrService.java                       |   62 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempbuttonWrapper.java                                  |   12 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java                  |  108 
 Source/UBCS/ubcs-service/ubcs-code/pom.xml                                                                                             |   11 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java                |  367 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClsflowtempMapper.xml                                                 |    2 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/AttributeClient.java                                            |   43 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java                              |   13 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java                                | 1228 ++
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateButton.java                      |   59 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeFixedValueDTO.java                                  |   26 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/AttributeMapper.xml                                                        |   50 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciFieldType.java                         |   15 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java                        |    7 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java                                           |   95 
 Source/UBCS-WEB/src/const/code/cloneBasicDialogOption.js                                                                               |   48 
 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-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/BaseModelDTO.java                              |    4 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java                         |   42 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java                                  |   13 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java                            |   78 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/FrameWorkLangCodeConstant.java                             |    5 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/ModifyAttributeInfoMapper.java                                 |   13 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLineEvent.java                                |   86 
 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-util-api/src/main/java/com/vci/ubcs/starter/web/util/ControllerUtil.java                             |  248 
 Source/UBCS-WEB/src/const/code/parentClassifyParentOptionDialog.js                                                                     |   38 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java                                |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeClient.java                                   |   60 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebThreadLocalUtil.java                         |   35 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java                         |  335 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeFallback.java                                   |   94 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClstemplateEntity.java                           |    5 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyProcessTempMapper.java                           |   17 
 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                                               |  126 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/PreApplyCodeOrderDTO.java                               |    3 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyProcessTempService.java                        |  119 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java                                     |   47 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/BaseQueryObject.java                       |  165 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml                                                    |    8 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/Transient.java                                |   16 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java                                  |    4 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LifeCycleDTO.java                                         |   66 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/VciRevisionServiceI.java                |   36 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java                                      |   14 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/bo/WriteExcelData.java                                   |  244 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiImportProcesser.java                         |    8 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciDateUtil.java                                |  638 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java                                          |  213 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java                                  |  121 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LifeCycleLineEventDTO.java                                |   44 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/QueryOptionConstant.java                    |   21 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationDataFlowTypeEnum.java                        |    2 
 Source/UBCS-WEB/src/api/code/codeClassifyValue.js                                                                                      |   43 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java               |  133 
 Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue                                                                               |    1 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java                                  |   42 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/OsCodeFillTypeEnum.java                      |  133 
 Source/UBCS/ubcs-common/pom.xml                                                                                                        |    6 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java                       |    3 
 Source/UBCS/ubcs-service/pom.xml                                                                                                       |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTemplatePhaseMapper.java                                 |   44 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/exception/VciBaseException.java                          |   80 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeGetValueTypeEnum.java                                  |    7 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java                          |   24 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMsMapper.java                                               |   13 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/NewAppConstantEnum.java                                    |   45 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/AttributeDTO.java                                         |   22 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassify.java                                    |    3 
 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/BtmAttributeServiceImpl.java                             |  182 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/TreeQueryObject.java                      |  137 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java                                           |    3 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTemplatePhase.java                               |   42 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiTemplateProcesser.java                       |   10 
 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-util-api/src/main/java/com/vci/ubcs/starter/web/wrapper/VciQueryWrapperForDO.java                    |  284 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfo.java                               |  128 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeDO.java                                        |  111 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java                                 |  173 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeAttributeService.java                                 |   83 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java                                |   35 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITablePageVO.java                         |   49 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java                                   |   42 
 Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js                                                                            |   44 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/UserSecretEnum.java                          |   91 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelColumn.java                          |   28 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeConstant.java                                 |  140 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeAllCodeController.java                               |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeButtonService.java                                     |   41 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java                                              |  249 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTypeVO.java                                             |  185 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/BusinessTypeEnum.java                                   |   35 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButton.java                                      |  189 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableFieldVO.java                        |  398 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempbuttonClient.java                                    |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateButtonMapper.java                        |   44 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/AttributeWrapper.java                                         |   53 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java                              |    6 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/AttributeVO.java                                           |   40 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ExcelColumnMap.java                               |   71 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java                           |    8 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/constant/ExcelLangCodeConstant.java                  |   23 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java                            |    4 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java                       |   36 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LinkTypeDTO.java                                          |   86 
 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-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java                                     |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeButtonClient.java                                        |    4 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LifeCycleLineDTO.java                                     |   82 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeBasicSecWrapper.java                                    |    3 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeCutTypeEnum.java                                       |    6 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/MessageUtils.java                               |   37 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMySqlMapper.java                                            |   13 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/ModifyTableTaskEnum.java                                |   41 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java                               |    5 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFormReferVO.java                         |  349 
 Source/UBCS-WEB/src/const/code/selectAttrOptionDialog.js                                                                               |   42 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationAuthorityTypeEnum.java                       |    6 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java                                               |    6 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ClassUtil.java                                  |   50 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeLevelTypeEnum.java                                     |    6 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java                                     |   96 
 Source/UBCS/ubcs-service-api/pom.xml                                                                                                   |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeUseButtonPositionTypeEnum.java                         |    7 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/MdmEnumIdConstant.java                      |   79 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java                                   |   26 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeButtonMapper.java                                        |    6 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java                                    |   37 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java                                  |  624 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java                                   |    4 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java                                            |  119 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java                      |   38 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java                                   |   14 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java                                   |  175 
 Source/UBCS-WEB/vue.config.js                                                                                                          |    4 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java                                              |  117 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IAttributeService.java                                        |   86 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebUtil.java                                    |  712 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstempattrMapper.xml                                                 |   72 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlOracleMapper.java                                           |   58 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java                                       |    3 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsattributeEntity.java                           |    3 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/AppendDataExcelOption.java                        |   60 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtilForVCI.java                             |  162 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java                        |  631 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeLinkAttributesDTO.java                             |   98 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml                                                    |  182 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java                   |  168 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempphaseClient.java                                      |   11 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeattributeEntity.java                    |   11 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeRule.java                                        |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml                                        |    9 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Attribute.java                                         |  187 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestTypeEnum.java                         |    6 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/AttributeMapper.java                                           |   36 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeLcStatusConstant.java                         |   16 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/StatusVO.java                                              |  178 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java                                           |  151 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodePhaseattrClient.java                                     |    5 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/SessionInfo.java                           |  421 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/AttributeController.java                                   |  128 
 Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue                                                                      |  705 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeExportDTO.java                                     |   55 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml                                                         |    5 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempbuttonService.java                                 |  102 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java                               |   15 
 Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js                                                                              |   41 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleEventVO.java                                      |  177 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFieldSortVO.java                         |   50 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/VciEnum.java                                  |   24 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java                                                |    4 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeFieldConstant.java                            |  112 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecLengthTypeEnum.java                                 |    6 
 Source/UBCS-WEB/src/components/Tree/classifyTrees.vue                                                                                  |  259 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeEntity.java                             |    3 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyattrrepeatServiceImpl.java                      |    4 
 Source/UBCS-WEB/src/const/code/cloneOption.js                                                                                          |   48 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java                |  137 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeFallback.java                                 |   43 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java                                  |    3 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/LocalFileUtil.java                                  |  318 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java                                  |   62 
 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                         |  188 
 Source/UBCS-WEB/public/index.html                                                                                                      |    4 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleVO.java                                           |  233 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java                         |  141 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java                  |    6 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/FieldRange.java                                        |   39 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java                           |   41 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/ExcelUtil.java                                  | 1517 +++
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java                         |  160 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java                           |   43 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClstempattrEntity.java                           |    9 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtils.java                          |   72 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateButtonMapper.xml                                      |   45 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java                           |   52 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java                                   |  390 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/ReleasedObjDO.java                        |   58 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java                                 |   75 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingDataDTO.java                                     |    3 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/WriteExcelOption.java                             |   85 
 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-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java                 |    3 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyProcessTemp.java                         |   73 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java                         |  330 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmAndLinkTypeDdlDTO.java                                 |   26 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java                           |   70 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java                                      | 1132 ++
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BooleanEnum.java                             |   28 
 /dev/null                                                                                                                              |   51 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeRuleLC.java                                           |    3 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleEvent.java                                    |   82 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java                                            |  126 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java                          |   73 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java                            |    1 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java                                           |  179 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelTitle.java                           |   12 
 Source/UBCS/ubcs-service/ubcs-ddl/pom.xml                                                                                              |   54 
 332 files changed, 29,227 insertions(+), 853 deletions(-)

diff --git a/Source/UBCS-WEB/public/index.html b/Source/UBCS-WEB/public/index.html
index 87bb6ed..a4fd8d3 100644
--- a/Source/UBCS-WEB/public/index.html
+++ b/Source/UBCS-WEB/public/index.html
@@ -97,10 +97,6 @@
         鍒濇鍔犺浇璧勬簮鍙兘闇�瑕佽緝澶氭椂闂� 璇疯�愬績绛夊緟
       </div>
     </div>
-    <div class="avue-home__footer">
-      <a href="https://bladex.vip" target="_blank">
-        https://bladex.vip </a>
-    </div>
   </div>
 </div>
 <!-- built files will be auto injected -->
diff --git a/Source/UBCS-WEB/src/api/code/codeClassifyValue.js b/Source/UBCS-WEB/src/api/code/codeClassifyValue.js
new file mode 100644
index 0000000..91bb573
--- /dev/null
+++ b/Source/UBCS-WEB/src/api/code/codeClassifyValue.js
@@ -0,0 +1,43 @@
+import request from '@/router/axios';
+
+export const treeCodeClassifyValue = (params) => {
+  return request({
+    url: '/api/ubcs-code/codeClassifyValueController/treeCodeClassifyValue',
+    method: 'get',
+    params: {
+      ...params,
+    }
+  })
+}
+
+export const addSaveCodeClassifyValue = (codeFixedValueDTO) => {
+  return request({
+    url: '/api/ubcs-code/codeClassifyValueController/addSave',
+    method: 'post',
+    data: codeFixedValueDTO
+  })
+}
+
+export const editCodeClassifyValue = (codeFixedValueDTO) => {
+  return request({
+    url: '/api/ubcs-code/codeClassifyValueController/editSave',
+    method: 'put',
+    data: codeFixedValueDTO,
+  })
+}
+
+export const deleteCodeClassifyValue = (codeFixedValueDTO) => {
+  return request({
+    url: '/api/ubcs-code/codeClassifyValueController/deleteData',
+    method: 'delete',
+    data: codeFixedValueDTO,
+  })
+}
+
+export const saveCodeClassifyValueOrder = (data) => {
+  return request({
+    url: '/api/ubcs-code/codeClassifyValueController/saveOrder',
+    method: 'post',
+    data: data,
+  })
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/api/code/codeFixedValue.js b/Source/UBCS-WEB/src/api/code/codeFixedValue.js
new file mode 100644
index 0000000..407eb97
--- /dev/null
+++ b/Source/UBCS-WEB/src/api/code/codeFixedValue.js
@@ -0,0 +1,44 @@
+import request from '@/router/axios';
+
+export const gridCodeFixedValue = (current, size, params) => {
+  return request({
+    url: '/api/ubcs-code/codeFixedValueController/gridCodeFixedValue',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+export const addSaveCodeFixedValue = (codeFixedValueDTO) => {
+  return request({
+    url: '/api/ubcs-code/codeFixedValueController/addSave',
+    method: 'post',
+    data: codeFixedValueDTO,
+  })
+}
+
+export const editCodeFixedValue = (codeFixedValueDTO) => {
+  return request({
+    url: '/api/ubcs-code/codeFixedValueController/editSave',
+    method: 'put',
+    data: codeFixedValueDTO,
+  })
+}
+
+export const deleteCodeFixedValue = (codeFixedValueDTO) => {
+  return request({
+    url: '/api/ubcs-code/codeFixedValueController/deleteData',
+    method: 'delete',
+    data: codeFixedValueDTO,
+  })
+}
+
+export const saveOrder = (data) => {
+  return request({
+    url: '/api/ubcs-code/codeFixedValueController/saveOrder',
+    method: 'post',
+    data: data,
+  })
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/api/template/templateAttr.js b/Source/UBCS-WEB/src/api/template/templateAttr.js
index 33a2fc2..00fa47f 100644
--- a/Source/UBCS-WEB/src/api/template/templateAttr.js
+++ b/Source/UBCS-WEB/src/api/template/templateAttr.js
@@ -15,15 +15,65 @@
     data:data
   })
 }
-export const  TreeDel = (oid) =>{
+//妫�鏌ユ槸鍚﹀彲浠ュ垹闄�
+export const  TreeCheckDel = (data) =>{
   return request({
     url:'/api/ubcs-code/codeClassify/checkIsCanDelete',
     method: 'post',
+    data:data
+  })
+}
+//鍒犻櫎
+export const  TreeDel = (data) =>{
+  return request({
+    url:'/api/ubcs-code/codeClassify/deleteData',
+    method: 'Delete',
+    data:data
+  })
+}
+//鏆傛椂鏈夐棶棰�
+export const  TreeObjcet = (oid) =>{
+  return request({
+    url:'/api/ubcs-code/codeClassify/getObjectByOid',
+    method: 'get',
     params:{
       oid
     }
   })
 }
+//鍚敤
+export const  TreeEnable = (data) =>{
+  return request({
+    url:'/api/ubcs-code/codeClassify/enableData',
+    method: 'post',
+    data:data
+  })
+}
+//鍋滅敤
+export const  TreeDeactivate = (data) =>{
+  return request({
+    url:'/api/ubcs-code/codeClassify/disableData',
+    method: 'post',
+    data:data
+  })
+}
 
+export const  importClassify = (data) =>{
+  return request({
+    url:'/api/ubcs-code/codeClassify/importClassify',
+    method: 'post',
+    data:data
+  })
+}
 
+//涓婚敭鑾峰彇鍒嗙被妯℃澘灞炴��
+export const  gridCodeClassifyTemplateAttr = (oid) =>{
+  return request({
+    url:'/api/ubcs-code/codeClassifyTempAttrController/gridCodeClassifyTemplateAttr',
+    method: 'get',
+    params:{
+      oid
+    }
+  })
+}
 
diff --git a/Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue b/Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue
index 1fef09a..7d1f807 100644
--- a/Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue
+++ b/Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue
@@ -1,6 +1,5 @@
 <template>
   <avue-form v-model="TreeNewForm" :option="option" @submit="submit">
-
   </avue-form>
 
 </template>
diff --git a/Source/UBCS-WEB/src/components/Tree/classifyTrees.vue b/Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
index f38af3b..e439208 100644
--- a/Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
+++ b/Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
@@ -6,17 +6,25 @@
         <div>
           <div style="display: flex;justify-content: space-around">
             <el-button plain size="small" type="primary" @click="TreeAdd">娣诲姞</el-button>
-            <el-button plain size="small" type="primary">淇敼</el-button>
+            <el-button plain size="small" type="primary" @click="TreeEdit">淇敼</el-button>
             <el-button plain size="small" type="primary" @click="TreeDel">鍒犻櫎</el-button>
-            <el-button plain size="small" type="primary">鍚敤</el-button>
+            <el-button plain size="small" type="primary" @click="Enable">鍚敤</el-button>
           </div>
           <div style="display: flex;justify-content: space-around;margin-top: 5px;margin-bottom: 5px">
-            <el-button plain size="small" type="primary">鍋滅敤</el-button>
-            <el-button plain size="small" type="primary">瀵煎嚭</el-button>
-            <el-button plain size="small" type="primary">瀵煎叆</el-button>
+            <el-button plain size="small" type="primary" @click="Deactivate">鍋滅敤</el-button>
+            <el-button plain size="small" type="primary" @click="ExportExcel">瀵煎嚭</el-button>
+            <el-button plain size="small" type="primary" @click="ImportExcel">瀵煎叆</el-button>
             <el-button plain size="small" type="primary" @click="flushed">鍒锋柊</el-button>
           </div>
         </div>
+        <el-upload
+          multiple
+          :limit="3"
+          :on-preview="handlePreview"
+          action="https://jsonplaceholder.typicode.com/posts/"
+          :file-list="fileList">
+          <el-button size="small" type="primary" @click="importExcel">鐐瑰嚮涓婁紶</el-button>
+        </el-upload>
         <!--        鏍戣妭鐐规坊鍔犲璇濇-->
         <el-dialog :title="this.TreeFlag ? '娣诲姞鍒嗙被' :'娣诲姞涓婚搴�'" :visible.sync="TreeAddFormVisible" append-to-body
                    style="width: 1700px;margin: auto">
@@ -50,12 +58,18 @@
             <el-button type="primary" @click="TreeAddHandler">纭� 瀹�</el-button>
           </div>
         </el-dialog>
-        <avue-tree ref="tree" v-model="TreeAvueform" v-loading="loading" :data="Treedata" :option="Treeoption" :defaultExpandAll="false"
-                    style="height: 80.5vh;padding-top: 5px;padding-bottom: 30px"
+<!--        淇敼瀵硅瘽妗�-->
+        <el-dialog  title="淇敼鍒嗙被" :visible.sync="TreeEditFormVisible" append-to-body>
+          <classifyTreeform ref="childForm" :TreeNewForm="TreeList" :nodeList="nodeList"></classifyTreeform>
+        </el-dialog>
+        <avue-tree ref="tree" v-model="TreeAvueform" v-loading="loading" :data="Treedata" :defaultExpandAll="false"
+                   :option="Treeoption"
+                   style="height: 80.5vh;padding-top: 5px;padding-bottom: 30px"
                    @node-click=" nodeClick"
                    @check-change="checkChange"
         >
         </avue-tree>
+
       </basic-container>
     </el-aside>
     <el-main>
@@ -63,25 +77,26 @@
         <!--        鍙充晶琛ㄦ牸-->
         <avue-tabs :option="tabOption" @change="handleChange"></avue-tabs>
         <span v-if="type.prop==='tab1'">
-            <avue-crud v-model="crudForm" :data="this.Formlist" :option="this.crudTreeOption"
-                       style="height: 700px"></avue-crud>
+
+          <avue-crud v-model="crudForm" :data="this.Formlist" :option="this.crudTreeOption"
+          ></avue-crud>
+          <templatePro></templatePro>
         </span>
         <span v-else-if="type.prop==='tab2'">
+<!--          濡傛灉鏄〃鏍煎姞琛ㄥ崟灏卞啀娆″紩鍏ヨ繖涓猚lassifyTreeform缁勪欢锛岄噷闈㈡槸琛ㄥ崟鐨勫唴瀹癸紝娌$敤灏卞垹鎺夈�傛妸涓婇潰鐨則ab鏍忎篃鍒犻櫎浜�-->
 <!--          濡傛灉鏄〃鏍煎姞琛ㄥ崟灏卞啀娆″紩鍏ヨ繖涓猚lassifyTreeform缁勪欢锛岄噷闈㈡槸琛ㄥ崟鐨勫唴瀹癸紝娌$敤灏卞垹闄ゆ帀銆傛妸涓婇潰tab鏍忎篃鍒犻櫎浜�-->
-          <classifyTreeform ref="childForm" :TreeNewForm="TreeList" :nodeList="nodeList"></classifyTreeform>
-          <template-pro></template-pro>
+           <classifyTreeform ref="childForm" :TreeNewForm="TreeList" :nodeList="nodeList"></classifyTreeform>
         </span>
       </basic-container>
     </el-main>
   </el-container>
 </template>
-
 <script>
 //杩欓噷澹版槑涓�浜涜彍鍗曠粍浠剁敤娉曪細棣栧厛甯冨眬鍒嗕负宸︿晶鑿滃崟鍙充晶琛ㄦ牸锛屽彲鑳戒細鏈夊彸渚ab鏍忓姞琛ㄥ崟鐨勬儏鍐点�傛墍浠ュ彟澶栧紩鍏ヤ簡涓�涓彸渚ц〃鍗曠殑缁勪欢"classifyTreeform"銆�
 //棣栧厛鐖剁粍浠惰皟鐢ㄥ瓙缁勪欢鑿滃崟锛岄�氳繃provide浼犻�掑弬鏁般�傛湁Treeoption宸︿晶鏍戞柊澧炶〃鍗曢」 Treedata宸︿晶鏍戣妭鐐归厤缃」 crudTreeOption鍙充晶琛ㄦ牸閰嶇疆椤� crudTreeData鍙充晶琛ㄦ牸鏄剧ず鍐呭
 //鍏朵腑琛ㄦ牸鐨勯厤缃」鐩存帴鐖朵紶瀛愪紶閫掕繃鏉ュ氨琛岋紝鐩存帴:option=浼犻�掔殑鍙傛暟鍚嶏紝閲岄潰鏁版嵁鏄剧ず鐨勫唴瀹瑰洜涓烘槸鍜屽乏渚ц仈鍔ㄧ殑锛屾墍浠ラ噸鏂颁竴涓狥ormlist锛岄�氳繃鐐瑰嚮鏍戣妭鐐逛笅鏍囨潵鍔ㄦ�佹覆鏌撳彸渚ц〃鏍硷紝涓嬮潰鏂规硶閮芥湁鍏蜂綋娉ㄩ噴
 //鐒跺悗鍐嶈鍙充晶鐨勮〃鍗曪紝涓撻棬瀹氫箟浜嗕竴涓粍浠讹紝閫氳繃鐖朵紶瀛愬啀鎶婅〃鍗曟暟鎹甌reeList浼犻�掕繃鍘伙紝浼犻�掑墠鍦�10deCLi1ck鏂规硶閲岄潰渚夸簡澶勭悊涔熸槸涓�涓仈鍔ㄧ殑鏁堟灉锛岃〃鍗曠殑閰嶇疆椤瑰湪鍝釜瀛愮粍浠舵垨鑰呯埗缁勪欢鍐欓兘鍙互銆�
-import {getAtrrList,TreeSave,TreeDel} from "@/api/template/templateAttr";
+import {getAtrrList, TreeSave, TreeDel, TreeCheckDel,TreeObjcet,TreeEnable,TreeDeactivate,importClassify,gridCodeClassifyTemplateAttr} from "@/api/template/templateAttr";
 
 export default {
   name: "classifyTrees.vue",
@@ -91,12 +106,17 @@
   inject: ['crudTreeOption', "crudTreeData"],
   data() {
     return {
+      fileList:[],
+      FlagObj:{},
+      //淇敼瀵硅瘽妗�
+      TreeEditFormVisible:false,
+      //娣诲姞瀵硅瘽妗�
       TreeAddFormVisible: false,
       //褰撳墠鐐瑰嚮椤�
       nodeClickList: "",
-      // 鍒嗙被鍜屼富棰樺簱鐘舵��
+      //鍒嗙被鍜屼富棰樺簱鐘舵��
       TreeFlag: false,
-      // 鏍戝姞杞�
+      //鏍戝姞杞�
       loading: false,
       TreeAddform: {
         id: "",
@@ -115,13 +135,13 @@
       TreeAvueform: {},
       Treedata: [],
       Treeoption: {
-        addBtn:false,
-        editBtn:false,
-        delBtn:false,
+        addBtn: false,
+        editBtn: false,
+        delBtn: false,
         defaultExpandAll: false,
-        menu:false,
-        //杩欎釜鏄閫�
-        multiple:true,
+        menu: false,
+        // //杩欎釜鏄閫�
+        // multiple: true,
       },
       crudForm: "",
       //鍔ㄦ�佸垏鎹㈠鐞嗚繃鐨勮〃鏍兼暟鎹�
@@ -161,13 +181,27 @@
   mounted() {
     this.type = this.tabOption.column[0];
     this.getAttr();
+    console.log(this.fileList)
   },
   methods: {
+    ExportExcel(){
+      console.log(this.fileList)
+    },
+    importExcel(){
+
+    },
+    handlePreview(file) {
+      debugger
+      console.log(file);
+      importClassify(file.raw).then(res=>{
+        console.log(res)
+      })
+    },
     //鍒嗙被鏍戞暟鎹鐞�
     getAttr() {
       getAtrrList().then(res => {
         this.Treedata = res.data;
-        this.Treedata.forEach((item, value) => {
+        this.Treedata.forEach(() => {
           for (let i = 0; i < this.Treedata.length; i++) {
             this.Treedata[i].value = i;
           }
@@ -199,41 +233,63 @@
       }
     },
     //鏍戣妭鐐规坊鍔犱簨浠�
-    TreeAddHandler(){
-      const data=this.TreeAddform
-      this.$set(data,"parentCodeClassifyOid",this.nodeClickList.oid)
+    TreeAddHandler() {
+      const data = this.TreeAddform
+      this.$set(data, "parentCodeClassifyOid", this.nodeClickList.oid)
       console.log(data)
-      TreeSave(data).then(res=>{
-        console.log(res)
-      }).catch(res=>{
-        console.log(res)
+      TreeSave(data).then(() => {
+        this.$message({
+          type: 'success',
+          message: '娣诲姞鎴愬姛!'
+        });
+        this.getAttr();
+        this.TreeAddFormVisible = false
+        this.TreeAddform=""
+      }).catch(res => {
+        this.$message({
+          type: 'warning',
+          message: res
+        });
       })
     },
     //鏍戣妭鐐瑰垹闄ゆ寜閽�
-    TreeDel(){
-      const oid=this.nodeClickList.oid
-      if(this.nodeClickList !==""){
-        this.$confirm('鏄惁鍒犻櫎褰撳墠閫夋嫨鐨勫垎绫伙紝灏嗕細鎶婂瓙鍒嗙被涓�骞跺垹闄わ紝濡傛灉瀛樺湪缂栫爜鏁版嵁灏嗕笉鑳借鍒犻櫎锛屾槸鍚︾户缁紵', '鎻愮ず', {
-          confirmButtonText: '纭畾',
-          cancelButtonText: '鍙栨秷',
-          type: 'warning',
-          customClass: 'my-messagebox',
-        }).then(() => {
-          if(this.nodeClickList.children.length > 0){
+    TreeDel() {
+      this.$confirm('鏄惁鍒犻櫎褰撳墠閫夋嫨鐨勫垎绫伙紝灏嗕細鎶婂瓙鍒嗙被涓�骞跺垹闄わ紝濡傛灉瀛樺湪缂栫爜鏁版嵁灏嗕笉鑳借鍒犻櫎锛屾槸鍚︾户缁紵', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning',
+        customClass: 'my-messagebox',
+      }).then(() => {
+        TreeCheckDel(this.nodeClickList).then(res => {
+          if (res.data.data) {
+            TreeDel(this.nodeClickList).then(() => {
+              this.$message({
+                type: 'success',
+                message: '鍒犻櫎鎴愬姛!'
+              });
+              this.getAttr();
+            }).catch(res => {
+              this.$message({
+                type: 'warning',
+                message: res
+              });
+            })
+          } else {
             this.$confirm('褰撳墠鏁版嵁鍖呭惈鏈変笅绾ф暟鎹紝瑕佸垹闄ょ殑璇濅細鍜屼笅绾ф暟鎹竴璧峰垹闄わ紝浣犵‘璁ょ户缁�?', '鎻愮ず', {
               confirmButtonText: '纭畾',
               cancelButtonText: '鍙栨秷',
               type: 'warning',
               customClass: 'my-messageboxs',
             }).then(() => {
-              TreeDel(JSON.parse(oid)).then(()=>{
+              TreeDel(this.nodeClickList).then(() => {
                 this.$message({
                   type: 'success',
                   message: '鍒犻櫎鎴愬姛!'
                 });
-              }).catch(res=>{
+                this.getAttr();
+              }).catch(res => {
                 this.$message({
-                  type: 'error',
+                  type: 'warning',
                   message: res
                 });
               })
@@ -243,35 +299,95 @@
                 message: '宸插彇娑堝垹闄�'
               });
             });
-          }else {
-            TreeDel(oid).then(()=>{
-              this.$message({
-                type: 'success',
-                message: '鍒犻櫎鎴愬姛!'
-              });
-            }).catch(res=>{
-              this.$message({
-                type: 'error',
-                message: res
-              });
-            })
           }
-        }).catch(() => {
-          this.$message({
-            type: 'info',
-            message: '宸插彇娑堝垹闄�'
-          });
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
         });
+      });
+    },
+    //淇敼鍥炲~
+    TreeEdit(){
+      if(this.nodeClickList == ""){
+        this.$message({
+          type: 'warning',
+          message:'璇峰厛浠庢爲涓婇�夋嫨涓�鏉℃暟鎹�!'
+        });
+      }else {
+        this.TreeEditFormVisible=true
       }
     },
     //鏍戝埛鏂�
     flushed() {
-      this.loading = true
-      this.getAttr()
-      setTimeout(() => {
-        this.loading = false;
-        this.nodeClickList = ""
-      }, 600);
+      console.log(this.fileList)
+      // this.loading = true
+      // this.getAttr()
+      // setTimeout(() => {
+      //   this.loading = false;
+      //   this.nodeClickList = ""
+      // }, 600);
+    },
+    //鍚敤鍜屽仠鐢ㄩ兘鍏堝垽鏂姸鎬�
+    //鍚敤
+    Enable(){
+      if(this.FlagObj.lcStatus == "Enabled"){
+        this.$message({
+          type: 'warning',
+          message: '褰撳墠鍒嗙被涓嶆槸鍋滅敤鐘舵��'
+        });
+      }else {
+        this.$confirm('鏄惁灏嗗瓙鍒嗙被涓�骞跺惎鐢紵', '鎻愮ず', {
+          confirmButtonText: '鏄�',
+          cancelButtonText: '鍙栨秷',
+          type: 'warning'
+        }).then(() => {
+          TreeEnable(this.nodeClickList).then((res)=>{
+            console.log(res)
+            this.$message({
+              type: 'success',
+              message: '鍚敤鎴愬姛!'
+            });
+            this.getAttr()
+          })
+        }).catch(() => {
+          this.$message({
+            type: 'info',
+            message: '宸插彇娑堝惎鐢�'
+          });
+        });
+      }
+    },
+    //鍋滅敤
+    Deactivate(){
+      if(this.FlagObj.lcStatus ==="Disabled"){
+        this.$message({
+          type: 'warning',
+          message: '褰撳墠鍒嗙被涓嶆槸鍚敤鐘舵��!'
+        });
+      }else {
+        this.$confirm('鏄惁鍋滅敤褰撳墠鍒嗙被锛屽仠鐢ㄥ悗锛屽瓙鍒嗙被涔熷皢涓嶈兘琚娇鐢紝鏄惁缁х画锛�', '鎻愮ず', {
+          confirmButtonText: '纭畾',
+          cancelButtonText: '鍙栨秷',
+          type: 'warning'
+        }).then(() => {
+          TreeDeactivate(this.nodeClickList).then((res)=>{
+            console.log(res)
+            this.$message({
+              type: 'success',
+              message: '鍋滅敤鎴愬姛!'
+            });
+            this.nodeClickList['flag']=true;
+            this.getAttr()
+          })
+        }).catch(() => {
+          this.$message({
+            type: 'info',
+            message: '宸插彇娑堝仠鐢�'
+          });
+        });
+      }
     },
     nodeClick(data) {
       //鐐瑰嚮宸︿晶鏍戝彸渚у姩鎬佺殑鏂规硶
@@ -281,7 +397,15 @@
       //   return item.value == data.value
       // });
       this.nodeClickList = data
-      console.log(data)
+      TreeObjcet(data.oid).then(res=>{
+        console.log("object",res)
+        this.FlagObj=res.data.data
+      })
+      gridCodeClassifyTemplateAttr(data.oid).then(res=>{
+        console.log(res)
+      }).catch(res=>{
+        console.log(res)
+      })
     },
     //tab鏍忓垏鎹�
     handleChange(column) {
@@ -291,8 +415,6 @@
     checkChange(val) {
       console.log(val)
     },
-
-
   }
 }
 </script>
@@ -302,7 +424,6 @@
   display: flex;
   flex-wrap: wrap; /* 璁剧疆鍙崲琛岋紝浠ヤ究鍦ㄥ皬灞忓箷璁惧涓婁娇鐢ㄥ琛屽竷灞� */
 }
-
 .el-form-item {
   flex: 1; /* 璁剧疆鍏冪礌鍗犳嵁1浠界┖闂� */
   margin-right: 1rem; /* 璁剧疆鍏冪礌涔嬮棿鐨勯棿璺� */
diff --git a/Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue b/Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue
new file mode 100644
index 0000000..1b582e6
--- /dev/null
+++ b/Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue
@@ -0,0 +1,705 @@
+<template>
+  <!-- 绗簩灞傚璇濇,灞炴�х爜娈碉紝鍏紡缂栬緫妗嗗脊绐� -->
+  <el-dialog
+    title="鍏紡缂栬緫妗�"
+    append-to-body
+    :visible.sync="isShowformulaEdit"
+    @close="closeFormulaEdit"
+    width="78%"
+    style="height: 150vh; margin-top: -13vh; overflow: hidden">
+
+    <div style="overflow-y: auto; height: 80vh">
+      <el-row>
+        <!-- 宸︿晶鍏紡鍐呭 -->
+        <el-col :span="14" style="overflow: hidden">
+          <el-card
+            class="box-card"
+            style="height: 33vh; overflow-y: auto; overflow-x: auto">
+            <div slot="header" class="clearfix">
+              <span style="font-size: medium">鍏紡鍐呭</span>
+              <el-button
+                type="primary"
+                size="mini"
+                style="float: right"
+                @click="saveFormulaContent">
+                纭畾
+              </el-button>
+              <el-button
+                type="warning"
+                size="mini"
+                style="margin-right: 10px; float: right"
+                @click="resetFormulaContent">
+                娓呯┖鍐呭
+              </el-button>
+            </div>
+            <div class="text item">
+              <el-input
+                type="textarea"
+                :rows="5"
+                style="width: 560px"
+                v-model="formulaContent"
+              ></el-input>
+            </div>
+          </el-card>
+        </el-col>
+        <!-- 鍙充晶杩愮畻绗� -->
+        <el-col :span="10">
+          <el-card
+            class="box-card"
+            style="height: 33vh;">
+            <div slot="header" class="clearfix">
+              <span style="font-size: medium">杩愮畻绗�</span>
+            </div>
+            <div class="text item">
+              <div class="formula-editor">
+                <div class="one">
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '7' })"
+                  >
+                    7
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '8' })"
+                  >
+                    8
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '9' })"
+                  >
+                    9
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '/' })"
+                  >
+                    /</button
+                  ><br />
+                </div>
+                <div class="one">
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '4' })"
+                  >
+                    4
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '5' })"
+                  >
+                    5
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '6' })"
+                  >
+                    6
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '*' })"
+                  >
+                    *</button
+                  ><br />
+                </div>
+                <div class="one">
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '1' })"
+                  >
+                    1
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '2' })"
+                  >
+                    2
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '3' })"
+                  >
+                    3
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '>' })"
+                  >
+                    -</button
+                  ><br />
+                </div>
+                <div class="one">
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '0' })"
+                  >
+                    0
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '00' })"
+                  >
+                    00
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '.' })"
+                  >
+                    .
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '+' })"
+                  >
+                    +</button
+                  ><br />
+                </div>
+                <div class="one">
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '->' })"
+                  >
+                    ->
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '==' })"
+                  >
+                    ==
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '(' })"
+                  >
+                    (
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: ')' })"
+                  >
+                    )</button
+                  ><br />
+                </div>
+                <div class="one">
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '<' })"
+                  >
+                    &lt;
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '>' })"
+                  >
+                    &gt;
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '<=' })"
+                  >
+                    &lt;=
+                  </button>
+                  <button
+                    class="formula-editor-btn-sm"
+                    @click="dbClickAddContent({ formula: '>=' })"
+                  >
+                    &gt;=
+                  </button>
+                </div>
+              </div>
+            </div>
+          </el-card>
+        </el-col>
+      </el-row>
+      <el-row>
+        <!-- 宸︿晶鍏紡閫夋嫨鍖哄煙 -->
+        <el-col :span="14" style="overflow: hidden">
+          <el-card
+            class="box-card"
+            style="height: 40vh; overflow-y: auto; overflow-x: auto"
+          >
+            <div slot="header" class="clearfix">
+              <span style="font-size: medium">鍏紡閫夋嫨</span>
+            </div>
+            <div class="text item">
+              <el-tabs v-model="activeName">
+                <el-tab-pane label="甯哥敤" name="first">
+                  <el-table
+                    :data="commonFormulaTableData"
+                    :show-header="false"
+                    @row-dblclick="dbClickAddContent"
+                    style="width: 100%"
+                  >
+                    <el-table-column prop="formula" width="300">
+                    </el-table-column>
+                    <el-table-column prop="desc" width="300"> </el-table-column>
+                  </el-table>
+                </el-tab-pane>
+
+                <el-tab-pane label="璐㈠姟" name="second">
+                  <el-table
+                    :data="financialFormulaTableData"
+                    @row-dblclick="dbClickAddContent"
+                    :show-header="false"
+                    style="width: 100%"
+                  >
+                    <el-table-column prop="formula" width="300">
+                    </el-table-column>
+                    <el-table-column prop="desc" width="300"> </el-table-column>
+                  </el-table>
+                </el-tab-pane>
+
+                <el-tab-pane label="鏃ユ湡" name="third">
+                  <el-table
+                    :data="dateFormulaTableData"
+                    :show-header="false"
+                    @row-dblclick="dbClickAddContent"
+                    style="width: 100%"
+                  >
+                    <el-table-column prop="formula" width="300">
+                    </el-table-column>
+                    <el-table-column prop="desc" width="300"> </el-table-column>
+                  </el-table>
+                </el-tab-pane>
+
+                <el-tab-pane label="鏁板" name="fourth">
+                  <el-table
+                    :data="mathFormulaTableData"
+                    :show-header="false"
+                    @row-dblclick="dbClickAddContent"
+                    style="width: 100%"
+                  >
+                    <el-table-column prop="formula" width="300">
+                    </el-table-column>
+                    <el-table-column prop="desc" width="300"> </el-table-column>
+                  </el-table>
+                </el-tab-pane>
+
+                <el-tab-pane label="鍏朵粬" name="five">
+                  <el-table
+                    :data="otherFormulaTableData"
+                    @row-dblclick="dbClickAddContent"
+                    :show-header="false"
+                    style="width: 100%"
+                  >
+                    <el-table-column prop="formula" width="300">
+                    </el-table-column>
+                    <el-table-column prop="desc" width="300"> </el-table-column>
+                  </el-table>
+                </el-tab-pane>
+              </el-tabs>
+            </div>
+          </el-card>
+        </el-col>
+        <!-- 鍙充晶鍙橀噺閫夋嫨鍖哄煙 -->
+        <el-col :span="10" style="overflow: hidden">
+          <el-card
+            class="box-card"
+            style="height: 40vh; overflow-y: auto; overflow-x: auto"
+          >
+            <div slot="header" class="clearfix">
+              <span style="font-size: medium">鍙橀噺</span>
+            </div>
+            <div class="text item">
+              <el-tabs v-model="activeNameAttr">
+                <el-tab-pane label="鏈満鏅彉閲�" name="first">
+                  <el-table
+                    :data="thisSceneTableData"
+                    @row-dblclick="dbClickAddContent"
+                    :show-header="false"
+                    style="width: 100%"
+                  >
+                    <el-table-column prop="formula" width="40">
+                    </el-table-column>
+                    <el-table-column prop="desc" width="100"> </el-table-column>
+                  </el-table>
+                </el-tab-pane>
+                <el-tab-pane label="绯荤粺鍙橀噺" name="second">
+                  <el-table
+                    :data="systemVariableTableData"
+                    @row-dblclick="dbClickAddContent"
+                    :show-header="false"
+                    style="width: 100%"
+                  >
+                    <el-table-column prop="formula" width="150">
+                    </el-table-column>
+                    <el-table-column prop="desc" width="150"> </el-table-column>
+                  </el-table>
+                </el-tab-pane>
+              </el-tabs>
+            </div>
+          </el-card>
+        </el-col>
+      </el-row>
+    </div>
+
+  </el-dialog>
+</template>
+  
+  <script>
+export default {
+  name: "formulaEditor",
+  props: {
+    //鏈満鏅彉閲�
+    thisSceneTableData: {
+      type: Array,
+    },
+     //绯荤粺鍙橀噺
+    systemVariableTableData: {
+      type: Array,
+    },
+  },
+  data() {
+    return {
+      isShowformulaEdit: false, //鍏紡缂栬緫妗嗗璇濇鏄剧ず鎺у埗
+      formulaContent: '', //鍏紡缂栬緫妗嗗唴瀹�,鏂逛究鍊肩殑鍥炰紶
+      activeName: 'first', //褰撳墠娲诲姩鐨則ab
+      activeNameAttr: 'first', //鍙橀噺涓殑褰撳墠娲诲姩tab
+      //甯哥敤鍏紡
+      commonFormulaTableData: [
+      {
+          formula: "if(compare,trueResult,falseResult)",
+          desc: "濡傛灉compare鐨勮〃杈惧紡涓簍rue锛屽垯鎵цtrueResult鐨勮〃杈惧紡锛屽惁鍒欐墽琛宖laseResult.渚嬪if(3>2,2*(3+2),3/(2-4)),鍊肩瓑浜�10",
+      },
+      {
+          formula: "sum(douber1,douber2)",
+          desc: "涓や釜鏍煎紡涓篸ouber鐨勫弬鏁版眰鍜�",
+      },
+      {
+          formula: "sub(douber1,douber2)",
+          desc: "鏍煎紡涓篸ouber鐨勫弬鏁癲ouber1鍑忓幓鏍煎紡涓篸ouber鐨勫弬鏁癲ouber2",
+      },
+      {
+          formula: "mul(douber1,douber2)",
+          desc: "涓や釜鏍煎紡涓篸ouber鐨勫弬鏁扮浉涔�",
+      },
+      {
+          formula: "div(douber1,douber2)",
+          desc: "鏍煎紡涓篸ouber鐨勫弬鏁癲ouber1闄や互鏍煎紡涓篸ouber鐨勫弬鏁癲ouber2.褰揹ouber2绛変簬0鐨勬椂鍊欙紝杩斿洖0;濡傛灉闄や笉灏界殑鏃跺�欎繚鐣�10浣嶅皬鏁�",
+      },
+      {
+          formula: "mod(int,int)",
+          desc: "姹備綑鏁�",
+      },
+      {
+          formula: "toInt(string)",
+          desc: "杞崲涓篿nt鏍煎紡",
+      },
+      {
+          formula: "doubleRound(string,count)",
+          desc: "澶勭悊douber鐨勫皬鏁颁綅鏁帮紝count琛ㄧず灏忔暟浣嶆暟",
+      },
+      {
+          formula: "zeroIfNull(value)",
+          desc: '濡傛灉鍙傛暟鐨勫�间负null鎴栬��"",灏嗚繑鍥�0',
+      },
+      {
+          formula: "endsWith(string,str1)",
+          desc: "瀛楃涓瞫tring鏄笉鏄互str1缁撳熬",
+      },
+      {
+          formula: "startsWith(string,str1)",
+          desc: "瀛楃涓瞫tring鏄惁浠tr1寮�澶�",
+      },
+      {
+          formula: "charAt(string,index)",
+          desc: "鑾峰彇瀛楃涓瞫tring涓index浣嶇疆鐨勫瓧绗︼紝濡傛灉闀垮害灏忎簬index锛屽垯杩斿洖",
+      },
+      {
+          formula: "equalsIgnoreCase(str1,str2)",
+          desc: "瀛楃涓瞫tr1鍜屽瓧绗︿覆str2鏄惁鐩哥瓑",
+      },
+      {
+          formula: "indexOf(str1,str2)",
+          desc: "瀛楃涓瞫tr2鍦ㄥ瓧绗︿覆str1涓娆″嚭鐜扮殑浣嶇疆",
+      },
+      {
+          formula: "isEmpty(str1)",
+          desc: "鍙傛暟str1鏄惁涓虹┖锛屽叾涓璶ull杩欎釜瀛楃涓蹭篃琛ㄧず涓虹┖",
+      },
+      {
+          formula: "lastIndexOf(str1,str2)",
+          desc: "瀛楃涓瞫tr2鍦ㄥ瓧绗︿覆str1涓渶鍚庡嚭鐜扮殑浣嶇疆",
+      },
+      {
+          formula: "leftStr(str1,index)",
+          desc: "鑾峰彇index浣嶇疆宸︿晶鐨勬墍鏈夊瓧绗�",
+      },
+      {
+          formula: "rightStr(str1,str2)",
+          desc: "鑾峰彇index浣嶇疆鍙充晶鐨勬墍鏈夊瓧绗�",
+      },
+      {
+          formula: "length(str1)",
+          desc: "鍙傛暟str1鐨勯暱搴�",
+      },
+      {
+          formula: "mid(str1,start,end)",
+          desc: "鑾峰彇str1鐨勪粠start鍒癳nd鐩存帴鐨勫瓧绗︿覆锛屽嚭鐜板紓甯告椂杩斿洖",
+      },
+      {
+          formula: "tolowercase(str1)",
+          desc: "灏嗗瓧绗︿覆str1杞负灏忓啓",
+      },
+      {
+          formula: "touppercase(str1)",
+          desc: "灏嗗瓧绗︿覆str1杞负澶у啓",
+      },
+      {
+          formula: "trimzero(str1)",
+          desc: "鍘婚櫎瀛楃涓瞫tr1涓殑0",
+      },
+      {
+          formula: "MD5(str1)",
+          desc: "灏嗗瓧绗︿覆杩涜MD5鍔犲瘑",
+      },
+      ],
+      //璐㈠姟鍏紡
+      financialFormulaTableData: [
+      {
+          formula: "toChinese(value)",
+          desc: "灏嗛樋鎷変集鏁板瓧杞负涓烘眽瀛楀ぇ鍐欐柟寮�",
+      },
+      {
+          formula: "getChineseCurrency(value)",
+          desc: "灏嗛樋鎷変集鏁板瓧杞负涓烘眽瀛楅噾棰濆ぇ鍐欐柟寮忥紝涓巘ochiness鐨勫尯鍒槸杩欎釜浼氭樉绀哄厓銆佽銆佸垎",
+      },
+      {
+          formula: "setThmark(value)",
+          desc: "涓哄弬鏁皏alue璁剧疆鍗冨垎浣�",
+      },
+      ],
+      //鏃ユ湡鍏紡
+      dateFormulaTableData: [
+      {
+          formula: "compareDate(d1,d2)",
+          desc: "瀵规瘮鍙傛暟d1,d2鐨勫ぇ灏忋�俤1,d2涓簓yyy-MM-dd鏍煎紡鐨勬棩鏈熷瓧绗︿覆",
+      },
+      {
+          formula: "nowDate()",
+          desc: "鑾峰彇褰撳墠鏃ユ湡",
+      },
+      {
+          formula: "chinaDate(d1)",
+          desc: "灏嗘椂闂磋浆鎹负鍐滃巻锛宒1鏄痽yyy-MM-dd鏍煎紡鐨勬棩鏈熷瓧绗︿覆",
+      },
+      {
+          formula: "dateAdd(d1,count)",
+          desc: "鍦╠1鐨勫熀纭�涓婃坊鍔燾ount澶�,d1涓簓yyy-MM-dd HH:mm:ss鏍煎紡鐨勬椂闂村瓧绗︿覆",
+      },
+      {
+          formula: "dateBalanceYear(sourceDate,targetDate,false)",
+          desc: '璁$畻鐩稿樊鐨勫勾浠斤紝姣斿璁$畻骞撮緞锛宼argetDate涓�""琛ㄧず褰撳墠鏃堕棿锛岀涓変釜鍙傛暟涓簍rue琛ㄧず鏈夊浣欑殑鏈堜唤鎴栬�呭ぉ鏁版椂锛屽氨鍔�1;',
+      },
+      {
+          formula: "dateBalanceDay(sourceDate,targetDate)",
+          desc: '璁$畻鐩稿樊鐨勫ぉ鏁帮紝targetDate涓�""琛ㄧず褰撳墠鏃堕棿',
+      },
+      {
+          formula: "dateformat(d1,format)<",
+          desc: "灏嗗綋鍓嶇殑鏃ユ湡锛堟椂闂达級瀛楃涓茶浆涓烘寚瀹氱殑瀛楃涓诧紝濡傛灉format鐨勫唴瀹规湁绌烘牸锛岃浣跨敤&浠f浛",
+      },
+      {
+          formula: "nowDatetime()",
+          desc: "鑾峰彇褰撳墠鏃ユ湡鍜屾椂闂淬�傛牸寮忎负yyyy-MM-dd HH:mm:ss",
+      },
+      {
+          formula: "dayOf(d1)",
+          desc: "鑾峰彇鏍煎紡涓簓yyy-MM-dd鐨勬棩鏈熺殑澶╂暟",
+      },
+      {
+          formula: "nowMon()",
+          desc: "鑾峰彇褰撳墠鐨勬湀浠斤紝鏍煎紡涓篗M",
+      },
+      {
+          formula: "monOf(d1)",
+          desc: "鑾峰彇鏃ユ湡d1鐨勬湀浠芥暟",
+      },
+      {
+          formula: "nowTime()",
+          desc: "鑾峰彇褰撳墠鏃堕棿锛屾牸寮忎负HH:mm:ss",
+      },
+      {
+          formula: "nowYear()",
+          desc: "鑾峰彇骞翠唤锛屾牸寮忎负yyyy",
+      },
+      {
+          formula: "yearOf()",
+          desc: "鑾峰彇鏃堕棿d1鐨勫勾浠�",
+      },
+      ],
+      //鏁板鍏紡
+      mathFormulaTableData: [
+      {
+          formula: "abs(value)",
+          desc: "姹傚弬鏁皏alue鐨勭粷瀵瑰�硷紝value蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "acos(value)",
+          desc: "姹傚弬鏁皏alue鐨勫弽浣欏鸡锛寁alue蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "asin(value)",
+          desc: "姹傚弬鏁皏alue鐨勫弽姝e鸡锛寁alue蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "atan(value)",
+          desc: "姹傚弬鏁皏alue鐨勫弽姝e垏锛寁alue蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "cbrt(value)",
+          desc: "姹傚弬鏁皏alue鐨勭珛鏂规牴锛寁alue蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "ceil(value)",
+          desc: "杩斿洖涓嶅ぇ浜庡弬鏁皏alue鐨勬渶灏忔暣鏁帮紝渚嬪ceil(1.7)灏辩瓑浜�2锛寁alue蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "cos(value)",
+          desc: "姹傚弬鏁皏alue鐨勪綑寮﹀�硷紝value蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "cosh(value)",
+          desc: "姹傚弬鏁皏alue鐨勫弻鏇蹭綑寮﹀�硷紝value蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "exp(n)",
+          desc: "娆ф媺鏁� e 鐨刵娆″箓锛宯蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "floor(n)",
+          desc: "娆ф媺鏁� e 鐨刵娆″箓鍑�1锛宯蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "log(value)",
+          desc: "杩斿洖涓嶅皬浜庡弬鏁皏alue鐨勬渶澶ф暣鏁帮紝渚嬪floor(1.7)绛変簬1锛宯蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "log10(value)",
+          desc: "鑷劧瀵规暟,value蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "log1p(value)",
+          desc: "璁$畻搴曟暟涓� 10 鐨勫鏁�,value蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "random()",
+          desc: "杩斿洖鍙傛暟涓� 1 涔嬪拰鐨勮嚜鐒跺鏁帮紝value蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "rint(value)",
+          desc: "杩斿洖涓�涓吉闅忔満鏁帮紝璇ュ�煎ぇ浜庣瓑浜� 0.0 涓斿皬浜� 1.0",
+      },
+      {
+          formula: "round(value)",
+          desc: "杩斿洖鍏跺�兼渶鎺ヨ繎鍙傛暟骞朵笖鏄暣鏁扮殑 double 鍊笺�傚鏋滀袱涓暣鏁扮殑 double 鍊奸兘鍚屾牱鎺ヨ繎锛岄偅涔堢粨鏋滃彇鍋舵暟銆傜壒娈婃儏鍐垫槸锛氬鏋滃弬鏁板�兼槸鏁存暟锛岄偅涔堢粨鏋滃氨鏄鍙傛暟銆傚鏋滃弬鏁版槸 NaN 鎴栨棤绌峰ぇ鎴栨闆舵垨璐熼浂锛岄偅涔堢粨鏋滀笌鍙傛暟鐩稿悓",
+      },
+      {
+          formula: "signum(value)",
+          desc: "绗﹀彿鍑芥暟锛涘鏋滃弬鏁颁负 0锛屽垯杩斿洖 0锛涘鏋滃弬鏁板ぇ浜� 0锛� 鍒欒繑鍥� 1.0锛涘鏋滃弬鏁板皬浜� 0锛屽垯杩斿洖 -1.0",
+      },
+      {
+          formula: "sin(value)",
+          desc: "姹傚弬鏁皏alue鐨勬寮﹀�硷紝value蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "sinh(value)",
+          desc: "姹傚弬鏁皏alue鐨勫弻鏇叉寮﹀�硷紝value蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "tan(value)",
+          desc: "姹傚弬鏁皏alue鐨勬鍒囧�硷紝value蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "tanh(value)",
+          desc: "姹傚弬鏁皏alue鐨勫弻鏇叉鍒囧�硷紝value蹇呴』涓烘暟瀛楁牸寮�",
+      },
+      {
+          formula: "max(v1,v2)",
+          desc: "姹備袱涓暟涓殑杈冨ぇ鐨勫�硷紝v1,v2閮藉繀椤讳负鏁板瓧鏍煎紡锛屼緥濡俶ax(3.2,3)灏辩瓑浜�3.2",
+      },
+      {
+          formula: "min(v1,v2)",
+          desc: "姹備袱涓暟涓殑杈冨皬鐨勫�硷紝v1,v2閮藉繀椤讳负鏁板瓧鏍煎紡锛屼緥濡俶ax(3.2,3)灏辩瓑浜�3",
+      },
+      {
+          formula: "sqrt(value)",
+          desc: "姹傚钩鏂规牴",
+      },
+      ],
+      //鍏朵粬鍏紡
+      otherFormulaTableData: [
+      {
+          formula: "getcolvalue(servername,tablename,fieldname,pkField,pkValue)",
+          desc: "鏌ヨservername涓璽ablename鏁版嵁搴撹〃涓璮ieldname瀛楁鐨勫�硷紝pkfield琛ㄧず涓婚敭鐨勫瓧娈靛悕绉帮紝pkValue琛ㄧず涓婚敭鐨勫�硷紝serverName鐜板湪榛樿涓簂ocalServer",
+      },
+      ],
+    };
+  },
+  methods: {
+
+    //鍙屽嚮娣诲姞鍏紡鍐呭
+    dbClickAddContent(row){
+      //console.log(row.formula);
+      this.formulaContent = this.formulaContent + row.formula;
+    },
+    //娓呯┖鍏紡鍐呭
+    resetFormulaContent(){
+      this.formulaContent = '';
+    },
+    //鍏抽棴鏃舵竻绌轰笂娆″叕寮忓唴瀹�
+    closeFormulaEdit(){
+      this.resetFormulaContent();
+    },
+    //缂栬緫瀹屾垚鍏紡鍐呭鍥炴樉骞跺叧闂璇濇
+    saveFormulaContent(){
+      //console.log(this.formulaContent);
+      if(this.formulaContent.trim == null || this.formulaContent.trim == ''){
+          this.$message.warning("鍏紡鍐呭涓嶈兘涓虹┖锛�");
+          return;
+      }
+      //鍏紡鍐呭鍥炴樉
+      this.$emit('updateFormulaContent', this.formulaContent) // 瑙﹀彂update:data灏嗗瓙缁勪欢鍊间紶閫掔粰鐖剁粍浠�
+      this.isShowformulaEdit = false;  
+    },
+
+  },
+};
+</script>
+  
+<style scoped>
+  .formula-editor{
+    margin-top: -15px;
+    margin-left: 4vw;
+    /*璁剧疆寮规�х洅瀛�*/
+    display: flex;
+    /*瀛愬厓绱犱互绔栧垪鎺掑垪锛屼竴鍏辨湁6鍒�*/
+    flex-direction:column;
+    width: 310px;
+    height: 185px;
+    /*宸﹀彸鍧囧寑鎺掑垪*/
+    justify-content: space-around;
+    /*涓婁笅鍧囧寑鎺掑垪*/
+    align-items: center;
+  }
+
+  .one{
+    display: flex;
+    /*浠ヨ鎺掑垪*/
+    flex-direction: row;
+    width: 223px;
+    height: 80px;
+    justify-content: space-between;
+    align-items: center;
+	}    
+
+  .formula-editor-btn-sm {
+    width: 55px;
+    height: 29px;
+    background: rgb(153, 214, 240);
+    border-radius: 10%;
+  }
+</style>
+  
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/const/code/classifyTreeOptionDialog.js b/Source/UBCS-WEB/src/const/code/classifyTreeOptionDialog.js
new file mode 100644
index 0000000..c812387
--- /dev/null
+++ b/Source/UBCS-WEB/src/const/code/classifyTreeOptionDialog.js
@@ -0,0 +1,35 @@
+import { treeTopCodeClassify } from "@/api/code/codeclassify";
+
+export default {
+    nodeKey: 'oid',
+    border: true,
+    lazy: true,
+    treeLoad: function (node, resolve) {
+      // const parentId = (node.level === 0) ? 0 : node.data.id;
+      treeTopCodeClassify({"queryAllLevel": true,"loadType": "all","multipleSelect": false}).then( res=> {
+        resolve(res.data.map(classifyitem => {
+          let item = {
+            "hasChildren": false,
+            "oid": classifyitem.oid,
+            "key": classifyitem.oid,
+            "parentId": 0,
+            "title": classifyitem.text,
+            "value": classifyitem.oid,
+          }
+          return {
+            ...item,
+            leaf: !item.hasChildren
+          }
+        }))
+      });
+    },
+    addBtn: false,
+    menu: false,
+    size: 'small',
+    props: {
+      labelText: '鏍囬',
+      label: 'title',
+      value: 'value',
+      children: 'children'
+    }
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js b/Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js
new file mode 100644
index 0000000..8673ed6
--- /dev/null
+++ b/Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js
@@ -0,0 +1,41 @@
+export default {
+    nodeKey: 'oid',
+    border: true,
+    lazy: false,
+    defaultExpandAll: true,
+    treeLoad: function (node, resolve) {
+      // const parentId = (node.level === 0) ? 0 : node.data.id;
+     
+      // treeCodeClassifyValue(condtionData).then( res=> {
+      //   console.log(res);
+      //   resolve(res.data.map(classifyValueItem => {
+      //     let item = {
+      //       "hasChildren": item.children!=null,
+      //       "oid": classifyValueItem.oid,
+      //       "key": classifyValueItem.oid,
+      //       "parentId": classifyValueItem.parentclassifyvalueoid,
+      //       "title": classifyValueItem.text,
+      //       "value": classifyValueItem.oid,
+      //     }
+      //     return {
+      //       ...item,
+      //       leaf: item.hasChildren
+      //     }
+      //   }))
+      // });
+    },
+    addBtn: false,
+    menu: false,
+    size: 'small',
+    props: {
+      labelText: 'text',
+      label: 'text',
+      key: 'oid',
+      value: 'oid',
+      parentId: 'parentId',
+      parentBtmName: 'parentBtmName',
+      parentName: 'parentName',
+      codeclassifysecoid: 'codeclassifysecoid',
+      children: 'children'
+    }
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/const/code/cloneBasicDialogOption.js b/Source/UBCS-WEB/src/const/code/cloneBasicDialogOption.js
new file mode 100644
index 0000000..9652ecc
--- /dev/null
+++ b/Source/UBCS-WEB/src/const/code/cloneBasicDialogOption.js
@@ -0,0 +1,48 @@
+export default {
+    height:"190px",
+    calcHeight: 30,
+    tip: false,
+    editBtn: false,
+    addBtn: false,
+    delBtn: false,
+    searchShow: false,
+    searchBtn: false,
+    searchMenuSpan: 5,
+    disablePage: false,
+    border: true,
+    index: true,
+    viewBtn: false,
+    selection: true,
+    menu: false,
+    refreshBtn: false,
+    columnBtn: false,
+    dialogClickModal: false,
+    highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
+    column: [
+      {
+        label: "鐮佹缂栧彿",
+        prop: "id",
+        search: false,
+        searchLabelWidth: 80,
+        searchSpan: 5,
+      },
+      {
+        label: "鐮佹鍚嶇О",
+        prop: "name",
+        search: false,
+        searchLabelWidth: 80,
+        searchSpan: 5,
+      },
+      {
+        label: "鐮佹鎻忚堪",
+        prop: "description",
+        search: false,
+        span: 24,
+      },
+      {
+        label: "鐮佹绫诲瀷",
+        prop: "secTypeText",
+      }
+
+    ]
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js b/Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js
new file mode 100644
index 0000000..abc2316
--- /dev/null
+++ b/Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js
@@ -0,0 +1,44 @@
+export default {
+    height:"210px",
+    calcHeight: 30,
+    tip: false,
+    editBtn: false,
+    addBtn: false,
+    delBtn: false,
+    searchShow: false,
+    searchMenuSpan: 5,
+    disablePage: true,
+    border: true,
+    index: true,
+    viewBtn: false,
+    selection: true,
+    menu: false,
+    refreshBtn: false,
+    columnBtn: false,
+    dialogClickModal: false,
+    highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
+    column: [
+      {
+        label: "缂栧彿",
+        prop: "id",
+        search: false,
+      },
+      {
+        label: "鍚嶇О",
+        prop: "name",
+        search: false,
+      },
+      {
+        label: "鎻忚堪",
+        prop: "description",
+        search: false,
+        type: "textarea",
+        span: 24,
+      },
+      {
+        label: "鐘舵��",
+        prop: "lcStatusText",
+        search: false,
+      },
+    ]
+  }
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/const/code/cloneOption.js b/Source/UBCS-WEB/src/const/code/cloneOption.js
new file mode 100644
index 0000000..cb90ef4
--- /dev/null
+++ b/Source/UBCS-WEB/src/const/code/cloneOption.js
@@ -0,0 +1,48 @@
+export default {
+    height:'350px',
+    calcHeight: 30,
+    tip: false,
+    editBtn: false,
+    addBtn: false,
+    delBtn: false,
+    searchShow: false,
+    searchMenuSpan: 5,
+    disablePage: false,
+    border: true,
+    index: true,
+    viewBtn: false,
+    selection: false,
+    menu:true,
+    refreshBtn: false,
+    columnBtn: false,
+    dialogClickModal: false,
+    highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
+    column: [
+      {
+        label: "鐮佹缂栧彿",
+        prop: "id",
+        search: false,
+        searchLabelWidth: 80,
+        searchSpan: 5,
+      },
+      {
+        label: "鐮佹鍚嶇О",
+        prop: "name",
+        search: false,
+        searchLabelWidth: 80,
+        searchSpan: 5,
+      },
+      {
+        label: "鐮佹鎻忚堪",
+        prop: "description",
+        search: false,
+        span: 24,
+      },
+      {
+        label: "鐮佹绫诲瀷",
+        prop: "secTypeText",
+        search: false,
+      }
+
+    ]
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/const/code/fixedValueMgrDialog.js b/Source/UBCS-WEB/src/const/code/fixedValueMgrDialog.js
new file mode 100644
index 0000000..674ff41
--- /dev/null
+++ b/Source/UBCS-WEB/src/const/code/fixedValueMgrDialog.js
@@ -0,0 +1,37 @@
+export default {
+    //width: '70%',
+    height: '60vh',
+    calcHeight: 30,
+    tip: false,
+    editBtn: false,
+    addBtn: false,
+    delBtn: false,
+    searchShow: false,
+    searchMenuSpan: 5,
+    border: true,
+    disablePage: false,
+    index: true,
+    viewBtn: false,
+    selection: false,
+    menu: true,
+    refreshBtn: false,
+    columnBtn: false,
+    dialogClickModal: false,
+    highlightCurrentRow: true,
+    column: [
+      {
+        label: "鐮佸��",
+        prop: "id",
+        search: false,
+        searchLabelWidth: 100,
+        searchSpan: 7,
+      },
+      {
+        label: "鎻忚堪",
+        prop: "description",
+        search: false,
+        searchLabelWidth: 100,
+        searchSpan: 7,
+      },
+    ]
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/const/code/parentClassifyParentOptionDialog.js b/Source/UBCS-WEB/src/const/code/parentClassifyParentOptionDialog.js
new file mode 100644
index 0000000..b195987
--- /dev/null
+++ b/Source/UBCS-WEB/src/const/code/parentClassifyParentOptionDialog.js
@@ -0,0 +1,38 @@
+export default {
+    height: '40vh',
+    calcHeight: 30,
+    tip: false,
+    editBtn: false,
+    addBtn: false,
+    searchShow: true,
+    searchMenuSpan: 5,
+    border: true,
+    disablePage: false,
+    index: true,
+    viewBtn: false,
+    selection: true,
+    menu: false,
+    dialogClickModal: false,
+    highlightCurrentRow: true,
+    column: [
+      {
+        label: "鑻辨枃鍚嶇О",
+        prop: "id",
+        search: true,
+        searchLabelWidth: 100,
+        searchSpan: 7,
+      },
+      {
+        label: "涓枃鍚嶇О",
+        prop: "name",
+        search: true,
+        searchLabelWidth: 100,
+        searchSpan: 7,
+      },
+      {
+        label: "鎻忚堪",
+        prop: "description",
+        search: false,
+      },
+    ]
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/const/code/referBtmDialog.js b/Source/UBCS-WEB/src/const/code/referBtmDialog.js
new file mode 100644
index 0000000..9533435
--- /dev/null
+++ b/Source/UBCS-WEB/src/const/code/referBtmDialog.js
@@ -0,0 +1,38 @@
+export default {
+    height: '40vh',
+    calcHeight: 30,
+    tip: false,
+    editBtn: false,
+    addBtn: false,
+    searchShow: true,
+    searchMenuSpan: 5,
+    border: true,
+    disablePage: false,
+    index: true,
+    viewBtn: false,
+    selection: true,
+    menu: false,
+    dialogClickModal: false,
+    highlightCurrentRow: true,
+    column: [
+      {
+        label: "涓氬姟绫诲瀷缂栧彿",
+        prop: "id",
+        search: true,
+        searchLabelWidth: 100,
+        searchSpan: 7,
+      },
+      {
+        label: "涓氬姟绫诲瀷鍚嶇О",
+        prop: "name",
+        search: true,
+        searchLabelWidth: 100,
+        searchSpan: 7,
+      },
+      {
+        label: "鎻忚堪",
+        prop: "description",
+        search: false,
+      },
+    ]
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/const/code/selectAttrOptionDialog.js b/Source/UBCS-WEB/src/const/code/selectAttrOptionDialog.js
new file mode 100644
index 0000000..2437b44
--- /dev/null
+++ b/Source/UBCS-WEB/src/const/code/selectAttrOptionDialog.js
@@ -0,0 +1,42 @@
+export default {
+    calcHeight: 30,
+    tip: false,
+    editBtn: false,
+    addBtn: false,
+    searchShow: true,
+    searchMenuSpan: 5,
+    disablePage: false,
+    border: true,
+    index: true,
+    viewBtn: false,
+    selection: true,
+    menu: false,
+    dialogClickModal: false,
+    highlightCurrentRow: true,
+    column: [
+      {
+        label: "灞炴�ц嫳鏂囧悕绉�",
+        prop: "id",
+        search: true,
+        searchLabelWidth: 100,
+        searchSpan: 7,
+      },
+      {
+        label: "灞炴�т腑鏂囧悕绉�",
+        prop: "name",
+        search: true,
+        searchLabelWidth: 100,
+        searchSpan: 7,
+      },
+      {
+        label: "灞炴�ч暱搴�",
+        prop: "attrLength",
+        search: false,
+      },
+      {
+        label: "灞炴�х被鍨�",
+        prop: "attributeDataTypeText",
+        search: false,
+      }
+    ]
+}
\ No newline at end of file
diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js
index cc749b7..409f9ef 100644
--- a/Source/UBCS-WEB/vue.config.js
+++ b/Source/UBCS-WEB/vue.config.js
@@ -26,8 +26,8 @@
     proxy: {
       '/api': {
         //鏈湴鏈嶅姟鎺ュ彛鍦板潃
-        // target: 'http://192.168.0.103:37000/',
-        target: 'http://dev.vci-tech.com:37000',
+        target: 'http://192.168.0.108:37000/',
+        // target: 'http://dev.vci-tech.com:37000',
         //杩滅▼婕旂ず鏈嶅姟鍦板潃,鍙敤浜庣洿鎺ュ惎鍔ㄩ」鐩�
         //target: 'https://saber.bladex.vip/api',
         ws: true,
diff --git a/Source/UBCS/pom.xml b/Source/UBCS/pom.xml
index e9b0a36..f8735c7 100644
--- a/Source/UBCS/pom.xml
+++ b/Source/UBCS/pom.xml
@@ -19,6 +19,7 @@
         <spring.boot.version>2.7.1</spring.boot.version>
         <spring.cloud.version>2021.0.3</spring.cloud.version>
         <spring.platform.version>Cairo-SR8</spring.platform.version>
+        <maven.plugin.version>3.8.1</maven.plugin.version>
 
         <!-- 鎺ㄨ崘浣跨敤Harbor -->
         <docker.registry.url>192.168.0.157</docker.registry.url>
@@ -87,6 +88,17 @@
         </dependency>
     </dependencies>
 
+    <!--  jar閮ㄧ讲鍒扮鏈嶅湴鍧�  -->
+    <distributionManagement>
+        <repository>
+            <id>rdc-releases</id>
+            <url>http://dev.yunkeruida.top:9000/repository/maven-releases/</url>
+        </repository>
+        <snapshotRepository>
+            <id>rdc-snapshots</id>
+            <url>http://dev.yunkeruida.top:9000/repository/maven-snapshots/</url>
+        </snapshotRepository>
+    </distributionManagement>
     <build>
         <finalName>${project.name}</finalName>
         <resources>
@@ -173,10 +185,11 @@
                     <skip>true</skip>
                 </configuration>
             </plugin>
-            <plugin>
+            <!--springboot鎵撳寘鎻掍欢浼氬幓鎵炬瘡涓ā鍧椾笅闈㈢殑鍚姩绫伙紝鍥犱负褰撳墠鏈変笉闇�瑕佸惎鍔ㄧ被鐨勯渶姹傦紝鎵�浠ユ敞閲婃帀锛屼娇鐢╩vn鐨勬墦鍖呮彃浠�-->
+            <!--<plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-            </plugin>
+            </plugin>-->
             <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>${maven.plugin.version}</version>
diff --git a/Source/UBCS/ubcs-common/pom.xml b/Source/UBCS/ubcs-common/pom.xml
index 2be5184..7e63c7b 100644
--- a/Source/UBCS/ubcs-common/pom.xml
+++ b/Source/UBCS/ubcs-common/pom.xml
@@ -28,6 +28,12 @@
             <artifactId>blade-core-auto</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-core</artifactId>
+            <version>3.5.2</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>
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
index 49fc37c..38a5faf 100644
--- 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
@@ -41,19 +41,19 @@
 	 * nacos dev 鍦板潃
 	 */
 	//String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_DEV_ADDR = "192.168.93.161:38848";
+	String NACOS_DEV_ADDR = "192.168.93.185:38848";
 
 	/**
 	 * nacos prod 鍦板潃
 	 */
 	//String NACOS_PROD_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_PROD_ADDR = "192.168.93.129:38848";
+	String NACOS_PROD_ADDR = "127.0.0.1:8848";
 
 	/**
 	 * nacos test 鍦板潃
 	 */
 	//String NACOS_TEST_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_TEST_ADDR = "192.168.93.133:38848";
+	String NACOS_TEST_ADDR = "127.0.0.1:8848";
 
 	/**
 	 * sentinel dev 鍦板潃
diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/CommonUtil.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/CommonUtil.java
index 2ded4e0..6b81915 100644
--- a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/CommonUtil.java
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/CommonUtil.java
@@ -23,4 +23,8 @@
  */
 public class CommonUtil {
 
+
+
+
+
 }
diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/PageDO2PageVO.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/PageDO2PageVO.java
new file mode 100644
index 0000000..4b0ef32
--- /dev/null
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/utils/PageDO2PageVO.java
@@ -0,0 +1,23 @@
+package com.vci.ubcs.common.utils;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+public class PageDO2PageVO {
+
+	/**
+	 * pagedo杞负pagevo锛岄噷闈㈢殑鍒嗛〉鍙傛暟闇�瑕佽浆鎹�
+	 * @param doList pageDO瀵硅薄
+	 * @param pageList pageVO瀵硅薄
+	 * @param <T> DO瀵硅薄绫诲瀷
+	 * @param <R> VO瀵硅薄绫诲瀷
+	 * @return
+	 */
+	public static <T,R> IPage<R> pageDO2PageVO(IPage<T> doList,IPage<R> pageList){
+		pageList.setTotal(doList.getTotal());
+		pageList.setSize(doList.getSize());
+		pageList.setCurrent(doList.getCurrent());
+		pageList.setPages(doList.getPages());
+		return pageList;
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java
index ea24050..6c41ebc 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java
@@ -63,7 +63,6 @@
 		return R.data(pages);
 	}
 
-
 	/**
 	 * 鍙樻洿娴佺▼鐘舵��
 	 *
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/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml
index 1156ae8..fcacf04 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml
@@ -13,16 +13,16 @@
     <version>${bladex.project.version}</version>
     <dependencies>
 
-<!--        <dependency>-->
-<!--            <groupId>com.thoughtworks.xstream</groupId>-->
-<!--            <artifactId>xstream</artifactId>-->
-<!--        </dependency>-->
-<!--        <dependency>-->
-<!--            <groupId>com.vci</groupId>-->
-<!--            <artifactId>vci-starter-poi</artifactId>-->
-<!--            <version>1.0-SNAPSHOT</version>-->
-<!--            <scope>compile</scope>-->
-<!--        </dependency>-->
+        <!--<dependency>
+            <groupId>com.thoughtworks.xstream</groupId>
+            <artifactId>xstream</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-starter-poi</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>-->
 
         <!--<dependency>
             <groupId>com.vci</groupId>
@@ -78,6 +78,13 @@
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-util-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+
     </dependencies>
     <packaging>jar</packaging>
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/TreeWrapperOptions.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/TreeWrapperOptions.java
deleted file mode 100644
index 3825007..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/TreeWrapperOptions.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.vci.ubcs.code.bo;
-
-
-import com.vci.ubcs.code.vo.pagemodel.TreeQueryObject;
-
-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/code/dto/CodeBasicSecDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java
index f2b43df..fccd42b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java
@@ -19,12 +19,12 @@
 	/**
 	 * 鐮佹绫诲瀷
 	 */
-	private String sectype;
+	private String secType;
 
 	/**
 	 * 鐮佹绫诲瀷鏄剧ず鏂囨湰
 	 */
-	private String sectypeText;
+	private String secTypeText;
 
 	/**
 	 * 缂栫爜瑙勫垯涓婚敭
@@ -243,23 +243,23 @@
 	/**
 	 * 鑾峰彇 鐮佹绫诲瀷
 	 */
-	public String getSectype (){
-		return sectype;
+	public String getSecType (){
+		return secType;
 	}
 
 	/**
 	 * 璁剧疆 鐮佹绫诲瀷
 	 */
-	public void setSectype (String sectype){
-		this.sectype = sectype;
+	public void setSecType (String sectype){
+		this.secType = sectype;
 	}
 
-	public String getSectypeText() {
-		return sectypeText;
+	public String getSecTypeText() {
+		return secTypeText;
 	}
 
-	public void setSectypeText(String sectypeText) {
-		this.sectypeText = sectypeText;
+	public void setSecTypeText(String secTypeText) {
+		this.secTypeText = secTypeText;
 	}
 
 	/**
@@ -620,8 +620,8 @@
 	@Override
 	public String toString() {
 		return "CodeBasicSecDTO{" +
-				"sectype='" + sectype + '\'' +
-				", sectypeText='" + sectypeText + '\'' +
+				"sectype='" + secType + '\'' +
+				", secTypeText='" + secTypeText + '\'' +
 				", pkCodeRule='" + pkCodeRule + '\'' +
 				", orderNum=" + orderNum +
 				", referBtmId='" + referBtmId + '\'' +
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeFixedValueDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeFixedValueDTO.java
index 3e30710..2c6d133 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeFixedValueDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeFixedValueDTO.java
@@ -6,7 +6,7 @@
 /**
  * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
  *
- * @author weidy
+ * @author ludc
  * @date 2022-01-24
  */
 public class CodeFixedValueDTO extends BaseModelVO {
@@ -19,7 +19,7 @@
 	/**
 	 * 鍥哄畾鐮佹涓婚敭
 	 */
-	private String codefixedsecoid;
+	private String codeFixedSecOid;
 
 	/**
 	 * 鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
@@ -28,21 +28,21 @@
 	/**
 	 * 鐮佸�煎簭鍙�
 	 */
-	private Integer ordernum;
+	private Integer orderNum;
 
 
 	/**
 	 * 鑾峰彇 鍥哄畾鐮佹涓婚敭
 	 */
-	public String getCodefixedsecoid (){
-		return codefixedsecoid;
+	public String getCodeFixedSecOid (){
+		return codeFixedSecOid;
 	}
 
 	/**
 	 * 璁剧疆 鍥哄畾鐮佹涓婚敭
 	 */
-	public void setCodefixedsecoid (String codefixedsecoid){
-		this.codefixedsecoid = codefixedsecoid;
+	public void setCodeFixedSecOid (String codeFixedSecOid){
+		this.codeFixedSecOid = codeFixedSecOid;
 	}
 
 	/**
@@ -61,24 +61,24 @@
 	/**
 	 * 鑾峰彇 鐮佸�煎簭鍙�
 	 */
-	public Integer getOrdernum (){
-		return ordernum;
+	public Integer getOrderNum (){
+		return orderNum;
 	}
 
 	/**
 	 * 璁剧疆 鐮佸�煎簭鍙�
 	 */
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
+	public void setOrderNum (Integer ordernum){
+		this.orderNum = ordernum;
 	}
 
 
 	@Override
 	public String toString() {
 		return "CodeFixedValueDTO{" +
-		"codefixedsecoid='" + codefixedsecoid +"',"+
+		"codeFixedSecOid='" + codeFixedSecOid +"',"+
 		"codefixedsecoidName='" + codefixedsecoidName +"'," +
-		"ordernum='" + ordernum +"',"+
+		"orderNum='" + orderNum +"',"+
 		"}" + super.toString();
 	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java
index 994d4a6..e6c9f24 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java
@@ -1,6 +1,7 @@
 package com.vci.ubcs.code.dto;
 
-import com.vci.web.dto.BaseModelDTO;
+
+import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
 
 import java.util.List;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTempbuttonDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTempbuttonDTO.java
deleted file mode 100644
index 2a26918..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTempbuttonDTO.java
+++ /dev/null
@@ -1,34 +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.dto;
-
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CodeTempbuttonDTO extends CodeTempbuttonEntity {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTempphaseDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTempphaseDTO.java
deleted file mode 100644
index c753d6b..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTempphaseDTO.java
+++ /dev/null
@@ -1,34 +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.dto;
-
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CodeTempphaseDTO extends CodeTempphaseEntity {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingDataDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingDataDTO.java
index fbf62ab..094a2c9 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingDataDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/DockingDataDTO.java
@@ -1,6 +1,7 @@
 package com.vci.ubcs.code.dto;
 
-import com.vci.ubcs.code.entity.BaseModel;
+
+import com.vci.ubcs.starter.revision.model.BaseModel;
 
 /**
  * 瑕佹帹閫佸緱鏁版嵁
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/PreApplyCodeOrderDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/PreApplyCodeOrderDTO.java
index a56fef7..18bedae 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/PreApplyCodeOrderDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/PreApplyCodeOrderDTO.java
@@ -1,6 +1,7 @@
 package com.vci.ubcs.code.dto;
 
-import com.vci.web.dto.BaseModelDTO;
+
+import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
 
 import java.util.List;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/BaseModelDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/BaseModelDTO.java
index d14778e..5318bd6 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/BaseModelDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/BaseModelDTO.java
@@ -1,7 +1,7 @@
-package com.vci.web.dto;
+package com.vci.ubcs.code.dto.datapush;
 
 
-import com.vci.ubcs.code.entity.BaseModel;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 
 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/code/entity/BaseModel.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/BaseModel.java
deleted file mode 100644
index 73e18ca..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/BaseModel.java
+++ /dev/null
@@ -1,355 +0,0 @@
-package com.vci.ubcs.code.entity;
-
-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/code/entity/CodeAllCode.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeAllCode.java
index 63d4b5f..371a319 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeAllCode.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeAllCode.java
@@ -18,6 +18,7 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java
index 6e62873..7c76ebe 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java
@@ -2,10 +2,9 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.vci.ubcs.com.vci.starter.annotation.Transient;
-import com.vci.ubcs.com.vci.starter.web.annotation.VciUseEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.EnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
+
+import com.vci.ubcs.starter.annotation.Transient;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -20,7 +19,7 @@
 @TableName("PL_CODE_BASICSEC")
 @ApiModel(value = "CodeBasicSec瀵硅薄", description = "鐮佹鍩虹淇℃伅")
 @EqualsAndHashCode(callSuper = true)
-public class CodeBasicSec extends BaseModel{
+public class CodeBasicSec extends BaseModel {
 
 	/**
 	 * 搴忓垪鍖�
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButton.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButton.java
new file mode 100644
index 0000000..f91f223
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButton.java
@@ -0,0 +1,189 @@
+/*
+ *      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.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 妯℃澘鎵╁睍姹� 瀹炰綋绫�
+ *
+ * @author yuxc
+ * @since 2023-03-29
+ */
+@Data
+@TableName("PL_CODE_BUTTON")
+@ApiModel(value = "codebutton瀵硅薄", description = "妯℃澘鎵╁睍姹�")
+//@EqualsAndHashCode(callSuper = false)
+public class CodeButton implements Serializable {
+	@JsonSerialize(
+		using = ToStringSerializer.class
+	)
+	@ApiModelProperty("涓婚敭id")
+	@TableId(
+		value = "oid",
+		type = IdType.ASSIGN_ID
+	)
+	private Long oid;
+	@ApiModelProperty("鎸夐挳缂栫爜")
+	private String id;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String revisionoid;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String nameoid;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String btmname;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String lastr;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String firstr;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String lastv;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String firstv;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String creator;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Date createtime;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String lastmodifier;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Date lastmodifytime;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String revisionrule;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String versionrule;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Short revisionseq;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String revisionvalue;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Short versionseq;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String versionvalue;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String lctid;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String lcstatus;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Date ts;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String name;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String description;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String owner;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String copyfromversion;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String iconcls;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String executejs;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String usedpositiontype;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButtonEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButtonEntity.java
deleted file mode 100644
index 5d4be04..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButtonEntity.java
+++ /dev/null
@@ -1,189 +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.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 妯℃澘鎵╁睍姹� 瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-03-29
- */
-@Data
-@TableName("PL_CODE_BUTTON")
-@ApiModel(value = "codebutton瀵硅薄", description = "妯℃澘鎵╁睍姹�")
-//@EqualsAndHashCode(callSuper = false)
-public class CodeButtonEntity  implements Serializable {
-	@JsonSerialize(
-		using = ToStringSerializer.class
-	)
-	@ApiModelProperty("涓婚敭id")
-	@TableId(
-		value = "oid",
-		type = IdType.ASSIGN_ID
-	)
-	private Long oid;
-	@ApiModelProperty("鎸夐挳缂栫爜")
-	private String id;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String revisionoid;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String nameoid;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String btmname;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String lastr;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String firstr;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String lastv;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String firstv;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String creator;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private Date createtime;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String lastmodifier;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private Date lastmodifytime;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String revisionrule;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String versionrule;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private Short revisionseq;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String revisionvalue;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private Short versionseq;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String versionvalue;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String lctid;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String lcstatus;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private Date ts;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String name;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String description;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String owner;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String copyfromversion;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String iconcls;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String executejs;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String usedpositiontype;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassify.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassify.java
index 24530a6..cf9eb71 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassify.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassify.java
@@ -2,7 +2,8 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.vci.ubcs.com.vci.starter.annotation.Transient;
+import com.vci.ubcs.starter.annotation.Transient;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyProcessTemp.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyProcessTemp.java
new file mode 100644
index 0000000..d20b833
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyProcessTemp.java
@@ -0,0 +1,73 @@
+package com.vci.ubcs.code.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import com.vci.ubcs.starter.web.annotation.VciUseEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+ * @author ludc
+ * @date 2023/5/5
+ */
+@Data
+@TableName("PL_CODE_CLSFLOWTEMP")
+@ApiModel(value = "CodeTempphase瀵硅薄", description = "鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�")
+public class CodeClassifyProcessTemp extends BaseModel {
+
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 6606901931032525995L;
+	/**
+	 * 涓婚搴撳垎绫讳富閿�
+	 */
+	//@Column(nullable = false,columnDefinition = "涓婚搴撳垎绫讳富閿�")
+	//@VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY)
+	private String codeClassifyOid;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	//@Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+	//@VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+	private String classifyTemplateOid;
+
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ��
+	 */
+	//@Column(columnDefinition = "娴佺▼妯℃澘鐢ㄩ��",nullable = false)
+	@VciUseEnum(value = MdmEnumIdConstant.CODE_CLASSIFY_PROCESS_USE,showTextField = "codeProcessUseText")
+	private String codeProcessUse;
+
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ�旀樉绀哄悕绉�
+	 */
+	//@Transient
+	@TableField(exist = false)
+	private String codeProcessUseText;
+
+	/**
+	 * 娴佺▼妯℃澘鐨勭増鏈�
+	 */
+	//@Column(nullable = false)
+	private String processVersion;
+
+	/**
+	 * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬х紪鍙�
+	 */
+	//@Column(columnDefinition = "鏄剧ず鍦ㄦ祦绋嬩腑鐨勫睘鎬�")
+	private String codeTempAttrOidArr;
+
+	/**
+	 * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬у悕绉�
+	 */
+	//@Column(columnDefinition = "鏄剧ず鍦ㄦ祦绋嬩腑鐨勫睘鎬у悕绉�")
+	private String codeTempAttrOidArrName;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateAttr.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateAttr.java
new file mode 100644
index 0000000..b33f4a0
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateAttr.java
@@ -0,0 +1,357 @@
+package com.vci.ubcs.code.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import com.vci.ubcs.starter.web.annotation.VciFieldType;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴��
+ * @author ludc
+ * @date 2022-1-17
+ */
+//@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,text = "涓婚搴撳垎绫荤殑妯℃澘灞炴��",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+@Data
+@TableName("PL_CODE_CLSTEMPATTR")
+@ApiModel(value = "CodeTempphase瀵硅薄", description = "缂栫爜搴撳畾涔�-妯℃澘闃舵")
+@EqualsAndHashCode(callSuper = true)
+public class CodeClassifyTemplateAttr extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -8685210169495428202L;
+
+    /**
+     * 鎵�灞炴ā鏉�
+     */
+    //@Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+    //@VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String classifyTemplateOid;
+
+    /**
+     * 鎵�灞炴ā鏉垮悕绉�
+     */
+    //@Transient(referColumn = "classifyTemplateOid.name")
+    private String classifyTemplateOidName;
+
+    /**
+     * 灞炴�х殑绫诲瀷
+     */
+    //@Column(columnDefinition = "灞炴�х殑绫诲瀷",nullable = false)
+    private String attributeDataType;
+
+    /**
+     * 鏄惁鍏抽敭灞炴��
+     */
+    //@Column(columnDefinition = "鏄惁鍏抽敭灞炴��",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String keyAttrFlag;
+
+    /**
+     * 鏄惁蹇�熸煡璇㈠睘鎬�
+     */
+    //@Column(columnDefinition = "鏄惁蹇�熸煡璇㈠睘鎬�",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String queryAttrFlag;
+
+    /**
+     * 鏄惁楂樼骇鏌ヨ灞炴��
+     */
+    //@Column(columnDefinition = "鏄惁楂樼骇鏌ヨ灞炴��",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String seniorQueryAttrFlag;
+
+    /**
+     * 鐩镐技鏌ラ噸灞炴��
+     */
+    //@Column(columnDefinition = "鐩镐技鏌ラ噸灞炴��",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String sameRepeatAttrFlag;
+
+    /**
+     * 鏄惁鎺掑簭
+     */
+    //@Column(columnDefinition = "鏄惁鎺掑簭",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String sortAttrFlag;
+
+    /**
+     * 鏄惁鐢熸垚浜岀淮鐮�
+     */
+    //@Column(columnDefinition = "鏄惁鐢熸垚浜岀淮鐮�",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String qrcodeFlag;
+
+    /**
+     * 鏄惁鐢熸垚鏉″舰鐮�
+     */
+    //@Column(columnDefinition = "鏄惁鐢熸垚涓�缁寸爜",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String barcodeFlag;
+
+
+    /**
+     * 缁勫悎瑙勫垯
+     */
+    //@Column(columnDefinition = "缁勫悎瑙勫垯",length = 4000)
+    private String componentRule;
+
+    /**
+     * 楠岃瘉瑙勫垯
+     */
+    //@Column(columnDefinition = "楠岃瘉瑙勫垯",length = 4000)
+    private String verifyRule;
+
+    /**
+     * 鍒嗙被娉ㄥ叆灞傜骇
+     */
+    //@Column(columnDefinition = "鍒嗙被娉ㄥ叆灞傜骇",defaultValue = "none")
+    private String classifyInvokeLevel;
+
+    /**
+     * 鍒嗙被娉ㄥ叆鐨勫睘鎬�
+     */
+    //@Column(columnDefinition = "鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�",length = 32)
+    private String classifyInvokeAttr;
+
+    /**
+     * 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+     */
+    //@Column(columnDefinition = "鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�",length = 200)
+    private String classifyInvokeAttrName;
+
+    /**
+     * 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+     */
+    //@Column(columnDefinition = "鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String classifyInvokeEditFlag;
+
+    /**
+     * 灞炴�ф帓搴忓彿
+     */
+    //@Column(columnDefinition = "灞炴�ф帓搴忓彿")
+    private Integer orderNum;
+
+    /**
+     * 琛ㄥ崟閲屾槸鍚︽樉绀�
+     */
+    //@Column(columnDefinition = "琛ㄥ崟閲屾槸鍚︽樉绀�",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String formDisplayFlag;
+
+    /**
+     * 鍒楄〃閲屾槸鍚︽樉绀�
+     */
+    //@Column(columnDefinition = "鍒楄〃閲屾槸鍚︽樉绀�",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String tableDisplayFlag;
+
+    /**
+     * 鎵�灞炲睘鎬у垎缁�
+     */
+    //@Column(columnDefinition = "鎵�灞炲睘鎬у垎缁�")
+    private String attributeGroup;
+
+    /**
+     * 浣跨敤鏋氫妇鑻辨枃缂栧彿
+     */
+    //@Column(columnDefinition = "浣跨敤鏋氫妇鑻辨枃缂栧彿")
+    private String enumId;
+
+    /**
+     * 浣跨敤鏋氫妇涓枃鍚嶇О
+     */
+    //@Column(columnDefinition = "浣跨敤鏋氫妇涓枃鍚嶇О")
+    private String enumName;
+
+    /**
+     * 鏋氫妇鏄惁鍙互缂栬緫
+     */
+    //@Column(columnDefinition = "鏋氫妇鏄惁鍙互缂栬緫")
+    private String enumEditFlag;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷
+     */
+    //@Column(columnDefinition = "鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�")
+    private String referBtmId;
+
+    /**
+     * 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+     */
+    //@Column(columnDefinition = "鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�")
+    private String referBtmName;
+
+    /**
+     * 鍙傜収鐨勭獥鍙i厤缃�
+     */
+    //@Column(columnDefinition = "鍙傜収绐楀彛閰嶇疆",length = 4000)
+    private String referConfig;
+
+    /**
+     * 鏄惁蹇呰緭
+     */
+    //@Column(columnDefinition = "鏄惁蹇呰緭",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String requireFlag;
+
+    /**
+     * 鏄惁鍙
+     */
+    //@Column(columnDefinition = "鏄惁鍙",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String readOnlyFlag;
+
+    /**
+     * 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+     */
+    //@Column(columnDefinition = "灞炴�ф帶鍒惰緭鍏ョ殑闀垮害",defaultValue = "254")
+    private Integer controlLength = 254;
+
+    /**
+     * 琛ㄥ崟涓婃樉绀虹殑鏍峰紡
+     */
+    //@Column(length = 1000,columnDefinition = "琛ㄥ崟閲屾樉绀虹殑鏍峰紡")
+    private String formDisplayStyle;
+
+    /**
+     * 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+     */
+    //@Column(length = 1000,columnDefinition = "琛ㄦ牸閲屾樉绀虹殑鏍峰紡")
+    private String tableDisplayStyle;
+
+    /**
+     * 琛ㄥ崟涓秴閾炬帴
+     */
+    //@Column(columnDefinition = "琛ㄥ崟涓秴閾炬帴鍐呭",length = 1000)
+    private String formHref;
+
+    /**
+     * 琛ㄦ牸涓秴閾炬帴
+     */
+    //@Column(columnDefinition = "琛ㄦ牸涓秴閾炬帴鍐呭",length = 1000)
+    private String tableHref;
+
+    /**
+     * 灏忔暟绮惧害
+     */
+    //@Column(columnDefinition = "灏忔暟绮惧害")
+    private Integer precisionLength;
+
+    /**
+     * 灏忔暟鍒诲害
+     */
+    //@Column(columnDefinition = "灏忔暟鍒诲害")
+    private Integer scaleLength;
+
+    /**
+     * 鍙栧�艰寖鍥�
+     */
+    //@Column(columnDefinition = "鍙栧�艰寖鍥�",length = 1000)
+    private String valueArea;
+
+    /**
+     * 鏃堕棿鏍煎紡
+     */
+    //@Column(columnDefinition = "鏃堕棿鏍煎紡")
+    private String codeDateFormat;
+
+    /**
+     * 琛ㄦ牸涓樉绀虹殑js
+     */
+    //@Column(columnDefinition = "琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js",length = 254)
+    private String tableDisplayJs;
+
+    /**
+     * 鏄惁鏄剧ず澶氳鏂囨湰
+     */
+    //@Column(columnDefinition = "鏄惁鏄剧ず澶氳鏂囨湰",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String textAreaFlag;
+
+    /**
+     * 鏄惁涓哄浘鐗囩瓑鍏冪礌
+     */
+    //@Column(columnDefinition = "棰勮鍥�",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String imageFlag;
+
+    /**
+     * 榛樿鍊�
+     */
+    //@Column(columnDefinition = "榛樿鍊�")
+    private String defaultValue;
+
+    /**
+     * 鍓嶇紑
+     */
+    //@Column(columnDefinition = "鍓嶇紑")
+    private String prefixValue;
+
+    /**
+     * 鍚庣紑
+     */
+    //@Column(columnDefinition = "鍚庣紑")
+    private String suffixValue;
+
+    /**
+     * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+     */
+    //@Column(columnDefinition = "閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��")
+    private String filterSourceAttr;
+
+    /**
+     * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+     */
+    //@Column(columnDefinition = "閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�")
+    private String filterSourceAttrName;
+
+    /**
+     * 浣跨敤鏋氫妇娉ㄥ叆鐨勫瓧绗︿覆鏍煎紡
+     */
+    //@Column(length = 4000,columnDefinition = "鏋氫妇娉ㄥ叆鐨勫唴瀹�")
+    private String enumString;
+
+    /**
+     * 灞炴�х殑瀹藉害
+     */
+    //@Column(columnDefinition = "灞炴�у垪琛ㄤ腑瀹藉害")
+    private Integer attrTableWidth;
+    /**
+     * 璇存槑
+     */
+    //@Column(columnDefinition = "璇存槑")
+    private String explain;
+
+    /**
+     * 閫夋嫨搴撴爣璇�
+     */
+    //@Column(columnDefinition = "閫夋嫨搴撴爣璇�")
+    private String libraryIdentification;
+
+    /**
+     * 绾ц仈灞炴�х紪鍙�
+     */
+    //@Column(columnDefinition = "绾ц仈灞炴�х紪鍙�")
+    private String parentCode;
+
+    /**
+     * 绾ц仈灞炴�у悕绉�
+     */
+    //@Column(columnDefinition = "绾ц仈灞炴�у悕绉�")
+    private String parentName;
+
+    /**
+     * 绾ц仈鏌ヨ灞炴��
+     */
+    //Column(columnDefinition = "绾ц仈鏌ヨ灞炴��")
+    private String parentQueryAttr;
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateButton.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateButton.java
new file mode 100644
index 0000000..17350ae
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateButton.java
@@ -0,0 +1,59 @@
+/*
+ *      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.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 瀹炰綋绫�
+ *
+ * @author yuxc
+ * @since 2023-04-20
+ */
+@Data
+@TableName("PL_CODE_TEMPBUTTON")
+@ApiModel(value = "CodeTempbutton瀵硅薄", description = "缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍")
+@EqualsAndHashCode(callSuper = true)
+public class CodeClassifyTemplateButton extends BaseModel {
+
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String classifytemplateoid;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String classifybuttonoid;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String buttonuse;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Integer orderNum;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java
index 3ec9702..c67f497 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java
@@ -1,6 +1,7 @@
 package com.vci.ubcs.code.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -8,8 +9,8 @@
 /**
  * 鍒嗙被鐮佹鐨勭爜鍊�
  * 鐩稿綋浜庣骇鑱旂殑涓嬫媺妗�
- * @author weidy
- * @date 2022-1-18
+ * @author ludc
+ * @date 2023/4/5
  */
 @Data
 @TableName("PL_CODE_CLASSIFYVALUE")
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClsflowtempEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClsflowtempEntity.java
index e0edcca..acf3e5c 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClsflowtempEntity.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClsflowtempEntity.java
@@ -16,13 +16,14 @@
  */
 package com.vci.ubcs.code.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import java.util.Date;
 import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘娴佺▼ 瀹炰綋绫�
@@ -37,11 +38,6 @@
 public class CodeClsflowtempEntity extends BaseModel {
 
 
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String islastr;
 	/**
 	 *
 	 */
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClstempattrEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClstempattrEntity.java
index d200636..27ca9c7 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClstempattrEntity.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClstempattrEntity.java
@@ -16,13 +16,13 @@
  */
 package com.vci.ubcs.code.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import java.util.Date;
 import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘灞炴�� 瀹炰綋绫�
@@ -202,12 +202,12 @@
 	 *
 	 */
 	@ApiModelProperty(value = "")
-	private Short precisionlength;
+	private Integer precisionlength;
 	/**
 	 *
 	 */
 	@ApiModelProperty(value = "")
-	private Short scalelength;
+	private Integer scalelength;
 	/**
 	 *
 	 */
@@ -272,6 +272,7 @@
 	 *
 	 */
 	@ApiModelProperty(value = "")
+	@TableField("\"EXPLAIN\"")
 	private String explain;
 	/**
 	 *
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClstemplateEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClstemplateEntity.java
index 08a3e33..e6e5c35 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClstemplateEntity.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClstemplateEntity.java
@@ -16,8 +16,10 @@
  */
 package com.vci.ubcs.code.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.vci.ubcs.com.vci.starter.annotation.Transient;
+import com.vci.ubcs.starter.annotation.Transient;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -55,6 +57,7 @@
 	/**
 	 * 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
 	 */
+	@TableField(exist = false)
 	@Transient(referColumn = "codeClassifyOid.name")
 	private String codeClassifyOidName;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java
index e9993c1..af993c8 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java
@@ -1,6 +1,7 @@
 package com.vci.ubcs.code.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsattributeEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsattributeEntity.java
index e547826..d79bed8 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsattributeEntity.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsattributeEntity.java
@@ -17,12 +17,11 @@
 package com.vci.ubcs.code.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import java.util.Date;
 import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
 
 /**
  * 灞炴�ф樉绀哄璞� 瀹炰綋绫�
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeEntity.java
index 401da89..8d35164 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeEntity.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeEntity.java
@@ -17,6 +17,7 @@
 package com.vci.ubcs.code.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -32,7 +33,7 @@
 @TableName("PL_CODE_OSBTMTYPE")
 @ApiModel(value = "PLCodeOsbtmtype瀵硅薄", description = "涓氬姟绫诲瀷")
 @EqualsAndHashCode(callSuper = true)
-public class CodeOsbtmtypeEntity  extends BaseModel  {
+public class CodeOsbtmtypeEntity  extends BaseModel {
 
 	/**
 	 * 搴忓垪鍖�
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeattributeEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeattributeEntity.java
index 1182bea..4c0a4df 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeattributeEntity.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeattributeEntity.java
@@ -16,7 +16,11 @@
  */
 package com.vci.ubcs.code.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -41,6 +45,13 @@
 	 */
 	private static final long serialVersionUID = -4431848943790920077L;
 
+
+	@JsonSerialize(
+		using = ToStringSerializer.class
+	)
+	@ApiModelProperty("涓婚敭id")
+	@TableId(value = "OID",type = IdType.ASSIGN_UUID)
+	private String oid;
 	/**
 	 * 鎵�灞炰笟鍔$被鍨�
 	 */
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseAttr.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseAttr.java
new file mode 100644
index 0000000..bd9536e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseAttr.java
@@ -0,0 +1,50 @@
+/*
+ *      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.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 瀹炰綋绫�
+ *
+ * @author yuxc
+ * @since 2023-04-20
+ */
+@Data
+@TableName("PL_CODE_PHASEATTR")
+@ApiModel(value = "CodePhaseattr瀵硅薄", description = "缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴��")
+@EqualsAndHashCode(callSuper = true)
+public class CodePhaseAttr extends BaseModel {
+
+
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String codePhaseOid;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String attributegroup;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseattrEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseattrEntity.java
deleted file mode 100644
index 801b91b..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseattrEntity.java
+++ /dev/null
@@ -1,51 +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.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import java.util.Date;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@Data
-@TableName("PL_CODE_PHASEATTR")
-@ApiModel(value = "CodePhaseattr瀵硅薄", description = "缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴��")
-@EqualsAndHashCode(callSuper = true)
-public class CodePhaseattrEntity extends BaseModel {
-
-
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String codephaseoid;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String attributegroup;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeRule.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeRule.java
index 0292e2c..e7fae53 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeRule.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeRule.java
@@ -17,6 +17,7 @@
 package com.vci.ubcs.code.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeSerialValue.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeSerialValue.java
index 29cb0b7..4fbaffc 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeSerialValue.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeSerialValue.java
@@ -2,6 +2,7 @@
 
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempbuttonEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempbuttonEntity.java
deleted file mode 100644
index 7685da9..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempbuttonEntity.java
+++ /dev/null
@@ -1,61 +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.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import java.util.Date;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@Data
-@TableName("PL_CODE_TEMPBUTTON")
-@ApiModel(value = "CodeTempbutton瀵硅薄", description = "缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍")
-@EqualsAndHashCode(callSuper = true)
-public class CodeTempbuttonEntity extends BaseModel {
-
-
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String classifytemplateoid;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String classifybuttonoid;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String buttonuse;
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private Short ordernum;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTemplatePhase.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTemplatePhase.java
new file mode 100644
index 0000000..cbcaa43
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTemplatePhase.java
@@ -0,0 +1,42 @@
+/*
+ *      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.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 缂栫爜搴撳畾涔�-妯℃澘闃舵 瀹炰綋绫�
+ *
+ * @author yuxc
+ * @since 2023-04-20
+ */
+@Data
+@TableName("PL_CODE_TEMPPHASE")
+@ApiModel(value = "CodeTempphase瀵硅薄", description = "缂栫爜搴撳畾涔�-妯℃澘闃舵")
+@EqualsAndHashCode(callSuper = true)
+public class CodeTemplatePhase extends BaseModel {
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String codeClassifyTemplateOid;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempphaseEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempphaseEntity.java
deleted file mode 100644
index 234d260..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempphaseEntity.java
+++ /dev/null
@@ -1,43 +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.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import java.util.Date;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.tenant.mp.TenantEntity;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵 瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@Data
-@TableName("PL_CODE_TEMPPHASE")
-@ApiModel(value = "CodeTempphase瀵硅薄", description = "缂栫爜搴撳畾涔�-妯℃澘闃舵")
-@EqualsAndHashCode(callSuper = true)
-public class CodeTempphaseEntity extends BaseModel {
-	/**
-	 *
-	 */
-	@ApiModelProperty(value = "")
-	private String codeclassifytemplateoid;
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/po/CodeClassifyPO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/po/CodeClassifyPO.java
index 97a9784..a50a4e7 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/po/CodeClassifyPO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/po/CodeClassifyPO.java
@@ -1,6 +1,6 @@
 package com.vci.ubcs.code.po;
 
-import com.vci.ubcs.com.vci.starter.poi.annotation.ExcelColumn;
+import com.vci.ubcs.starter.poi.annotation.ExcelColumn;
 
 /**
  * 涓婚搴撳垎绫荤殑瀵煎叆瀵煎嚭瀵硅薄
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeButtonVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeButtonVO.java
deleted file mode 100644
index 0d2121d..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeButtonVO.java
+++ /dev/null
@@ -1,45 +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.vo;
-
-import com.vci.ubcs.code.entity.CodeButtonEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 妯℃澘鎵╁睍姹� 瑙嗗浘瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-03-29
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CodeButtonVO extends CodeButtonEntity {
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * 浣嶇疆鍚嶇О
-	 */
-	private String usedpositiontypeName;
-	/**
-	 * 鐘舵�佸悕绉�
-	 */
-	private String lcstatusName;
-
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeOsbtmtypeattributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeOsbtmtypeattributeVO.java
index 05b1140..54018df 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeOsbtmtypeattributeVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeOsbtmtypeattributeVO.java
@@ -32,4 +32,11 @@
 public class CodeOsbtmtypeattributeVO extends CodeOsbtmtypeattributeEntity {
 	private static final long serialVersionUID = 1L;
 
+	public String id;
+	public String name;
+	public String attrDataType;
+	public String attributeLength;
+	public String referBtmTypeId;
+	public String referBtmTypeName;
+
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java
index 8fd4fad..6ffc784 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java
@@ -16,7 +16,7 @@
  */
 package com.vci.ubcs.code.vo;
 
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
 import org.springblade.core.tool.node.INode;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -29,7 +29,7 @@
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-public class CodePhaseattrVO extends CodePhaseattrEntity {
+public class CodePhaseattrVO extends CodePhaseAttr {
 	private static final long serialVersionUID = 1L;
 
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempbuttonVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempbuttonVO.java
deleted file mode 100644
index 5eb1a67..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempbuttonVO.java
+++ /dev/null
@@ -1,35 +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.vo;
-
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import org.springblade.core.tool.node.INode;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 瑙嗗浘瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CodeTempbuttonVO extends CodeTempbuttonEntity {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempphaseVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempphaseVO.java
deleted file mode 100644
index c1110e2..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempphaseVO.java
+++ /dev/null
@@ -1,35 +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.vo;
-
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import org.springblade.core.tool.node.INode;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵 瑙嗗浘瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CodeTempphaseVO extends CodeTempphaseEntity {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java
index 4c1c979..43e837a 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java
@@ -350,8 +350,8 @@
 	/**
 	* 璁剧疆 鐮佹绫诲瀷
 	*/
-	public void setSecType (String sectype){
-		this.secType = sectype;
+	public void setSecType (String secType){
+		this.secType = secType;
 	}
 
 	public String getSecTypeText() {
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java
index d9142bc..17a172b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java
@@ -1,5 +1,6 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
 import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
 
 import java.util.List;
@@ -10,7 +11,7 @@
  * @author weidy
  * @date 2022-01-24
  */
-public class CodeClassifyProcessTempVO extends BaseModelVO {
+public class CodeClassifyProcessTempVO extends CodeClassifyProcessTemp {
 
 	/**
      * 绂佹淇敼杩欎釜鍊�
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
index d999e97..4ba81b6 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
@@ -1,6 +1,6 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
-import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
 
 /**
  * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
@@ -8,7 +8,7 @@
  * @author weidy
  * @date 2022-01-24
  */
-public class CodeClassifyTemplateButtonVO extends BaseModelVO {
+public class CodeClassifyTemplateButtonVO extends CodeClassifyTemplateButton {
 
 	/**
      * 绂佹淇敼杩欎釜鍊�
@@ -62,6 +62,7 @@
 	/**
 	 * 鑾峰彇 鎵�灞炴ā鏉�
 	 */
+	@Override
 	public String getClassifytemplateoid (){
 		return classifytemplateoid;
 	}
@@ -69,6 +70,7 @@
 	/**
 	* 璁剧疆 鎵�灞炴ā鏉�
 	*/
+	@Override
 	public void setClassifytemplateoid (String classifytemplateoid){
 		this.classifytemplateoid = classifytemplateoid;
 	}
@@ -88,6 +90,7 @@
 	/**
 	 * 鑾峰彇 鎸夐挳鐨勪富閿�
 	 */
+	@Override
 	public String getClassifybuttonoid (){
 		return classifybuttonoid;
 	}
@@ -95,6 +98,7 @@
 	/**
 	* 璁剧疆 鎸夐挳鐨勪富閿�
 	*/
+	@Override
 	public void setClassifybuttonoid (String classifybuttonoid){
 		this.classifybuttonoid = classifybuttonoid;
 	}
@@ -114,6 +118,7 @@
 	/**
 	 * 鑾峰彇 鎸夐挳鐢ㄩ��
 	 */
+	@Override
 	public String getButtonuse (){
 		return buttonuse;
 	}
@@ -121,6 +126,7 @@
 	/**
 	* 璁剧疆 鎸夐挳鐢ㄩ��
 	*/
+	@Override
 	public void setButtonuse (String buttonuse){
 		this.buttonuse = buttonuse;
 	}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java
index 0af56ff..3e1dc8f 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java
@@ -18,7 +18,7 @@
 	/**
 	* 鍒嗙被鐮佹涓婚敭
 	*/
-	private String codeclassifysecoid;
+	private String codeClassifySecOid;
 
 	/**
 	* 鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
@@ -28,12 +28,12 @@
 	/**
 	* 鐮佸�煎簭鍙�
 	*/
-	private Integer ordernum;
+	private Integer orderNum;
 
 	/**
 	* 涓婄骇鍒嗙被鐮佸�间富閿�
 	*/
-	private String parentclassifyvalueoid;
+	private String parentClassifyValueOid;
 
 	/**
 	 * 鍒嗙被鐮佸�间腑鐨勭紪鍙�
@@ -48,15 +48,15 @@
 	/**
 	 * 鑾峰彇 鍒嗙被鐮佹涓婚敭
 	 */
-	public String getCodeclassifysecoid (){
-		return codeclassifysecoid;
+	public String getCodeClassifySecOid (){
+		return codeClassifySecOid;
 	}
 
 	/**
 	* 璁剧疆 鍒嗙被鐮佹涓婚敭
 	*/
-	public void setCodeclassifysecoid (String codeclassifysecoid){
-		this.codeclassifysecoid = codeclassifysecoid;
+	public void setCodeClassifySecOid (String codeclassifysecoid){
+		this.codeClassifySecOid = codeclassifysecoid;
 	}
 	/**
 	 * 鑾峰彇鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
@@ -74,28 +74,28 @@
 	/**
 	 * 鑾峰彇 鐮佸�煎簭鍙�
 	 */
-	public Integer getOrdernum (){
-		return ordernum;
+	public Integer getOrderNum (){
+		return orderNum;
 	}
 
 	/**
 	* 璁剧疆 鐮佸�煎簭鍙�
 	*/
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
+	public void setOrderNum (Integer ordernum){
+		this.orderNum = ordernum;
 	}
 	/**
 	 * 鑾峰彇 涓婄骇鍒嗙被鐮佸�间富閿�
 	 */
-	public String getParentclassifyvalueoid (){
-		return parentclassifyvalueoid;
+	public String getParentClassifyValueOid (){
+		return parentClassifyValueOid;
 	}
 
 	/**
 	* 璁剧疆 涓婄骇鍒嗙被鐮佸�间富閿�
 	*/
-	public void setParentclassifyvalueoid (String parentclassifyvalueoid){
-		this.parentclassifyvalueoid = parentclassifyvalueoid;
+	public void setParentClassifyValueOid (String parentClassifyValueOid){
+		this.parentClassifyValueOid = parentClassifyValueOid;
 	}
 
 	@Override
@@ -122,10 +122,10 @@
 	@Override
 	public String toString() {
 		return "CodeClassifyValueVO{" +
-				"codeclassifysecoid='" + codeclassifysecoid + '\'' +
+				"codeClassifySecOid='" + codeClassifySecOid + '\'' +
 				", codeclassifysecoidName='" + codeclassifysecoidName + '\'' +
-				", ordernum=" + ordernum +
-				", parentclassifyvalueoid='" + parentclassifyvalueoid + '\'' +
+				", orderNum=" + orderNum +
+				", parentClassifyValueOid='" + parentClassifyValueOid + '\'' +
 				", id='" + id + '\'' +
 				", name='" + name + '\'' +
 				"} " + super.toString();
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java
index caf497e..ae7e7bf 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java
@@ -18,7 +18,7 @@
 	/**
 	* 鍥哄畾鐮佹涓婚敭
 	*/
-	private String codefixedsecoid;
+	private String codeFixedSecOid;
 
 	/**
 	* 鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
@@ -28,22 +28,22 @@
 	/**
 	* 鐮佸�煎簭鍙�
 	*/
-	private Integer ordernum;
+	private Integer orderNum;
 
 
 
 	/**
 	 * 鑾峰彇 鍥哄畾鐮佹涓婚敭
 	 */
-	public String getCodefixedsecoid (){
-		return codefixedsecoid;
+	public String getCodeFixedSecOid (){
+		return codeFixedSecOid;
 	}
 
 	/**
 	* 璁剧疆 鍥哄畾鐮佹涓婚敭
 	*/
-	public void setCodefixedsecoid (String codefixedsecoid){
-		this.codefixedsecoid = codefixedsecoid;
+	public void setCodeFixedSecOid (String codefixedsecoid){
+		this.codeFixedSecOid = codefixedsecoid;
 	}
 	/**
 	 * 鑾峰彇鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
@@ -61,23 +61,23 @@
 	/**
 	 * 鑾峰彇 鐮佸�煎簭鍙�
 	 */
-	public Integer getOrdernum (){
-		return ordernum;
+	public Integer getOrderNum (){
+		return orderNum;
 	}
 
 	/**
 	* 璁剧疆 鐮佸�煎簭鍙�
 	*/
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
+	public void setOrderNum (Integer orderNum){
+		this.orderNum = orderNum;
 	}
 
 	@Override
 	public String toString() {
 		return "CodeFixedValueVO{" +
-		"codefixedsecoid='" + codefixedsecoid +"'," +
+		"codeFixedSecOid='" + codeFixedSecOid +"'," +
 		"codefixedsecoidName='" + codefixedsecoidName +"'," +
-		"ordernum='" + ordernum +"'," +
+		"orderNum='" + orderNum +"'," +
 		"}" + super.toString();
 	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java
index 04ed437..3a3f7c8 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java
@@ -1,5 +1,6 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
 import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
 
 /**
@@ -8,7 +9,7 @@
  * @author weidy
  * @date 2022-01-24
  */
-public class CodeTemplatePhaseVO extends BaseModelVO {
+public class CodeTemplatePhaseVO extends CodeTemplatePhase {
 
 	/**
      * 绂佹淇敼杩欎釜鍊�
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingDataVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingDataVO.java
index 1c0f61d..79afada 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingDataVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/DockingDataVO.java
@@ -1,6 +1,7 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
-import com.vci.ubcs.code.entity.BaseModel;
+
+import com.vci.ubcs.starter.revision.model.BaseModel;
 
 /**
  * 瑕佹帹閫佸緱鏁版嵁
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/TreeQueryObject.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/TreeQueryObject.java
deleted file mode 100644
index 7213221..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/TreeQueryObject.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.vci.ubcs.code.vo.pagemodel;
-
-//
-// 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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/annotation/Transient.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/annotation/Transient.java
deleted file mode 100644
index 8b248b4..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/annotation/Transient.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.vci.ubcs.com.vci.starter.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Transient {
-	boolean value() default true;
-
-	String referColumn() default "";
-
-	String valueField() default "oid";
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/annotation/VciEnum.java
deleted file mode 100644
index 706be18..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/annotation/VciEnum.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.vci.ubcs.com.vci.starter.annotation;
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//package com.vci.starter.web.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface VciEnum {
-	String name() default "";
-
-	Class valueType() default String.class;
-
-	String text() default "";
-
-	String description() default "";
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/bo/WriteExcelData.java
deleted file mode 100644
index b8f13ac..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/bo/WriteExcelData.java
+++ /dev/null
@@ -1,244 +0,0 @@
-package com.vci.ubcs.com.vci.starter.bo;
-
-import java.util.List;
-
-public class WriteExcelData {
-	private int row;
-	private int col;
-	private Object obj;
-	private boolean merged = false;
-	private int rowTo;
-	private int colTo;
-	private boolean copyStyle = false;
-	private int copyStyleRow;
-	private int copyStyleCol;
-	private boolean center;
-	private boolean formula = false;
-	private boolean nameRefer = false;
-	private boolean validation = false;
-	private List<String> validationDataList;
-	private String validationErrorMsg;
-	private String fontColor;
-	private String align;
-	private String dateFormat;
-	private boolean readOnly;
-	private Integer width;
-
-	public String getFontColor() {
-		return this.fontColor;
-	}
-
-	public void setFontColor(String fontColor) {
-		this.fontColor = fontColor;
-	}
-
-	public String getAlign() {
-		return this.align;
-	}
-
-	public void setAlign(String align) {
-		this.align = align;
-	}
-
-	public List<String> getValidationDataList() {
-		return this.validationDataList;
-	}
-
-	public void setValidationDataList(List<String> validationDataList) {
-		this.validationDataList = validationDataList;
-	}
-
-	public WriteExcelData() {
-	}
-
-	public WriteExcelData(int row, int col, Object obj) {
-		this.row = row;
-		this.col = col;
-		this.obj = obj;
-	}
-
-	public void writeFormula(int row, int col, String foumula) {
-		this.row = row;
-		this.col = col;
-		this.obj = foumula;
-		this.formula = true;
-	}
-
-	public void writeNameRefer(int row, int col, int rowTo, int colTo, String name) {
-		this.row = row;
-		this.col = col;
-		this.obj = name;
-		this.nameRefer = true;
-		this.rowTo = rowTo;
-		this.colTo = colTo;
-	}
-
-	public void writeComboBox(List<String> comboBoxData, int row, int col, int rowTo, int colTo) {
-		this.writeComboBox(comboBoxData, (String)null, row, col, rowTo, colTo);
-	}
-
-	public void writeComboBox(List<String> comboBoxData, String errorMsg, int row, int col, int rowTo, int colTo) {
-		this.validationDataList = comboBoxData;
-		this.validation = true;
-		this.validationErrorMsg = errorMsg;
-		this.row = row;
-		this.col = col;
-		this.rowTo = rowTo;
-		this.colTo = colTo;
-	}
-
-	public void writeUseRefer(String referFormula, int row, int col, int rowTo, int colTo) {
-		this.writeUseRefer(referFormula, (String)null, row, col, rowTo, colTo);
-	}
-
-	public void writeUseRefer(String referFormula, String errorMsg, int row, int col, int rowTo, int colTo) {
-		this.validation = true;
-		this.obj = referFormula;
-		this.validationErrorMsg = errorMsg;
-		this.row = row;
-		this.col = col;
-		this.rowTo = rowTo;
-		this.colTo = colTo;
-	}
-
-	public boolean isReadOnly() {
-		return this.readOnly;
-	}
-
-	public void setReadOnly(boolean readOnly) {
-		this.readOnly = readOnly;
-	}
-
-	public int getRow() {
-		return this.row;
-	}
-
-	public void setRow(int row) {
-		this.row = row;
-	}
-
-	public int getCol() {
-		return this.col;
-	}
-
-	public void setCol(int col) {
-		this.col = col;
-	}
-
-	public Object getObj() {
-		return this.obj;
-	}
-
-	public void setObj(Object obj) {
-		this.obj = obj;
-	}
-
-	public boolean isMerged() {
-		return this.merged;
-	}
-
-	public void setMerged(boolean merged) {
-		this.merged = merged;
-	}
-
-	public int getRowTo() {
-		return this.rowTo;
-	}
-
-	public void setRowTo(int rowTo) {
-		this.rowTo = rowTo;
-	}
-
-	public int getColTo() {
-		return this.colTo;
-	}
-
-	public void setColTo(int colTo) {
-		this.colTo = colTo;
-	}
-
-	public boolean isCopyStyle() {
-		return this.copyStyle;
-	}
-
-	public void setCopyStyle(boolean copyStyle) {
-		this.copyStyle = copyStyle;
-	}
-
-	public int getCopyStyleRow() {
-		return this.copyStyleRow;
-	}
-
-	public void setCopyStyleRow(int copyStyleRow) {
-		this.copyStyleRow = copyStyleRow;
-	}
-
-	public int getCopyStyleCol() {
-		return this.copyStyleCol;
-	}
-
-	public void setCopyStyleCol(int copyStyleCol) {
-		this.copyStyleCol = copyStyleCol;
-	}
-
-	public boolean isCenter() {
-		return this.center;
-	}
-
-	public void setCenter(boolean center) {
-		this.center = center;
-	}
-
-	public boolean isFormula() {
-		return this.formula;
-	}
-
-	public void setFormula(boolean formula) {
-		this.formula = formula;
-	}
-
-	public boolean isNameRefer() {
-		return this.nameRefer;
-	}
-
-	public void setNameRefer(boolean nameRefer) {
-		this.nameRefer = nameRefer;
-	}
-
-	public boolean isValidation() {
-		return this.validation;
-	}
-
-	public void setValidation(boolean validation) {
-		this.validation = validation;
-	}
-
-	public String getValidationErrorMsg() {
-		return this.validationErrorMsg;
-	}
-
-	public void setValidationErrorMsg(String validationErrorMsg) {
-		this.validationErrorMsg = validationErrorMsg;
-	}
-
-	public String getDateFormat() {
-		return this.dateFormat;
-	}
-
-	public void setDateFormat(String dateFormat) {
-		this.dateFormat = dateFormat;
-	}
-
-	public Integer getWidth() {
-		return this.width;
-	}
-
-	public void setWidth(Integer width) {
-		this.width = width;
-	}
-
-	public String toString() {
-		return "WriteExcelData{row=" + this.row + ", col=" + this.col + ", obj=" + this.obj + ", merged=" + this.merged + ", rowTo=" + this.rowTo + ", colTo=" + this.colTo + ", copyStyle=" + this.copyStyle + ", copyStyleRow=" + this.copyStyleRow + ", copyStyleCol=" + this.copyStyleCol + ", center=" + this.center + ", formula=" + this.formula + ", nameRefer=" + this.nameRefer + ", validation=" + this.validation + ", validationDataList=" + this.validationDataList + ", validationErrorMsg='" + this.validationErrorMsg + '\'' + ", fontColor='" + this.fontColor + '\'' + ", align='" + this.align + '\'' + ", dateFormat='" + this.dateFormat + '\'' + ", readOnly=" + this.readOnly + '}';
-	}
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/exception/VciBaseException.java
deleted file mode 100644
index 2c5e599..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/exception/VciBaseException.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.vci.ubcs.com.vci.starter.exception;
-
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.vci.ubcs.com.vci.starter.web.util.MessageUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.text.MessageFormat;
-
-public class VciBaseException extends RuntimeException {
-	private Logger log = LoggerFactory.getLogger(this.getClass());
-	public static final String paramNull = "com.vci.base.paramNull";
-	public static final String fieldValueRepeat = "com.vci.base.fieldValueRepeat";
-	public static final String objectNotFoundInDb = "com.vci.base.objectNotFoundInDb";
-	public static final String tsNotEqual = "com.vci.base.tsNotEqual";
-	public static final String dateValueFormatError = "com.vci.base.dateValueForamtError";
-	public static final String notLogin = "com.vci.base.notLogin";
-	public static final String notRight = "com.vci.base.notRight";
-	public static final String notDataRight = "com.vci.base.notDataRight";
-	public static final String notUIRight = "com.vci.base.notUIRight";
-	public static final String connectCorbaFail = "com.vci.base.connectCorbaFail";
-	public static final String corbaNotConfig = "com.vci.base.corbaNotConfig ";
-	private String code;
-	private Object[] objs = new Object[0];
-
-	public VciBaseException(String code) {
-		this.code = code;
-	}
-
-	public VciBaseException(String code, Object[] objs) {
-		this.code = code;
-		this.objs = objs;
-	}
-
-	public VciBaseException(String code, Object[] objs, Throwable e) {
-		super(e);
-		this.code = code;
-		this.objs = objs;
-	}
-
-	public String getCode() {
-		return this.code;
-	}
-
-	public void setCode(String code) {
-		this.code = code;
-	}
-
-	public Object[] getObjs() {
-		return this.objs;
-	}
-
-	public void setObjs(Object[] objs) {
-		this.objs = objs;
-	}
-
-	public String getErrorMsg() {
-		if (!(this instanceof VciBaseException) && !this.getClass().getSuperclass().equals(VciBaseException.class)) {
-			return this instanceof Exception ? this.getMessage() : this.code;
-		} else {
-			if (StringUtils.isNotBlank(this.code)) {
-				this.code = MessageUtils.get(this.code, this.objs);
-			}
-
-			this.code = MessageFormat.format(this.code, this.objs);
-			return this.code;
-		}
-	}
-
-	@Override
-	public String getMessage() {
-		return this.getCode() + "," + this.getErrorMsg();
-	}
-
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/annotation/ExcelColumn.java
deleted file mode 100644
index 846e998..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/annotation/ExcelColumn.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.FIELD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ExcelColumn {
-	String value();
-
-	boolean nullable() default true;
-
-	String enumId() default "";
-
-	String regExg() default "";
-
-	String regExgTitle() default "";
-
-	String group() default "";
-
-	boolean rowIndexColumn() default false;
-
-	boolean readOnly() default false;
-
-	int width() default 0;
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/annotation/ExcelTitle.java
deleted file mode 100644
index f5f6359..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/annotation/ExcelTitle.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ExcelTitle {
-	int rowIndexForTitle() default 1;
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/AppendDataExcelOption.java
deleted file mode 100644
index 19c179d..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/AppendDataExcelOption.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
-
-import java.io.Serializable;
-import java.util.List;
-
-public class AppendDataExcelOption implements Serializable {
-	private int titleRowIndex = 0;
-	private String sheetName;
-	private List<String> writeFields;
-	private List<String> readOnlyFields;
-	private boolean readOnlyFromField = false;
-
-	public AppendDataExcelOption() {
-	}
-
-	public int getTitleRowIndex() {
-		return this.titleRowIndex;
-	}
-
-	public void setTitleRowIndex(int titleRowIndex) {
-		this.titleRowIndex = titleRowIndex;
-	}
-
-	public String getSheetName() {
-		return this.sheetName;
-	}
-
-	public void setSheetName(String sheetName) {
-		this.sheetName = sheetName;
-	}
-
-	public List<String> getWriteFields() {
-		return this.writeFields;
-	}
-
-	public void setWriteFields(List<String> writeFields) {
-		this.writeFields = writeFields;
-	}
-
-	public List<String> getReadOnlyFields() {
-		return this.readOnlyFields;
-	}
-
-	public void setReadOnlyFields(List<String> readOnlyFields) {
-		this.readOnlyFields = readOnlyFields;
-	}
-
-	public boolean isReadOnlyFromField() {
-		return this.readOnlyFromField;
-	}
-
-	public void setReadOnlyFromField(boolean readOnlyFromField) {
-		this.readOnlyFromField = readOnlyFromField;
-	}
-
-	public String toString() {
-		return "AppendDataExcelOption{titleRowIndex=" + this.titleRowIndex + ", sheetName='" + this.sheetName + '\'' + ", writeFields=" + this.writeFields + ", readOnlyFields=" + this.readOnlyFields + ", readOnlyFromField=" + this.readOnlyFromField + '}';
-	}
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/DownloadTempOption.java
deleted file mode 100644
index 6637221..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/DownloadTempOption.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
-
-
-import java.io.Serializable;
-
-public class DownloadTempOption implements Serializable {
-	private Integer defaultRowSize = 1000;
-	private String excelName;
-	private String sheetName;
-
-	public DownloadTempOption(String excelName) {
-		this.excelName = excelName;
-	}
-
-	public String getExcelName() {
-		return this.excelName;
-	}
-
-	public void setExcelName(String excelName) {
-		this.excelName = excelName;
-	}
-
-	public Integer getDefaultRowSize() {
-		return this.defaultRowSize;
-	}
-
-	public void setDefaultRowSize(Integer defaultRowSize) {
-		this.defaultRowSize = defaultRowSize;
-	}
-
-	public String getSheetName() {
-		return this.sheetName;
-	}
-
-	public void setSheetName(String sheetName) {
-		this.sheetName = sheetName;
-	}
-
-	public String toString() {
-		return "DownloadTempOption{defaultRowSize=" + this.defaultRowSize + '}';
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/ExcelColumnMap.java
deleted file mode 100644
index 48b5c29..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/ExcelColumnMap.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
-
-public class ExcelColumnMap {
-	private String title;
-	private String columnName;
-	private boolean nullable = true;
-	private String regExg;
-	private String regExgTitle;
-	private String group;
-
-	public ExcelColumnMap() {
-	}
-
-	public ExcelColumnMap(String title, String columnName) {
-		this.title = title;
-		this.columnName = columnName;
-	}
-
-	public String getTitle() {
-		return this.title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	public String getColumnName() {
-		return this.columnName;
-	}
-
-	public void setColumnName(String columnName) {
-		this.columnName = columnName;
-	}
-
-	public boolean isNullable() {
-		return this.nullable;
-	}
-
-	public void setNullable(boolean nullable) {
-		this.nullable = nullable;
-	}
-
-	public String getRegExg() {
-		return this.regExg;
-	}
-
-	public void setRegExg(String regExg) {
-		this.regExg = regExg;
-	}
-
-	public String getRegExgTitle() {
-		return this.regExgTitle;
-	}
-
-	public void setRegExgTitle(String regExgTitle) {
-		this.regExgTitle = regExgTitle;
-	}
-
-	public String getGroup() {
-		return this.group;
-	}
-
-	public void setGroup(String group) {
-		this.group = group;
-	}
-
-	public String toString() {
-		return "ExcelColumnMap{title='" + this.title + '\'' + ", columnName='" + this.columnName + '\'' + ", nullable=" + this.nullable + ", regExg='" + this.regExg + '\'' + ", regExgTitle='" + this.regExgTitle + '\'' + ", group='" + this.group + '\'' + '}';
-	}
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/ReadExcelOption.java
deleted file mode 100644
index 909ea59..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/ReadExcelOption.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
-
-
-import java.util.List;
-import java.util.Map;
-
-public class ReadExcelOption {
-	private int fristRow = 1;
-	private int sheetIndex = 0;
-	private String sheetName;
-	private boolean readAllSheet = false;
-	private Map<String, List<ExcelColumnMap>> extendAttrMap;
-
-	public String getSheetName() {
-		return this.sheetName;
-	}
-
-	public void setSheetName(String sheetName) {
-		this.sheetName = sheetName;
-	}
-
-	public ReadExcelOption() {
-	}
-
-	public ReadExcelOption(int fristRow) {
-		this.fristRow = fristRow;
-	}
-
-	public ReadExcelOption(int fristRow, boolean readAllSheet) {
-		this.fristRow = fristRow;
-		this.readAllSheet = readAllSheet;
-	}
-
-	public int getFristRow() {
-		return this.fristRow;
-	}
-
-	public void setFristRow(int fristRow) {
-		this.fristRow = fristRow;
-	}
-
-	public int getSheetIndex() {
-		return this.sheetIndex;
-	}
-
-	public void setSheetIndex(int sheetIndex) {
-		this.sheetIndex = sheetIndex;
-	}
-
-	public boolean isReadAllSheet() {
-		return this.readAllSheet;
-	}
-
-	public void setReadAllSheet(boolean readAllSheet) {
-		this.readAllSheet = readAllSheet;
-	}
-
-	public Map<String, List<ExcelColumnMap>> getExtendAttrMap() {
-		return this.extendAttrMap;
-	}
-
-	public void setExtendAttrMap(Map<String, List<ExcelColumnMap>> extendAttrMap) {
-		this.extendAttrMap = extendAttrMap;
-	}
-
-	public String toString() {
-		return "ReadExcelOption{fristRow=" + this.fristRow + ", sheetIndex=" + this.sheetIndex + ", sheetName='" + this.sheetName + '\'' + ", readAllSheet=" + this.readAllSheet + ", extendAttrMap=" + this.extendAttrMap + '}';
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/SheetDataSet.java
deleted file mode 100644
index 21061da..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/SheetDataSet.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
-
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class SheetDataSet {
-	private String sheetName;
-	private List<String> colName = new ArrayList();
-	private List<SheetRowData> rowData = new ArrayList();
-
-	public SheetDataSet() {
-	}
-
-	public String getSheetName() {
-		return this.sheetName;
-	}
-
-	public void setSheetName(String sheetName) {
-		this.sheetName = sheetName;
-	}
-
-	public List<SheetRowData> getRowData() {
-		return this.rowData;
-	}
-
-	public void setRowData(List<SheetRowData> rowData) {
-		this.rowData = rowData;
-	}
-
-	public List<String> getColName() {
-		return this.colName;
-	}
-
-	public void setColName(List<String> colName) {
-		this.colName = colName;
-	}
-
-	public String toString() {
-		return "SheetDataSet{sheetName='" + this.sheetName + '\'' + ", colName=" + this.colName + ", rowData=" + this.rowData + '}';
-	}
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/SheetRowData.java
deleted file mode 100644
index 590a2f2..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/SheetRowData.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class SheetRowData {
-	private String rowIndex;
-	private Map<Integer, String> data = new HashMap();
-
-	public SheetRowData() {
-	}
-
-	public String getRowIndex() {
-		return this.rowIndex;
-	}
-
-	public void setRowIndex(String rowIndex) {
-		this.rowIndex = rowIndex;
-	}
-
-	public Map<Integer, String> getData() {
-		return this.data;
-	}
-
-	public void setData(Map<Integer, String> data) {
-		this.data = data;
-	}
-
-	public String toString() {
-		return "SheetRowData{rowIndex='" + this.rowIndex + '\'' + ", data=" + this.data + '}';
-	}
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/WriteExcelOption.java
deleted file mode 100644
index 19dcd25..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/bo/WriteExcelOption.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.bo;
-
-
-import com.vci.ubcs.com.vci.starter.bo.WriteExcelData;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class WriteExcelOption {
-	private Map<String, List<WriteExcelData>> writeDataMap;
-	private List<String> hideSheetList;
-	private boolean append = false;
-	private boolean revision07 = false;
-	private Map<String, List<ExcelColumnMap>> extendAttrMap;
-
-	public WriteExcelOption() {
-	}
-
-	public WriteExcelOption(List<WriteExcelData> excelDataList) {
-		this.writeDataMap = new HashMap();
-		this.writeDataMap.put("Sheet1", excelDataList);
-	}
-
-	public void addSheetDataList(String sheetName, List<WriteExcelData> excelDataList) {
-		if (this.writeDataMap == null) {
-			this.writeDataMap = new HashMap();
-		}
-
-		this.writeDataMap.put(sheetName, excelDataList);
-	}
-
-	public void addHideSheet(String sheetName) {
-		if (this.hideSheetList == null) {
-			this.hideSheetList = new ArrayList();
-		}
-
-		this.hideSheetList.add(sheetName);
-	}
-
-	public Map<String, List<WriteExcelData>> getWriteDataMap() {
-		return this.writeDataMap;
-	}
-
-	public void setWriteDataMap(Map<String, List<WriteExcelData>> writeDataMap) {
-		this.writeDataMap = writeDataMap;
-	}
-
-	public List<String> getHideSheetList() {
-		return this.hideSheetList;
-	}
-
-	public void setHideSheetList(List<String> hideSheetList) {
-		this.hideSheetList = hideSheetList;
-	}
-
-	public boolean isAppend() {
-		return this.append;
-	}
-
-	public void setAppend(boolean append) {
-		this.append = append;
-	}
-
-	public boolean isRevision07() {
-		return this.revision07;
-	}
-
-	public void setRevision07(boolean revision07) {
-		this.revision07 = revision07;
-	}
-
-	public Map<String, List<ExcelColumnMap>> getExtendAttrMap() {
-		return this.extendAttrMap;
-	}
-
-	public void setExtendAttrMap(Map<String, List<ExcelColumnMap>> extendAttrMap) {
-		this.extendAttrMap = extendAttrMap;
-	}
-
-	public String toString() {
-		return "WriteExcelOption{writeDataMap=" + this.writeDataMap + ", hideSheetList=" + this.hideSheetList + ", append=" + this.append + ", revision07=" + this.revision07 + ", extendAttrMap=" + this.extendAttrMap + '}';
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/constant/ExcelLangCodeConstant.java
deleted file mode 100644
index 5edd706..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/constant/ExcelLangCodeConstant.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.constant;
-
-public class ExcelLangCodeConstant {
-	public static final String READ_IMPORT_FILE_FAIL = "readImportFileFail";
-	public static final String IMPORT_CONTENT_NULL = "importContentNull";
-	public static final String FILE_NOT_FOUND = "fileNotFound";
-	public static final String FILE_IO_EXCEPTION = "fileIoException";
-	public static final String FILE_CREATE_EXCEPTION = "fileCreateException";
-	public static final String INPUT_STREAM_IS_NULL = "inputStreamIsNull";
-	public static final String OUTPUT_STREAM_IS_NULL = "outputStreamIsNull";
-	public static final String WORKBOOK_INIT_FAIL = "workBookInitFail";
-	public static final String CELL_VALUE_CAN_NOT_NULL = "cellValueCanNotNull";
-	public static final String CELL_VALUE_CAN_NOT_NULL_FOR_REG = "cellValueCanNotNullForReg";
-	public static final String CELL_VALUE_NOT_EQUAL_REG = "cellValueNotEqualReg";
-	public static final String CELL_NOT_DATE_FORMATE = "cellNotDateFormate";
-
-	public ExcelLangCodeConstant() {
-	}
-}
-
-
-
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/ExcelUtil.java
deleted file mode 100644
index f43b6bd..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/ExcelUtil.java
+++ /dev/null
@@ -1,1520 +0,0 @@
-package com.vci.ubcs.com.vci.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 org.apache.commons.io.IOUtils;
-import org.apache.poi.hssf.usermodel.HSSFCell;
-import org.apache.poi.hssf.usermodel.HSSFDataFormat;
-import org.apache.poi.hssf.usermodel.HSSFDataValidation;
-import org.apache.poi.hssf.usermodel.HSSFDataValidationHelper;
-import org.apache.poi.hssf.usermodel.HSSFRichTextString;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.hssf.util.HSSFColor;
-import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.CellType;
-import org.apache.poi.ss.usermodel.CellValue;
-import org.apache.poi.ss.usermodel.DataValidation;
-import org.apache.poi.ss.usermodel.DataValidationConstraint;
-import org.apache.poi.ss.usermodel.DateUtil;
-import org.apache.poi.ss.usermodel.Font;
-import org.apache.poi.ss.usermodel.FormulaEvaluator;
-import org.apache.poi.ss.usermodel.HorizontalAlignment;
-import org.apache.poi.ss.usermodel.Name;
-import org.apache.poi.ss.usermodel.RichTextString;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.VerticalAlignment;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.ss.usermodel.WorkbookFactory;
-import org.apache.poi.ss.util.CellRangeAddress;
-import org.apache.poi.ss.util.CellRangeAddressList;
-import org.apache.poi.xssf.usermodel.XSSFDataValidation;
-import org.apache.poi.xssf.usermodel.XSSFDataValidationConstraint;
-import org.apache.poi.xssf.usermodel.XSSFDataValidationHelper;
-import org.apache.poi.xssf.usermodel.XSSFRichTextString;
-import org.apache.poi.xssf.usermodel.XSSFSheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springframework.util.CollectionUtils;
-
-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.*;
-import java.util.stream.Collectors;
-
-public class ExcelUtil {
-	private static Logger logger = LoggerFactory.getLogger(ExcelUtil.class);
-	public static final String KEY_ATTR_CHAR = "鈽�";
-	public static final String REQUIRED_CHAR = "*";
-
-	public ExcelUtil() {
-	}
-
-	public static void copyFile(File source, File target) throws VciBaseException {
-		VciBaseUtil.alertNotNull(new Object[]{source, "鏉ユ簮鏂囦欢", target, "鐩爣鏂囦欢"});
-		if (!source.exists()) {
-			throw new VciBaseException("fileNotFound", new String[]{source.getName()});
-		} else {
-			File is;
-			if (!target.exists()) {
-				is = target.getParentFile();
-				is.mkdirs();
-
-				try {
-					target.createNewFile();
-				} catch (IOException var17) {
-					throw new VciBaseException("fileIoException", new String[]{target.getName()});
-				}
-			}
-
-			is = null;
-			FileOutputStream os = null;
-
-			FileInputStream isF;
-			try {
-				isF = new FileInputStream(source);
-			} catch (FileNotFoundException var16) {
-				throw new VciBaseException("fileNotFound", new String[]{source.getName()});
-			}
-
-			try {
-				os = new FileOutputStream(target);
-			} catch (FileNotFoundException var15) {
-				IOUtils.closeQuietly(isF);
-				throw new VciBaseException("fileNotFound", new String[]{target.getName()});
-			}
-
-			try {
-				copyFile(isF, os);
-			} catch (VciBaseException var12) {
-				throw var12;
-			} catch (Throwable var13) {
-				throw new VciBaseException(LangBaseUtil.getErrorMsg(var13), new String[]{source.getName(), target.getName()}, var13);
-			} finally {
-				IOUtils.closeQuietly(isF);
-				IOUtils.closeQuietly(os);
-			}
-
-		}
-	}
-
-	public static void copyFile(FileInputStream in, FileOutputStream os) throws VciBaseException {
-		try {
-			FileChannel sourceChannel = in.getChannel();
-			FileChannel targetChannel = os.getChannel();
-			int i = 0;
-			int length = 2097152;
-
-			while(true) {
-				if (sourceChannel.position() == sourceChannel.size()) {
-					sourceChannel.close();
-					targetChannel.close();
-				}
-
-				if (sourceChannel.size() - sourceChannel.position() < 20971520L) {
-					length = (int)(sourceChannel.size() - sourceChannel.position());
-				} else {
-					length = 20971520;
-				}
-
-				sourceChannel.transferTo(sourceChannel.position(), (long)length, targetChannel);
-				sourceChannel.position(sourceChannel.position() + (long)length);
-				++i;
-			}
-		} catch (IOException var10) {
-			if (logger.isErrorEnabled()) {
-				logger.error("鎷疯礉婧愭枃浠跺埌鐩爣鏂囦欢鍑虹幇浜嗛敊璇�", var10);
-			}
-
-			throw new VciBaseException(LangBaseUtil.getErrorMsg(var10), new String[0], var10);
-		} catch (Throwable var11) {
-			if (logger.isErrorEnabled()) {
-				logger.error("鎷疯礉婧愭枃浠跺埌鐩爣鏂囦欢鍑虹幇浜嗛敊璇�", var11);
-			}
-
-			throw new VciBaseException(LangBaseUtil.getErrorMsg(var11), new String[0], var11);
-		} finally {
-			IOUtils.closeQuietly(in);
-			IOUtils.closeQuietly(os);
-		}
-	}
-
-	public static void copyFileFromJar(String filePathInJar, File targetFile) throws VciBaseException {
-		VciBaseUtil.alertNotNull(new Object[]{filePathInJar, "鏉ユ簮鏂囦欢", targetFile, "鐩爣鏂囦欢"});
-		File os;
-		if (!targetFile.exists()) {
-			os = targetFile.getParentFile();
-			os.mkdirs();
-
-			try {
-				targetFile.createNewFile();
-			} catch (IOException var12) {
-				throw new VciBaseException("fileIoException", new String[]{targetFile.getName()});
-			}
-		}
-
-		os = null;
-		InputStream ins = null;
-
-		FileOutputStream osF;
-		try {
-			osF = new FileOutputStream(targetFile);
-		} catch (FileNotFoundException var11) {
-			throw new VciBaseException("fileNotFound", new String[]{targetFile.getName()});
-		}
-
-		try {
-			ins = ExcelUtil.class.getResourceAsStream(filePathInJar);
-			IOUtils.copy(ins, osF);
-		} catch (IOException var13) {
-			if (logger.isErrorEnabled()) {
-				logger.error("鎷疯礉婧愭枃浠跺埌鐩爣鏂囦欢鍑虹幇浜嗛敊璇�", var13);
-			}
-
-			throw new VciBaseException(LangBaseUtil.getErrorMsg(var13), new String[0], var13);
-		} catch (Throwable var14) {
-			if (logger.isErrorEnabled()) {
-				logger.error("鎷疯礉婧愭枃浠跺埌鐩爣鏂囦欢鍑虹幇浜嗛敊璇�", var14);
-			}
-
-			throw new VciBaseException(LangBaseUtil.getErrorMsg(var14), new String[0], var14);
-		} finally {
-			IOUtils.closeQuietly(ins);
-			IOUtils.closeQuietly(osF);
-		}
-
-	}
-
-	public static void writeDataToFile(String fileName, WriteExcelOption writeExcelOption) throws VciBaseException {
-		writeDataToFile(new File(fileName), writeExcelOption);
-	}
-
-	public static void writeDataToFile(File file, WriteExcelOption writeExcelOption) throws VciBaseException {
-		if (file == null) {
-			throw new VciBaseException("鏂囦欢涓虹┖锛屾棤娉曟壘鍒版枃浠�");
-		} else {
-			if (!file.exists()) {
-				File folder = file.getParentFile();
-				if (!folder.exists()) {
-					folder.mkdirs();
-				}
-
-				try {
-					file.createNewFile();
-				} catch (IOException var14) {
-					throw new VciBaseException("fileNotFound", new String[]{file.getName()});
-				}
-			}
-
-			Workbook workbook = null;
-			if (writeExcelOption != null && writeExcelOption.isAppend()) {
-				try {
-					if (file.length() == 0L) {
-						workbook = createWorkbook(false);
-					} else {
-						workbook = getWorkbookByInputStream(new FileInputStream(file));
-					}
-				} catch (FileNotFoundException var13) {
-					throw new VciBaseException("fileNotExist", new String[]{file.getName()}, var13);
-				}
-			}
-
-			OutputStream os = null;
-
-			try {
-				os = new FileOutputStream(file);
-			} catch (FileNotFoundException var12) {
-				throw new VciBaseException("fileNotFound", new String[]{var12.getMessage()}, var12);
-			}
-
-			try {
-				writeDataToFile(os, writeExcelOption, workbook);
-			} catch (VciBaseException var15) {
-				if (logger.isErrorEnabled()) {
-					logger.error("鍐欏叆鏁版嵁鍒癳xcel鍑洪敊", var15);
-				}
-
-				throw var15;
-			} catch (Throwable var16) {
-				if (logger.isErrorEnabled()) {
-					logger.error("鍐欏叆鏁版嵁鍒癳xcel鍑洪敊", var16);
-				}
-
-				throw new VciBaseException(LangBaseUtil.getErrorMsg(var16), new String[0], var16);
-			} finally {
-				IOUtils.closeQuietly(os);
-			}
-
-		}
-	}
-
-	public static void writeDataToFile(OutputStream os, WriteExcelOption writeExcelOption) throws VciBaseException {
-		writeDataToFile(os, writeExcelOption, (Workbook)null);
-	}
-
-	public static void writeDataToFile(OutputStream os, WriteExcelOption writeExcelOption, Workbook workbook) throws VciBaseException {
-		if (os == null) {
-			throw new VciBaseException("outputStreamIsNull");
-		} else {
-			if (writeExcelOption == null) {
-				IOUtils.closeQuietly(os);
-			} else {
-				Workbook wb = null;
-				if (writeExcelOption.isAppend() && workbook != null) {
-					wb = workbook;
-				} else {
-					wb = createWorkbook(writeExcelOption.isRevision07());
-				}
-
-				Workbook finalWb = wb;
-				writeExcelOption.getWriteDataMap().forEach((sheetName, excelDataList) -> {
-					Sheet sheet = getSheetByWorkbook(finalWb, sheetName);
-
-					try {
-						writeDataToCell(sheet, excelDataList);
-					} catch (VciBaseException var6) {
-						IOUtils.closeQuietly(os);
-						throw var6;
-					} catch (Throwable var7) {
-						if (logger.isErrorEnabled()) {
-							logger.error("鍐欏叆鏁版嵁鍒板伐浣滅翱鍑洪敊", var7);
-						}
-
-						IOUtils.closeQuietly(os);
-						throw new VciBaseException(LangBaseUtil.getErrorMsg(var7), new String[0], var7);
-					}
-				});
-				if (!CollectionUtils.isEmpty(writeExcelOption.getHideSheetList())) {
-					Workbook finalWb1 = wb;
-					writeExcelOption.getHideSheetList().stream().forEach((sheetName) -> {
-						Sheet sheet = getSheetByWorkbook(finalWb1, sheetName);
-						finalWb1.setSheetHidden(finalWb1.getSheetIndex(sheet), true);
-					});
-				}
-
-				try {
-					wb.write(os);
-				} catch (IOException var13) {
-					if (logger.isErrorEnabled()) {
-						logger.error("鎶婂伐浣滅翱涓婄殑鏁版嵁鍐欏叆鍒版枃浠跺嚭閿�", var13);
-					}
-
-					throw new VciBaseException(LangBaseUtil.getErrorMsg(var13), new String[0], var13);
-				} finally {
-					IOUtils.closeQuietly(os);
-
-					try {
-						wb.close();
-					} catch (Throwable var12) {
-						if (logger.isErrorEnabled()) {
-							logger.error("鍏抽棴宸ヤ綔绨�", var12);
-						}
-					}
-
-				}
-			}
-
-		}
-	}
-
-	public static int getCellIndexForPoField(String excelFileName, String sheetName, Class<?> poClass, String poFieldName) throws VciBaseException {
-		return getCellIndexForPoField(new File(excelFileName), sheetName, poClass, poFieldName);
-	}
-
-	public static int getCellIndexForPoField(File excelFile, String sheetName, Class<?> poClass, String poFieldName) throws VciBaseException {
-		VciBaseUtil.alertNotNull(new Object[]{excelFile, "excel鐨勬枃浠�", poClass, "poi瀵煎叆瀵煎嚭瀵硅薄鎵�灞炵殑绫�", poFieldName, "灞炴�х殑鍚嶇О"});
-		if (!excelFile.exists()) {
-			throw new VciBaseException("fileNotExist", new String[]{excelFile.getAbsolutePath()});
-		} else {
-			if (StringUtil.isBlank(sheetName)) {
-				sheetName = "Sheet1";
-			}
-
-			Field field = VciBaseUtil.getFieldForObject(poFieldName, poClass);
-			if (field == null) {
-				throw new VciBaseException("瀵硅薄涓笉瀛樺湪姝ゅ睘鎬э紝{0}锛寋1}", new String[]{poFieldName, poClass.getName()});
-			} else {
-				if (field.isAnnotationPresent(ExcelColumn.class)) {
-					ExcelColumn ec = getExcelColumnAnnotation(field);
-					String columnName = ec.value();
-					Workbook workbook = null;
-
-					try {
-						workbook = getWorkbookByInputStream(new FileInputStream(excelFile));
-					} catch (FileNotFoundException var15) {
-						throw new VciBaseException("fileNotExist", new String[]{excelFile.getAbsolutePath()});
-					}
-
-					if (workbook != null) {
-						Sheet sheet = workbook.getSheet(sheetName);
-						if (sheet != null) {
-							Row row = sheet.getRow(getRowIndexForTitle(poClass));
-							if (row != null) {
-								short lastCellNum = row.getLastCellNum();
-
-								for(short i = 0; i < lastCellNum; ++i) {
-									Cell cell = row.getCell(i);
-									if (columnName.equals(cell.getStringCellValue())) {
-										try {
-											workbook.close();
-										} catch (IOException var14) {
-											logger.error("鍏抽棴宸ヤ綔琛ㄥ嚭鐜伴敊璇�", var14);
-										}
-
-										return i;
-									}
-								}
-							}
-						}
-					}
-				}
-
-				return -1;
-			}
-		}
-	}
-
-	public static Map<String, Integer> listCellIndexForPO(File excelFile, String sheetName, Class<?> poClass) throws VciBaseException {
-		VciBaseUtil.alertNotNull(new Object[]{excelFile, "excel鐨勬枃浠�", poClass, "poi瀵煎叆瀵煎嚭瀵硅薄鎵�灞炵殑绫�"});
-		if (!excelFile.exists()) {
-			throw new VciBaseException("fileNotExist", new String[]{excelFile.getAbsolutePath()});
-		} else {
-			if (StringUtil.isBlank(sheetName)) {
-				sheetName = "Sheet1";
-			}
-
-			List<Field> fields = VciBaseUtil.getAllFieldForObj(poClass);
-			Map<String, Integer> cellIndexMap = new HashMap();
-			if (!CollectionUtils.isEmpty(fields)) {
-				Workbook workbook = null;
-
-				try {
-					workbook = getWorkbookByInputStream(new FileInputStream(excelFile));
-				} catch (FileNotFoundException var14) {
-					throw new VciBaseException("fileNotExist", new String[]{excelFile.getAbsolutePath()});
-				}
-
-				if (workbook != null) {
-					Sheet sheet = workbook.getSheet(sheetName);
-					if (sheet != null) {
-						Row row = sheet.getRow(getRowIndexForTitle(poClass));
-						if (row != null) {
-							Map<String, String> columnNamesMap = new HashMap();
-							fields.stream().forEach((field) -> {
-								if (field.isAnnotationPresent(ExcelColumn.class)) {
-									ExcelColumn ec = getExcelColumnAnnotation(field);
-									String columnName = ec.value();
-									columnNamesMap.put(columnName, field.getName());
-								}
-
-							});
-							short lastCellNum = row.getLastCellNum();
-
-							for(short i = 0; i < lastCellNum; ++i) {
-								Cell cell = row.getCell(i);
-								String cellName = cell.getStringCellValue();
-								if (columnNamesMap.containsKey(cellName)) {
-									cellIndexMap.put(columnNamesMap.get(cellName), Integer.valueOf(i));
-								}
-							}
-						}
-					}
-
-					try {
-						workbook.close();
-					} catch (IOException var13) {
-						logger.error("鍏抽棴宸ヤ綔琛ㄥ嚭鐜伴敊璇�", var13);
-					}
-				}
-			}
-
-			return cellIndexMap;
-		}
-	}
-
-	public static int getRowIndexForTitle(Class<?> poClass) {
-		if (poClass.isAnnotationPresent(ExcelTitle.class)) {
-			ExcelTitle ec = (ExcelTitle)poClass.getAnnotation(ExcelTitle.class);
-			if (ec == null) {
-				ec = (ExcelTitle)poClass.getDeclaredAnnotation(ExcelTitle.class);
-			}
-
-			if (ec != null) {
-				return ec.rowIndexForTitle();
-			}
-		}
-
-		return 0;
-	}
-
-	public static String getCellNameByIndex(int colIndex) {
-		if (colIndex < 26) {
-			return String.valueOf((char)(65 + colIndex));
-		} else {
-			int balance = colIndex % 26;
-			int multiple = (colIndex - balance) / 26;
-			String prefix = String.valueOf((char)(65 + (multiple - 1)));
-			String suffix = String.valueOf((char)(65 + balance));
-			return prefix + suffix;
-		}
-	}
-
-	public static Workbook createWorkbook(boolean is07) {
-		Workbook wb = null;
-		if (is07) {
-			wb = new XSSFWorkbook();
-		} else {
-			wb = new HSSFWorkbook();
-		}
-
-		return (Workbook)wb;
-	}
-
-	public static Workbook getWorkbookByInputStream(InputStream ins) throws VciBaseException {
-		Workbook wb = null;
-
-		try {
-			wb = WorkbookFactory.create(ins);
-			return wb;
-		} catch (IOException var3) {
-			IOUtils.closeQuietly(ins);
-			throw new VciBaseException("workBookInitFail", new String[]{LangBaseUtil.getErrorMsg(var3)});
-		}
-	}
-
-	private static Sheet getSheetByWorkbook(Workbook wb, String sheetName) {
-		if (StringUtil.isBlank(sheetName)) {
-			sheetName = "Sheet1";
-		}
-
-		Sheet sheet = wb.getSheet(sheetName);
-		if (sheet == null) {
-			sheet = wb.createSheet(sheetName);
-		}
-
-		return sheet;
-	}
-
-	private static Row getRowBySheet(Sheet sheet, int rowIndex) {
-		Row row = sheet.getRow(rowIndex);
-		if (row == null) {
-			row = sheet.createRow(rowIndex);
-		}
-
-		return row;
-	}
-
-	private static Cell getCellByRow(Row row, int cellIndex) {
-		Cell cell = row.getCell(cellIndex);
-		if (cell == null) {
-			cell = row.createCell(cellIndex);
-		}
-
-		return cell;
-	}
-
-	private static void writeDataToCell(Sheet sheet, List<WriteExcelData> excelDataList) throws VciBaseException {
-		if (sheet != null && !CollectionUtils.isEmpty(excelDataList)) {
-			List<WriteExcelData> mergedDataList = new ArrayList();
-			excelDataList.stream().forEach((ed) -> {
-				Row row = getRowBySheet(sheet, ed.getRow());
-				Cell cell = getCellByRow(row, ed.getCol());
-				if (ed.isMerged() && (ed.getRowTo() > ed.getRow() || ed.getColTo() > ed.getCol())) {
-					mergedDataList.add(ed);
-				}
-
-				copyStyle(sheet, cell, ed);
-				if (ed.isReadOnly() && ed.getObj() != null && !(ed.getObj() instanceof RichTextString) && CollectionUtils.isEmpty(ed.getValidationDataList())) {
-					List<String> list = new ArrayList();
-					list.add(ed.getObj().toString());
-					ed.setValidationDataList(list);
-					setValidation(sheet, ed);
-				}
-
-				centerCell(cell, ed);
-				Object value = ed.getObj();
-				if (StringUtil.isNotBlank(ed.getFontColor())) {
-					String rtsValue = value == null ? "" : value.toString();
-					RichTextString ts = cell instanceof HSSFCell ? new HSSFRichTextString(rtsValue) : new XSSFRichTextString(rtsValue);
-					Font font = sheet.getWorkbook().createFont();
-					font.setColor(VciBaseUtil.getShort(ed.getFontColor()));
-					((RichTextString)ts).applyFont(font);
-					value = ts;
-				}
-
-				if (ed.isFormula()) {
-					setFormula(cell, ed);
-				} else if (ed.isNameRefer()) {
-					setNameRefer(sheet, ed);
-				} else if (ed.isValidation()) {
-					setValidation(sheet, ed);
-				} else {
-					setCellValue(cell, value);
-				}
-
-				if (ed.getWidth() != null && ed.getWidth() > 0) {
-					sheet.setColumnWidth(cell.getColumnIndex(), (int)((double)ed.getWidth() + 0.72) * 256);
-				}
-
-			});
-			mergedRegion(sheet, mergedDataList);
-		}
-
-	}
-
-	private static void setFormula(Cell cell, WriteExcelData ed) {
-		if (ed.getObj() != null) {
-			cell.setCellFormula(ed.getObj().toString());
-		}
-
-	}
-
-	private static void setNameRefer(Sheet sheet, WriteExcelData ed) {
-		if (ed.getObj() != null) {
-			Name name = sheet.getWorkbook().createName();
-			name.setNameName(ed.getObj().toString());
-			name.setRefersToFormula(sheet.getSheetName() + "!" + getRange(ed));
-		}
-
-	}
-
-	private static void setValidation(Sheet sheet, WriteExcelData ed) {
-		if (ed.getRowTo() < ed.getRow()) {
-			ed.setRowTo(ed.getRow());
-		}
-
-		if (ed.getColTo() < ed.getCol()) {
-			ed.setColTo(ed.getCol());
-		}
-
-		CellRangeAddressList regions = new CellRangeAddressList(ed.getRow(), ed.getRowTo(), ed.getCol(), ed.getColTo());
-		DataValidation validation = null;
-		XSSFDataValidationConstraint dvConstraint;
-		if (sheet instanceof XSSFSheet) {
-			XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)sheet);
-			dvConstraint = null;
-			if (!CollectionUtils.isEmpty(ed.getValidationDataList())) {
-				dvConstraint = (XSSFDataValidationConstraint)dvHelper.createExplicitListConstraint((String[])ed.getValidationDataList().toArray(new String[0]));
-			} else {
-				VciBaseUtil.alertNotNull(new Object[]{ed.getObj(), "鍐欏叆鏈夋晥鎬х殑鏃跺�欙紝娌℃湁璁剧疆鏈夋晥鎬х殑鍏紡琛ㄨ揪寮�"});
-				dvConstraint = (XSSFDataValidationConstraint)dvHelper.createFormulaListConstraint(ed.getObj().toString());
-			}
-
-			validation = (XSSFDataValidation)dvHelper.createValidation(dvConstraint, regions);
-		} else {
-			HSSFDataValidationHelper dvHelper = new HSSFDataValidationHelper((HSSFSheet)sheet);
-			dvConstraint = null;
-			DataValidationConstraint dvConstraintF;
-			if (!CollectionUtils.isEmpty(ed.getValidationDataList())) {
-				dvConstraintF = dvHelper.createExplicitListConstraint((String[])ed.getValidationDataList().toArray(new String[0]));
-			} else {
-				VciBaseUtil.alertNotNull(new Object[]{ed.getObj(), "鍐欏叆鏈夋晥鎬х殑鏃跺�欙紝娌℃湁璁剧疆鏈夋晥鎬х殑鍏紡琛ㄨ揪寮�"});
-				dvConstraintF = dvHelper.createFormulaListConstraint(ed.getObj().toString());
-			}
-
-			validation = new HSSFDataValidation(regions, dvConstraintF);
-		}
-
-		if (validation instanceof XSSFDataValidation) {
-			((DataValidation)validation).setSuppressDropDownArrow(true);
-			((DataValidation)validation).setShowErrorBox(true);
-		} else {
-			((DataValidation)validation).setSuppressDropDownArrow(false);
-		}
-
-		if (StringUtil.isNotBlank(ed.getValidationErrorMsg())) {
-			((DataValidation)validation).createErrorBox("error", ed.getValidationErrorMsg());
-		}
-
-		sheet.addValidationData((DataValidation)validation);
-	}
-
-	private static String getRange(WriteExcelData excelData) {
-		char start = (char)(65 + excelData.getCol());
-		int rowId = excelData.getRow() + 1;
-		int endRowId = excelData.getRowTo() + 1;
-		char endPrefix;
-		if (excelData.getColTo() <= 25) {
-			endPrefix = (char)(65 + excelData.getColTo());
-			return "$" + start + "$" + rowId + ":$" + endPrefix + "$" + endRowId;
-		} else {
-			endPrefix = 'A';
-//			boolean endSuffix = true;
-			char endSuffix;
-			if ((excelData.getColTo() - 25) / 26 != 0 && excelData.getColTo() != 51) {
-				if ((excelData.getColTo() - 25) % 26 == 0) {
-					endSuffix = 'Z';
-					endPrefix = (char)(endPrefix + (excelData.getColTo() - 25) / 26 - 1);
-				} else {
-					endSuffix = (char)(65 + (excelData.getColTo() - 25) % 26 - 1);
-					endPrefix = (char)(endPrefix + (excelData.getColTo() - 25) / 26);
-				}
-			} else if ((excelData.getColTo() - 25) % 26 == 0) {
-				endSuffix = 'Z';
-			} else {
-				endSuffix = (char)(65 + (excelData.getColTo() - 25) % 26 - 1);
-			}
-
-			return "$" + start + "$" + rowId + ":$" + endPrefix + endSuffix + "$" + endRowId;
-		}
-	}
-
-	private static void setCellValue(Cell cell, Object value) {
-		if (value != null) {
-			if (value instanceof Date) {
-				cell.setCellValue((Date)value);
-			} else if (value instanceof String) {
-				cell.setCellValue(value.toString());
-			} else if (value instanceof Boolean) {
-				cell.setCellValue((Boolean)value);
-			} else if (value instanceof Integer) {
-				cell.setCellValue((double)(Integer)value);
-			} else if (value instanceof Long) {
-				cell.setCellValue((double)(Long)value);
-			} else if (value instanceof BigDecimal) {
-				cell.setCellValue(((BigDecimal)value).doubleValue());
-			} else if (value instanceof Double) {
-				cell.setCellValue((Double)value);
-			} else if (value instanceof RichTextString) {
-				cell.setCellValue((RichTextString)value);
-			} else {
-				cell.setCellValue(value.toString());
-			}
-		}
-
-	}
-
-	private static void copyStyle(Sheet sheet, Cell cell, WriteExcelData excelData) {
-		if (excelData.isCopyStyle()) {
-			Row copyStyleRow = sheet.getRow(excelData.getCopyStyleRow());
-			if (copyStyleRow != null) {
-				Cell copyStyleCell = copyStyleRow.getCell(excelData.getCopyStyleCol());
-				copyStyleForCell(copyStyleCell, cell);
-				if (StringUtil.isNotBlank(excelData.getDateFormat())) {
-					HSSFDataFormat format = (HSSFDataFormat)sheet.getWorkbook().createDataFormat();
-					cell.getCellStyle().setDataFormat(format.getFormat(excelData.getDateFormat()));
-				}
-			}
-		}
-
-	}
-
-	private static void copyStyleForCell(Cell fromCell, Cell toCell) {
-		CellStyle cellStyle = toCell.getCellStyle();
-		CellStyle fromStyle = fromCell.getCellStyle();
-		cellStyle.cloneStyleFrom(fromStyle);
-		cellStyle.setAlignment(fromStyle.getAlignment());
-		cellStyle.setBorderBottom(fromStyle.getBorderBottom());
-		cellStyle.setBorderLeft(fromStyle.getBorderLeft());
-		cellStyle.setBorderRight(fromStyle.getBorderRight());
-		cellStyle.setBorderTop(fromStyle.getBorderTop());
-		cellStyle.setDataFormat(fromStyle.getDataFormat());
-		cellStyle.setFillBackgroundColor(fromStyle.getFillBackgroundColor());
-		cellStyle.setFillForegroundColor(fromStyle.getFillForegroundColor());
-		cellStyle.setFillPattern(fromStyle.getFillPattern());
-		cellStyle.setVerticalAlignment(fromStyle.getVerticalAlignment());
-		cellStyle.setWrapText(fromStyle.getWrapText());
-		cellStyle.setLocked(fromStyle.getLocked());
-		cellStyle.setBottomBorderColor(fromStyle.getBottomBorderColor());
-		cellStyle.setLeftBorderColor(fromStyle.getLeftBorderColor());
-		cellStyle.setTopBorderColor(fromStyle.getTopBorderColor());
-		cellStyle.setRightBorderColor(fromStyle.getRightBorderColor());
-	}
-
-	private static void centerCell(Cell cell, WriteExcelData excelData) {
-		if (excelData.isCenter()) {
-			CellStyle cellStyle = cell.getCellStyle();
-			cellStyle.setAlignment(HorizontalAlignment.CENTER);
-			cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
-		}
-
-	}
-
-	private static void mergedRegion(Sheet sheet, Collection<WriteExcelData> mergedDataList) {
-		if (!CollectionUtils.isEmpty(mergedDataList)) {
-			mergedDataList.stream().forEach((ed) -> {
-				if (ed.getRowTo() < ed.getRow()) {
-					ed.setRowTo(ed.getRow());
-				}
-
-				if (ed.getColTo() < ed.getCol()) {
-					ed.setColTo(ed.getCol());
-				}
-
-				sheet.addMergedRegion(new CellRangeAddress(ed.getRow(), ed.getRowTo(), ed.getCol(), ed.getColTo()));
-			});
-		}
-
-	}
-
-	public static List<SheetDataSet> readDataObjectFromExcel(File file) throws VciBaseException {
-		return readDataObjectFromExcel(file, SheetDataSet.class);
-	}
-
-	public static <T> List<T> readDataObjectFromExcel(File file, Class<T> doClass) throws VciBaseException {
-		return readDataObjectFromExcel(file, doClass, (ReadExcelOption)null);
-	}
-
-	public static <T> List<T> readDataObjectFromExcel(File file, Class<T> doClass, ReadExcelOption excelOption) throws VciBaseException {
-		return readDataObjectFromExcel((File)file, doClass, excelOption, (PoiImportProcesser)null);
-	}
-
-	public static <T> List<T> readDataObjectFromExcel(File file, Class<T> doClass, ReadExcelOption excelOption, PoiImportProcesser<T> processer) throws VciBaseException {
-		InputStream ins = null;
-
-		try {
-			ins = new FileInputStream(file);
-		} catch (Throwable var15) {
-			String msg = "readImportFileFail";
-			if (logger.isErrorEnabled()) {
-				logger.error(msg, var15);
-			}
-
-			throw new VciBaseException(msg + LangBaseUtil.getErrorMsg(var15), new String[0], var15);
-		}
-
-		List var5;
-		try {
-			var5 = readDataObjectFromExcel((InputStream)ins, doClass, excelOption, processer);
-		} catch (VciBaseException var12) {
-			throw var12;
-		} catch (Throwable var13) {
-			throw new VciBaseException(LangBaseUtil.getErrorMsg(var13), new String[0], var13);
-		} finally {
-			IOUtils.closeQuietly(ins);
-		}
-
-		return var5;
-	}
-
-	public static <T> List<T> readDataObjectFromExcel(InputStream ins, Class<T> doClass, ReadExcelOption excelOption, PoiImportProcesser<T> processer) throws VciBaseException {
-		if (ins == null) {
-			throw new VciBaseException("inputStreamIsNull");
-		} else {
-			if (doClass == null) {
-				doClass = (Class<T>) SheetDataSet.class;
-			}
-
-			boolean isDataSet = false;
-			if (doClass.equals(SheetDataSet.class)) {
-				isDataSet = true;
-			}
-
-			Map<Field, ExcelColumn> excelColumnSet = getExcelColumnAnnotations(doClass);
-			Map<String, ExcelColumn> excelTitleMap = (Map)((Map)Optional.of(excelColumnSet).get()).values().stream().collect(Collectors.toMap((s) -> {
-//				return s.value();
-//				ExcelColumn s1 = (ExcelColumn) s;
-//				s1.value();
-//				((InvocationHandler) ((Proxy) s).).memberValues.get("value");
-				return ((ExcelColumn) s).value();
-//				return ((AnnotationInvocationHandler) ((Proxy) s).h).memberValues.get("value");
-			}, (t) -> {
-				return t;
-			}));
-			Map<String, Field> excelTitleFieldMap = new HashMap();
-			Map<String, ExcelColumnMap> extendAttrTitleMap = new HashMap();
-			Field[] rowIndexFields = new Field[]{null};
-			ReadExcelOption finalExcelOption = excelOption;
-			excelColumnSet.forEach((field, excelColumnx) -> {
-				excelTitleFieldMap.put(excelColumnx.value(), field);
-				if (excelColumnx.rowIndexColumn()) {
-					rowIndexFields[0] = field;
-				}
-
-				field.setAccessible(true);
-				if ((field.getType().equals(Map.class) || field.getType().getSuperclass().equals(Map.class)) && !CollectionUtils.isEmpty(finalExcelOption.getExtendAttrMap()) && finalExcelOption.getExtendAttrMap().containsKey(excelColumnx.value())) {
-					List<ExcelColumnMap> excelColumnMaps = (List) finalExcelOption.getExtendAttrMap().get(excelColumnx.value());
-					if (!CollectionUtils.isEmpty(excelColumnMaps)) {
-						excelColumnMaps.stream().forEach((ss) -> {
-							excelTitleFieldMap.put(ss.getTitle(), field);
-							extendAttrTitleMap.put(ss.getTitle(), ss);
-						});
-					}
-				}
-
-			});
-			Field rowIndexField = null;
-			if (rowIndexFields[0] != null) {
-				rowIndexField = rowIndexFields[0];
-			}
-
-			Workbook workbook = getWorkbookByInputStream(ins);
-			if (excelOption == null) {
-				excelOption = new ReadExcelOption();
-			}
-
-			FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
-			List<T> dataSet = new ArrayList();
-
-			try {
-				for(int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); ++sheetIndex) {
-					Sheet sheet = workbook.getSheetAt(sheetIndex);
-					if (StringUtil.isNotBlank(excelOption.getSheetName())) {
-						if (!sheet.getSheetName().equalsIgnoreCase(excelOption.getSheetName())) {
-							continue;
-						}
-					} else if (!excelOption.isReadAllSheet() && sheetIndex != excelOption.getSheetIndex()) {
-						continue;
-					}
-
-					SheetDataSet sheetDataSet = new SheetDataSet();
-					sheetDataSet.setSheetName(sheet.getSheetName());
-					if (isDataSet) {
-						dataSet.add((T) sheetDataSet);
-					}
-
-					Map<Integer, String> colsNameIndexMap = new HashMap();
-					int rowIndex;
-					if (excelOption.getFristRow() > 0) {
-						try {
-							Row titleRow = sheet.getRow(excelOption.getFristRow() - 1);
-							rowIndex = titleRow.getLastCellNum();
-							List<String> titleList = new LinkedList();
-
-							for(int i = 0; i < rowIndex; ++i) {
-								String title = VciBaseUtil.getStringValueFromObject(getCellValue(titleRow.getCell(i), evaluator));
-								if (StringUtil.isNotBlank(title)) {
-									title = title.replace("*", "").replace("鈽�", "");
-									colsNameIndexMap.put(i, title);
-									titleList.add(title);
-								}
-							}
-
-							if (isDataSet) {
-								sheetDataSet.setColName(titleList);
-							}
-						} catch (Exception var52) {
-							if (logger.isErrorEnabled()) {
-								logger.error("璇诲彇excel鏂囦欢涓殑鏍囬淇℃伅鍑虹幇浜嗛敊璇�", var52);
-							}
-
-							throw var52;
-						}
-					}
-
-					List<SheetRowData> rowDataList = new LinkedList();
-					if (sheet.getLastRowNum() > 0) {
-						for(rowIndex = excelOption.getFristRow(); rowIndex <= sheet.getLastRowNum(); ++rowIndex) {
-							Row rowDataSet = sheet.getRow(rowIndex);
-							if (rowDataSet != null) {
-								boolean notValue = false;
-
-								for(int i = 0; i < rowDataSet.getLastCellNum(); ++i) {
-									Cell cellTemp = rowDataSet.getCell(i);
-									Object valueTemp = getCellValue(cellTemp, evaluator);
-									if (valueTemp != null && !(valueTemp instanceof String) || valueTemp instanceof String && valueTemp != null && StringUtil.isNotBlank(valueTemp.toString())) {
-										notValue = true;
-										break;
-									}
-								}
-
-								if (notValue) {
-									SheetRowData rd = isDataSet ? new SheetRowData() : null;
-									T obj = null;
-									if (!isDataSet) {
-										try {
-											obj = doClass.newInstance();
-										} catch (Throwable var49) {
-											if (logger.isErrorEnabled()) {
-												logger.error("瀹炰緥鍖栨暟鎹璞�", var49);
-											}
-
-											throw new VciBaseException("瀹炰緥鍖栨暟鎹璞�," + LangBaseUtil.getErrorMsg(var49));
-										}
-									}
-
-									if (isDataSet) {
-										rd.setRowIndex(String.valueOf(rowIndex));
-									}
-
-									if (!isDataSet && rowIndexField != null) {
-										VciBaseUtil.setValueForField(rowIndexField, obj, String.valueOf(rowIndex));
-									}
-
-									Map<Integer, String> rowDataMap = new HashMap();
-
-									for(int columnIndex = 0; columnIndex < rowDataSet.getLastCellNum(); ++columnIndex) {
-										Cell cell = rowDataSet.getCell(columnIndex);
-										Object value = getCellValue(cell, evaluator);
-										String title = colsNameIndexMap.containsKey(columnIndex) ? (String)colsNameIndexMap.get(columnIndex) : "";
-										boolean isMapField = false;
-										Field thisField = null;
-										if (StringUtil.isNotBlank(title) && excelTitleFieldMap.containsKey(title)) {
-											thisField = (Field)excelTitleFieldMap.get(title);
-										}
-
-										if (thisField != null) {
-											thisField.setAccessible(true);
-											if (thisField.getType().equals(Map.class) || thisField.getType().getSuperclass().equals(Map.class)) {
-												isMapField = true;
-											}
-										}
-
-										ExcelColumn excelColumn = null;
-										if (StringUtil.isNotBlank(title) && excelTitleMap.containsKey(title)) {
-											excelColumn = (ExcelColumn)excelTitleMap.get(title);
-										}
-
-										ExcelColumnMap columnMap = null;
-										if (isMapField) {
-											columnMap = (ExcelColumnMap)extendAttrTitleMap.get(title);
-										}
-
-										boolean isNull = false;
-										if (value == null || value instanceof String && StringUtil.isBlank(value.toString())) {
-											isNull = true;
-										}
-
-										if (!isNull) {
-											if (!isDataSet) {
-												if (thisField != null && (excelColumn != null || columnMap != null)) {
-													if (isMapField) {
-														Object fieldValue = thisField.get(obj);
-														Object data;
-														if (fieldValue == null) {
-															data = new HashMap();
-														} else {
-															data = (Map)fieldValue;
-														}
-
-														((Map)data).put(columnMap.getColumnName(), value == null ? "" : value.toString());
-
-														try {
-															thisField.set(obj, data);
-														} catch (IllegalAccessException var50) {
-															if (logger.isErrorEnabled()) {
-																logger.error("璁剧疆map绫诲瀷鐨勬暟鎹椂鍊欏嚭鐜颁簡閿欒", var50);
-															}
-														}
-													} else {
-														if (value.getClass().equals(thisField.getType())) {
-															try {
-																thisField.set(obj, value);
-															} catch (IllegalAccessException var51) {
-																if (logger.isErrorEnabled()) {
-																	logger.error("璇诲彇excel鐨勫崟鍏冩牸鐨勫�煎悗锛屼负瀵硅薄璧嬪�煎嚭鐜颁簡閿欒", var51);
-																}
-															}
-														} else {
-															VciBaseUtil.setValueForField(thisField, obj, VciBaseUtil.getStringValueFromObject(value));
-														}
-
-														if (thisField.getType().equals(Date.class) && thisField.get(obj) == null) {
-															throw new VciBaseException("cellNotDateFormate", new String[]{title, rowIndex + 1 + ""});
-														}
-
-														if (StringUtil.isNotBlank(excelColumn.regExg()) && !VciBaseUtil.getStringValueFromObject(value).matches(excelColumn.regExg())) {
-															throw new VciBaseException("cellValueNotEqualReg", new String[]{title, rowIndex + 1 + "", excelColumn.regExgTitle()});
-														}
-													}
-												}
-
-												if (processer != null && thisField != null) {
-													processer.process(value, obj, thisField);
-												}
-											} else {
-												rowDataMap.put(columnIndex, VciBaseUtil.getStringValueFromObject(value));
-											}
-										} else if (!isDataSet && thisField != null && excelColumn != null) {
-											if (!excelColumn.nullable()) {
-												throw new VciBaseException("cellValueCanNotNull", new String[]{title, rowIndex + 1 + ""});
-											}
-
-											if (StringUtil.isNotBlank(excelColumn.regExg())) {
-												throw new VciBaseException("cellValueCanNotNullForReg", new String[]{title, rowIndex + 1 + ""});
-											}
-										}
-									}
-
-									if (isDataSet) {
-										rd.setData(rowDataMap);
-										rowDataList.add(rd);
-									} else {
-										dataSet.add(obj);
-									}
-								}
-							}
-						}
-					}
-
-					if (isDataSet) {
-						sheetDataSet.setRowData(rowDataList);
-					}
-				}
-			} catch (Throwable var53) {
-				throw new VciBaseException(LangBaseUtil.getErrorMsg(var53), new String[0], var53);
-			} finally {
-				IOUtils.closeQuietly(ins);
-
-				try {
-					workbook.close();
-				} catch (IOException var48) {
-					if (logger.isErrorEnabled()) {
-						logger.error("鍏抽棴宸ヤ綔绨垮嚭鐜颁簡閿欒", var48);
-					}
-				}
-
-			}
-
-			return dataSet;
-		}
-	}
-
-	private static Object getCellValue(Cell cell, FormulaEvaluator evaluator) {
-		if (cell != null) {
-			Object cellValue = null;
-			CellType cellTypeEnum = cell.getCellTypeEnum();
-			switch (cellTypeEnum) {
-				case STRING:
-					String thisCellValue = cell.getStringCellValue();
-					cellValue = StringUtil.isEmpty(thisCellValue) ? "" : thisCellValue.trim();
-					break;
-				case BOOLEAN:
-					boolean boolValue = cell.getBooleanCellValue();
-					cellValue = boolValue;
-					break;
-				case FORMULA:
-					cellValue = getCellValue(evaluator.evaluate(cell));
-					break;
-				case NUMERIC:
-					if (DateUtil.isCellDateFormatted(cell)) {
-						cellValue = cell.getDateCellValue();
-					} else {
-						cellValue = cell.getNumericCellValue();
-					}
-					break;
-				default:
-					cellValue = "";
-			}
-
-			return cellValue;
-		} else {
-			return null;
-		}
-	}
-
-	private static Object getCellValue(CellValue cell) {
-		Object cellValue = null;
-		switch (cell.getCellTypeEnum()) {
-			case STRING:
-				String thisCellValue = cell.getStringValue();
-				cellValue = StringUtil.isEmpty(thisCellValue) ? "" : thisCellValue.trim();
-				break;
-			case NUMERIC:
-				cellValue = cell.getNumberValue();
-		}
-
-		return cellValue;
-	}
-
-	public static <T> Map<Field, ExcelColumn> getExcelColumnAnnotations(Class<T> doClass) {
-		Map<Field, ExcelColumn> excelColumnMap = new HashMap();
-		if (!doClass.equals(SheetDataSet.class)) {
-			List<Field> allFields = VciBaseUtil.getAllFieldForObj(doClass);
-			List<Field> hasExcelColumnFields = (List)allFields.stream().filter((field) -> {
-				return field.isAnnotationPresent(ExcelColumn.class);
-			}).collect(Collectors.toList());
-			if (!CollectionUtils.isEmpty(hasExcelColumnFields)) {
-				hasExcelColumnFields.stream().forEach((field) -> {
-					ExcelColumn ec = getExcelColumnAnnotation(field);
-					excelColumnMap.put(field, ec);
-				});
-			}
-		}
-
-		return excelColumnMap;
-	}
-
-	public static ExcelColumn getExcelColumnAnnotation(Field field) {
-		ExcelColumn ec = (ExcelColumn)field.getAnnotation(ExcelColumn.class);
-		if (ec == null) {
-			ec = (ExcelColumn)field.getDeclaredAnnotation(ExcelColumn.class);
-		}
-
-		return ec;
-	}
-
-	public static <T> String downloadImportTempByClass(Class<T> doClass, DownloadTempOption downloadTempOption, PoiTemplateProcesser<T> processer) {
-		if (downloadTempOption == null) {
-			downloadTempOption = new DownloadTempOption("");
-		}
-
-		String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + (StringUtil.isNotBlank(downloadTempOption.getExcelName()) ? downloadTempOption.getExcelName() : "瀵煎叆妯℃澘.xls");
-
-		try {
-			(new File(excelName)).createNewFile();
-		} catch (Throwable var22) {
-			throw new VciBaseException(LangBaseUtil.getErrorMsg(var22), new String[]{excelName}, var22);
-		}
-
-		List<WriteExcelData> excelDataList = new ArrayList();
-		Map<Field, ExcelColumn> fieldExcelColumnMap = getExcelColumnAnnotations(doClass);
-		Map<String, ExcelColumn> fieldNameExcelColumnMap = new HashMap();
-		fieldExcelColumnMap.forEach((fieldx, ec) -> {
-			fieldx.setAccessible(true);
-			fieldNameExcelColumnMap.put(fieldx.getName(), ec);
-		});
-		Field[] fields = doClass.getDeclaredFields();
-		Set<String> finedFields = new HashSet();
-		new HSSFWorkbook();
-		int index = 0;
-
-		for(int i = 0; i < fields.length; ++i) {
-			Field field = fields[i];
-			field.setAccessible(true);
-			String fieldName = field.getName();
-			if (fieldNameExcelColumnMap.containsKey(fieldName)) {
-				finedFields.add(fieldName);
-				ExcelColumn column = (ExcelColumn)fieldNameExcelColumnMap.get(fieldName);
-				if (!column.rowIndexColumn()) {
-					WriteExcelData excelData = new WriteExcelData(0, index, StringUtil.isNotBlank(column.value()) ? column.value() : fieldName);
-					if (!column.nullable()) {
-						excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
-						excelData.setObj(excelData.getObj() + "*");
-					}
-
-					excelData.setReadOnly(true);
-					excelData.setCenter(true);
-					if (column.width() > 0) {
-						excelData.setWidth(column.width());
-					}
-
-					List<WriteExcelData> thisRowNextDatas = new ArrayList();
-					if (downloadTempOption.getDefaultRowSize() == null || downloadTempOption.getDefaultRowSize() < 0) {
-						downloadTempOption.setDefaultRowSize(1);
-					}
-
-					Integer defaultRowSize = downloadTempOption.getDefaultRowSize();
-
-					for(int j = 0; j < defaultRowSize; ++j) {
-						thisRowNextDatas.add(new WriteExcelData(1 + j, index, ""));
-					}
-
-					if (StringUtil.isNotBlank(column.enumId()) && processer != null) {
-						Map<String, String> enumMap = processer.wrapperEnumMap(column.enumId(), doClass, field);
-						if (!CollectionUtils.isEmpty(enumMap)) {
-							WriteExcelData thisRowNext = (WriteExcelData)thisRowNextDatas.get(0);
-							thisRowNext.setValidation(true);
-							thisRowNext.setRowTo(defaultRowSize);
-							thisRowNext.setColTo(thisRowNext.getCol());
-							thisRowNext.setValidationDataList((List)enumMap.values().stream().collect(Collectors.toList()));
-						}
-					}
-
-					if (field.isAnnotationPresent(VciFieldType.class)) {
-						VciFieldType fieldType = (VciFieldType)field.getDeclaredAnnotation(VciFieldType.class);
-						if (fieldType == null) {
-							fieldType = (VciFieldType)field.getAnnotation(VciFieldType.class);
-						}
-
-						if (fieldType != null) {
-							String dateFormat;
-							if (VciFieldTypeEnum.VTDateTime.equals(fieldType.value())) {
-								dateFormat = "yyyy-MM-dd HH:mm:ss";
-							} else if (VciFieldTypeEnum.VTDate.equals(fieldType.value())) {
-								dateFormat = "yyyy-MM-dd";
-							} else if (VciFieldTypeEnum.VTTime.equals(fieldType.value())) {
-								dateFormat = "HH:mm:ss";
-							} else {
-								dateFormat = "";
-							}
-
-							if (StringUtil.isNotBlank(dateFormat)) {
-								thisRowNextDatas.stream().forEach((thisRowNextx) -> {
-									thisRowNextx.setDateFormat(dateFormat);
-								});
-							}
-
-							if (VciFieldTypeEnum.VTBoolean.equals(fieldType.value())) {
-								List<String> trueFlase = new ArrayList();
-								trueFlase.add("鏄�");
-								trueFlase.add("鍚�");
-								WriteExcelData thisRowNext = (WriteExcelData)thisRowNextDatas.get(0);
-								thisRowNext.setValidation(true);
-								thisRowNext.setRowTo(defaultRowSize);
-								thisRowNext.setColTo(thisRowNext.getCol());
-								thisRowNext.setValidationDataList(trueFlase);
-							}
-						}
-					}
-
-					excelDataList.addAll(thisRowNextDatas);
-					excelDataList.add(excelData);
-					++index;
-				}
-			}
-		}
-
-		WriteExcelOption excelOption = new WriteExcelOption();
-		excelOption.addSheetDataList(StringUtil.isNotBlank(downloadTempOption.getSheetName()) ? downloadTempOption.getSheetName() : "Sheet1", excelDataList);
-		writeDataToFile(excelName, excelOption);
-		return excelName;
-	}
-
-	public static void mergeExcel(List<String> files, String excelName) {
-		Workbook newExcelCreat = excelName.toLowerCase(Locale.ROOT).endsWith(".xlsx") ? new XSSFWorkbook() : new HSSFWorkbook();
-
-		for(int i = 0; i < files.size(); ++i) {
-			String fromExcelName = (String)files.get(i);
-
-			try {
-				InputStream in = new FileInputStream(fromExcelName);
-				Throwable var6 = null;
-
-				try {
-					Workbook fromExcel = null;
-					if (fromExcelName.toLowerCase(Locale.ROOT).endsWith(".xlsx")) {
-						fromExcel = new XSSFWorkbook(in);
-					} else {
-						fromExcel = new HSSFWorkbook(in);
-					}
-
-					int length = ((Workbook)fromExcel).getNumberOfSheets();
-					Sheet oldSheet;
-					if (length <= 1) {
-						oldSheet = ((Workbook)fromExcel).getSheetAt(0);
-						oldSheet = ((Workbook)newExcelCreat).getSheet(oldSheet.getSheetName());
-						String newSheetName = oldSheet.getSheetName();
-						if (oldSheet != null) {
-							newSheetName = newSheetName + "_" + i;
-						}
-
-						Sheet newSheet = ((Workbook)newExcelCreat).createSheet(newSheetName);
-						copySheet((Workbook)newExcelCreat, oldSheet, newSheet);
-					} else {
-						for(int j = 0; j < length; ++j) {
-							oldSheet = ((Workbook)fromExcel).getSheetAt(j);
-							Sheet existSheet = ((Workbook)newExcelCreat).getSheet(oldSheet.getSheetName());
-							String newSheetName = oldSheet.getSheetName();
-							if (existSheet != null) {
-								newSheetName = newSheetName + "_" + i + "_" + j;
-							}
-
-							Sheet newSheet = ((Workbook)newExcelCreat).createSheet(newSheetName);
-							copySheet((Workbook)newExcelCreat, oldSheet, newSheet);
-						}
-					}
-
-					List<? extends Name> allNames = ((Workbook)fromExcel).getAllNames();
-					if (!CollectionUtils.isEmpty(allNames)) {
-						allNames.stream().forEach((name) -> {
-							Name name1 = newExcelCreat.createName();
-							name1.setNameName(name.getNameName());
-							name1.setRefersToFormula(name.getRefersToFormula());
-						});
-					}
-				} catch (Throwable var64) {
-					var6 = var64;
-					throw var64;
-				} finally {
-					if (in != null) {
-						if (var6 != null) {
-							try {
-								in.close();
-							} catch (Throwable var58) {
-								var6.addSuppressed(var58);
-							}
-						} else {
-							in.close();
-						}
-					}
-
-				}
-			} catch (IOException var66) {
-				throw new VciBaseException("鍚堝苟excel鍑洪敊鐨勪簡", new String[0], var66);
-			}
-		}
-
-		String allFileName = excelName;
-
-		try {
-			FileOutputStream fileOut = new FileOutputStream(allFileName);
-			Throwable var69 = null;
-
-			try {
-				((Workbook)newExcelCreat).write(fileOut);
-				fileOut.flush();
-			} catch (Throwable var60) {
-				var69 = var60;
-				throw var60;
-			} finally {
-				if (fileOut != null) {
-					if (var69 != null) {
-						try {
-							fileOut.close();
-						} catch (Throwable var59) {
-							var69.addSuppressed(var59);
-						}
-					} else {
-						fileOut.close();
-					}
-				}
-
-			}
-		} catch (IOException var62) {
-			var62.printStackTrace();
-		} finally {
-			try {
-				((Workbook)newExcelCreat).close();
-			} catch (IOException var57) {
-				var57.printStackTrace();
-			}
-
-		}
-
-	}
-
-	private static void mergeSheetAllRegion(Sheet fromSheet, Sheet toSheet) {
-		int num = fromSheet.getNumMergedRegions();
-		CellRangeAddress cellR = null;
-
-		for(int i = 0; i < num; ++i) {
-			cellR = fromSheet.getMergedRegion(i);
-			toSheet.addMergedRegion(cellR);
-		}
-
-	}
-
-	private static void copyCell(Cell fromCell, Cell toCell) {
-		copyStyleForCell(fromCell, toCell);
-		if (fromCell.getCellComment() != null) {
-			toCell.setCellComment(fromCell.getCellComment());
-		}
-
-		CellType fromCellType = fromCell.getCellType();
-		toCell.setCellType(fromCellType);
-		if (fromCellType == CellType.NUMERIC) {
-			if (DateUtil.isCellDateFormatted(fromCell)) {
-				toCell.setCellValue(fromCell.getDateCellValue());
-			} else {
-				toCell.setCellValue(fromCell.getNumericCellValue());
-			}
-		} else if (fromCellType == CellType.STRING) {
-			RichTextString value = fromCell.getRichStringCellValue();
-			if (value != null && StringUtil.isNotBlank(value.toString())) {
-				Font fontAt = fromCell.getSheet().getWorkbook().getFontAt(fromCell.getCellStyle().getFontIndexAsInt());
-				value.applyFont(fontAt);
-			}
-
-			toCell.setCellValue(value);
-		} else if (fromCellType != CellType.BLANK) {
-			if (fromCellType == CellType.BOOLEAN) {
-				toCell.setCellValue(fromCell.getBooleanCellValue());
-			} else if (fromCellType == CellType.ERROR) {
-				toCell.setCellErrorValue(fromCell.getErrorCellValue());
-			} else if (fromCellType == CellType.FORMULA) {
-				toCell.setCellFormula(fromCell.getCellFormula());
-			}
-		}
-
-	}
-
-	private static void copyRow(Workbook wb, Row oldRow, Row toRow) {
-		toRow.setHeight(oldRow.getHeight());
-		Iterator cellIt = oldRow.cellIterator();
-
-		while(cellIt.hasNext()) {
-			Cell tmpCell = (Cell)cellIt.next();
-			Cell newCell = toRow.createCell(tmpCell.getColumnIndex());
-			copyCell(tmpCell, newCell);
-		}
-
-	}
-
-	private static void copySheet(Workbook wb, Sheet fromSheet, Sheet toSheet) {
-		mergeSheetAllRegion(fromSheet, toSheet);
-		int length = fromSheet.getRow(fromSheet.getFirstRowNum()).getLastCellNum();
-
-		for(int i = 0; i <= length; ++i) {
-			toSheet.setColumnWidth(i, fromSheet.getColumnWidth(i));
-		}
-
-		Iterator rowIt = fromSheet.rowIterator();
-
-		while(rowIt.hasNext()) {
-			Row oldRow = (Row)rowIt.next();
-			Row newRow = toSheet.createRow(oldRow.getRowNum());
-			copyRow(wb, oldRow, newRow);
-		}
-
-		List<? extends DataValidation> dataValidations = fromSheet.getDataValidations();
-		if (!CollectionUtils.isEmpty(dataValidations)) {
-			dataValidations.stream().forEach((dv) -> {
-				toSheet.addValidationData(dv);
-			});
-		}
-
-	}
-
-	public static <T> void appendDataToExcel(Collection<T> data, String excelName, AppendDataExcelOption excelOption) {
-		if (!CollectionUtils.isEmpty(data)) {
-			T t1 = data.stream().findFirst().get();
-			Map<Field, ExcelColumn> excelColumnSet = getExcelColumnAnnotations(t1.getClass());
-			Map<String, String> excelTitleFieldNameMap = new HashMap();
-			Set<String> readOnlyFields = new HashSet();
-			excelColumnSet.forEach((field, excelColumn) -> {
-				excelTitleFieldNameMap.put(excelColumn.value(), field.getName());
-				if (excelColumn.readOnly()) {
-					readOnlyFields.add(field.getName());
-				}
-
-			});
-			ReadExcelOption readExcelOption = new ReadExcelOption();
-			readExcelOption.setSheetName(excelOption.getSheetName());
-			readExcelOption.setFristRow(excelOption.getTitleRowIndex() + 1);
-			List<SheetDataSet> sheetDataSets = readDataObjectFromExcel(new File(excelName), SheetDataSet.class, readExcelOption);
-			if (!CollectionUtils.isEmpty(sheetDataSets)) {
-				SheetDataSet sheetDataSet = (SheetDataSet)sheetDataSets.get(0);
-				Map<String, Integer> fieldColumnMap = new HashMap();
-				List<String> colName = sheetDataSet.getColName();
-				if (!CollectionUtils.isEmpty(colName)) {
-					for(int i = 0; i < colName.size(); ++i) {
-						String col = ((String)colName.get(i)).replace("*", "").replace("鈽�", "");
-						if (excelTitleFieldNameMap.containsKey(col)) {
-							fieldColumnMap.put(excelTitleFieldNameMap.get(col), i);
-						}
-					}
-
-					List<WriteExcelData> writeExcelDataList = new ArrayList();
-					Integer[] index = new Integer[]{excelOption.getTitleRowIndex() + 1};
-					data.stream().forEach((d) -> {
-						Map<String, String> dataMap = VciBaseUtil.objectToMapString(d);
-						fieldColumnMap.forEach((field, col) -> {
-							if (CollectionUtils.isEmpty(excelOption.getWriteFields()) || excelOption.getWriteFields().contains(field)) {
-								WriteExcelData excelData = new WriteExcelData(index[0], col, dataMap.getOrDefault(field, ""));
-								excelData.setReadOnly(excelOption.isReadOnlyFromField() && readOnlyFields.contains(field) || !CollectionUtils.isEmpty(excelOption.getReadOnlyFields()) && excelOption.getReadOnlyFields().contains(field));
-								writeExcelDataList.add(excelData);
-							}
-
-						});
-						Integer var7 = index[0];
-						Integer var8 = index[0] = index[0] + 1;
-					});
-					WriteExcelOption writeExcelOption = new WriteExcelOption();
-					writeExcelOption.addSheetDataList(excelOption.getSheetName(), writeExcelDataList);
-					writeExcelOption.setAppend(true);
-					writeDataToFile(excelName, writeExcelOption);
-				}
-			}
-		}
-
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/PoiImportProcesser.java
deleted file mode 100644
index bd32f6c..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/PoiImportProcesser.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.util;
-
-import java.lang.reflect.Field;
-
-@FunctionalInterface
-public interface PoiImportProcesser<T> {
-	void process(Object var1, T var2, Field var3);
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/PoiTemplateProcesser.java
deleted file mode 100644
index 143d945..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/poi/util/PoiTemplateProcesser.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.vci.ubcs.com.vci.starter.poi.util;
-
-import java.lang.reflect.Field;
-import java.util.Map;
-
-@FunctionalInterface
-public interface PoiTemplateProcesser<T> {
-	Map<String, String> wrapperEnumMap(String var1, Class<T> var2, Field var3);
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/model/ReleasedObjDO.java
deleted file mode 100644
index 65e46bc..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/model/ReleasedObjDO.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.vci.ubcs.com.vci.starter.revision.model;
-
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//package com.vci.starter.revision.model;
-
-import java.io.Serializable;
-
-public class ReleasedObjDO implements Serializable {
-	private static final long serialVersionUID = -7258896338253286905L;
-	private String oid;
-	private String revisionOid;
-	private String nameOid;
-	private String btmName;
-
-	public ReleasedObjDO() {
-	}
-
-	public String getOid() {
-		return this.oid;
-	}
-
-	public void setOid(String oid) {
-		this.oid = oid;
-	}
-
-	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;
-	}
-
-	@Override
-	public String toString() {
-		return "ReleasedObjDO{oid='" + this.oid + '\'' + ", revisionOid='" + this.revisionOid + '\'' + ", nameOid='" + this.nameOid + '\'' + ", btmName='" + this.btmName + '\'' + '}';
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/model/RevisionInfo.java
deleted file mode 100644
index a3c2c3a..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/model/RevisionInfo.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package com.vci.ubcs.com.vci.starter.revision.model;
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//package com.vci.starter.revision.model;
-
-import java.io.Serializable;
-
-public class RevisionInfo implements Serializable {
-	private static final long serialVersionUID = 7167255550437885283L;
-	private String oid;
-	private String nameOid;
-	private String revisionOid;
-	private String lastR;
-	private String firstR;
-	private String lastV;
-	private String firstV;
-	private String revisionRule;
-	private Integer revisionSeq;
-	private String revisionValue;
-	private String versionRule;
-	private Integer versionSeq;
-	private String versionValue;
-	private String btmname;
-
-	public RevisionInfo() {
-	}
-
-	public String getBtmname() {
-		return this.btmname;
-	}
-
-	public void setBtmname(String btmname) {
-		this.btmname = btmname;
-	}
-
-	public String getOid() {
-		return this.oid;
-	}
-
-	public void setOid(String oid) {
-		this.oid = oid;
-	}
-
-	public String getNameOid() {
-		return this.nameOid;
-	}
-
-	public void setNameOid(String nameOid) {
-		this.nameOid = nameOid;
-	}
-
-	public String getRevisionOid() {
-		return this.revisionOid;
-	}
-
-	public void setRevisionOid(String revisionOid) {
-		this.revisionOid = revisionOid;
-	}
-
-	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 getRevisionRule() {
-		return this.revisionRule;
-	}
-
-	public void setRevisionRule(String revisionRule) {
-		this.revisionRule = revisionRule;
-	}
-
-	public int 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 String getVersionRule() {
-		return this.versionRule;
-	}
-
-	public void setVersionRule(String versionRule) {
-		this.versionRule = versionRule;
-	}
-
-	public int 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;
-	}
-
-	@Override
-	public String toString() {
-		return "RevisionInfo{oid='" + this.oid + '\'' + ", nameOid='" + this.nameOid + '\'' + ", revisionOid='" + this.revisionOid + '\'' + ", lastR='" + this.lastR + '\'' + ", firstR='" + this.firstR + '\'' + ", lastV='" + this.lastV + '\'' + ", firstV='" + this.firstV + '\'' + ", revisionRule='" + this.revisionRule + '\'' + ", revisionSeq=" + this.revisionSeq + ", revisionValue='" + this.revisionValue + '\'' + ", versionRule='" + this.versionRule + '\'' + ", versionSeq=" + this.versionSeq + ", versionValue='" + this.versionValue + '\'' + ", btmname='" + this.btmname + '\'' + '}';
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/service/RevisionModelUtil.java
deleted file mode 100644
index 3364bc2..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/service/RevisionModelUtil.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.vci.ubcs.com.vci.starter.revision.service;
-
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//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 org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-@Component
-public class RevisionModelUtil implements VciSecretServiceI {
-
-	private Logger logger = LoggerFactory.getLogger(this.getClass());
-	public static volatile Map<String, Map<String, String>> modelColumnAnnotationMap = new ConcurrentHashMap();
-//	public static volatile Map<String, VciBtmType> modelAnnotationMap = new ConcurrentHashMap();
-	public static boolean CHECK_IDEMPOTENCE = false;
-
-	public void copyFromDTOIgnore(Object dto, BaseModel baseModel) {
-		VciBaseUtil.alertNotNull(new Object[]{dto, "鏁版嵁浼犺緭瀵硅薄", baseModel, "鏁版嵁搴撲腑鐨勬暟鎹璞�"});
-		BaseModel tempModel = new BaseModel();
-		BeanUtilForVCI.copyPropertiesIgnoreCase(baseModel, tempModel);
-		BeanUtilForVCI.copyPropertiesIgnoreCase(dto, baseModel);
-		BeanUtilForVCI.copyPropertiesIgnoreCase(tempModel, baseModel);
-		baseModel.setId(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("id", dto)));
-		baseModel.setName(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("name", dto)));
-		baseModel.setDescription(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("description", dto)));
-		tempModel = null;
-	}
-
-	public <T, R> List<Tree> doList2Trees(List<T> doList, TreeWrapperOptions wrapperOptions, Function<T, R> f) {
-		if (CollectionUtils.isEmpty(doList)) {
-			return new ArrayList();
-		} else {
-			List<Tree> allTree = new ArrayList();
-			List<Tree> children = new ArrayList();
-			Iterator var6 = doList.iterator();
-
-			while(true) {
-				while(var6.hasNext()) {
-					T doObject = (T) var6.next();
-					Tree tree = new Tree();
-					List<String> oidFieldNames = VciBaseUtil.str2List(wrapperOptions.getOidFieldName());
-					List<String> oidValues = new LinkedList();
-					oidFieldNames.stream().forEach((s) -> {
-						oidValues.add(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField(s, doObject)));
-					});
-					tree.setOid((String)oidValues.stream().collect(Collectors.joining(wrapperOptions.getOidValueSep())));
-					if (f != null) {
-						tree.setText((String)f.apply(doObject));
-					} else {
-						List<String> textFieldNames = VciBaseUtil.str2List(wrapperOptions.getTextFieldName());
-						List<String> textValues = new LinkedList();
-						textFieldNames.stream().forEach((s) -> {
-							textValues.add(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField(s, doObject)));
-						});
-						tree.setText((String)textValues.stream().collect(Collectors.joining(wrapperOptions.getTextValueSep())));
-					}
-
-					if (StringUtils.isNotBlank(wrapperOptions.getParentFieldName())) {
-						tree.setParentId(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField(wrapperOptions.getParentFieldName(), doObject)));
-					}
-
-					if (wrapperOptions.isAllAttributes()) {
-						try {
-							tree.setAttributes(VciBaseUtil.objectToMapString(doObject));
-						} catch (Exception var13) {
-							if (this.logger.isErrorEnabled()) {
-								this.logger.error("鎶婂璞¤浆鎹负map鏃跺嚭鐜颁簡閿欒锛屼絾鏄笉褰卞搷鏍戠殑灞曠ず锛屽涓氬姟鍙兘鏈夊奖鍝�");
-							}
-						}
-					}
-
-					if (wrapperOptions.isMultipleSelect() || wrapperOptions.isShowCheckBox()) {
-						tree.setShowCheckbox(true);
-					}
-
-					if (wrapperOptions.getParentOid() == null) {
-						wrapperOptions.setParentOid("");
-					}
-
-					if (!StringUtils.isBlank(tree.getParentId()) && (!StringUtils.isNotBlank(wrapperOptions.getParentOid()) || !wrapperOptions.getParentOid().equalsIgnoreCase(tree.getParentId()))) {
-						children.add(tree);
-					} else {
-						allTree.add(tree);
-					}
-				}
-
-				(new Tree()).findChild(allTree, children);
-				if (allTree.size() <= 0) {
-					allTree.addAll(children);
-				}
-
-				return allTree;
-			}
-		}
-	}
-
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/service/VciRevisionServiceI.java
deleted file mode 100644
index ea30b16..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/revision/service/VciRevisionServiceI.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.vci.ubcs.com.vci.starter.revision.service;
-
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//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;
-
-public interface VciRevisionServiceI {
-	RevisionInfo selectLastRevision(String var1, String var2);
-
-	RevisionInfo selectLastVersion(String var1, String var2, String var3);
-
-	RevisionInfo selectRelease(String var1, String var2, String var3);
-
-	int saveReleased(ReleasedObjDO var1);
-
-	int resetLastRevision(String var1, String var2);
-
-	int resetOldRevision(String var1, String var2);
-
-	RevisionInfo selectByOid(String var1, String var2);
-
-	int resetLastVersion(String var1, String var2, String var3);
-
-	int resetOldVersion(String var1, String var2);
-
-	int countByProperties(String var1, Object var2, String var3);
-
-	int countByPropertiesNotIncludeSelf(String var1, Object var2, String var3, String var4);
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/util/LocalFileUtil.java
deleted file mode 100644
index 0350790..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/util/LocalFileUtil.java
+++ /dev/null
@@ -1,318 +0,0 @@
-package com.vci.ubcs.com.vci.starter.util;
-
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-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 org.apache.commons.io.IOUtils;
-import org.springblade.core.tool.utils.StringUtil;
-import org.springframework.boot.system.ApplicationHome;
-
-public class LocalFileUtil {
-	public static Class mainClass = null;
-
-	public LocalFileUtil() {
-	}
-
-	public static void deleteFile(File file) {
-		if (file != null && file.exists()) {
-			if (file.isDirectory()) {
-				File[] files = file.listFiles();
-
-				for(int i = 0; i < files.length; ++i) {
-					deleteFile(files[i]);
-				}
-			}
-
-			file.delete();
-		}
-	}
-
-	public static void copyFile(File source, File target) {
-		FileInputStream is = null;
-		FileOutputStream os = null;
-
-		try {
-			is = new FileInputStream(source);
-			os = new FileOutputStream(target);
-			FileChannel sourceChannel = is.getChannel();
-			FileChannel targetChannel = os.getChannel();
-			int i = 0;
-
-			for(int length = 2097152; sourceChannel.position() != sourceChannel.size(); ++i) {
-				if (sourceChannel.size() - sourceChannel.position() < 20971520L) {
-					length = (int)(sourceChannel.size() - sourceChannel.position());
-				} else {
-					length = 20971520;
-				}
-
-				sourceChannel.transferTo(sourceChannel.position(), (long)length, targetChannel);
-				sourceChannel.position(sourceChannel.position() + (long)length);
-			}
-
-			sourceChannel.close();
-			targetChannel.close();
-		} catch (Throwable var11) {
-			throw new VciBaseException("鎷疯礉鏂囦欢鍑洪敊", new String[0], var11);
-		} finally {
-			IOUtils.closeQuietly(is);
-			IOUtils.closeQuietly(os);
-		}
-	}
-
-	public static String getDefaultTempFolder()  {
-		String path = getProjectFolder();
-		path = path + File.separator + "tempFolder" + File.separator + UUID.randomUUID().toString();
-		File folder = new File(path);
-		if (!folder.exists()) {
-			folder.mkdirs();
-		}
-
-		return path;
-	}
-
-	public static String getProjectFolder()  {
-		return getProjectFolder(LocalFileUtil.class);
-	}
-
-	public static String getProjectFolder(Class classObj) {
-		String path = "";
-
-		try {
-			ApplicationHome h = new ApplicationHome(classObj == null ? (mainClass == null ? LocalFileUtil.class : mainClass) : classObj);
-			File jarF = h.getSource();
-			if (jarF == null) {
-				jarF = h.getDir();
-			}
-
-			path = jarF.getParentFile().toString();
-			if (path.contains("!")) {
-				path = (new File(path)).getParentFile().getParent();
-			}
-		} catch (Throwable var4) {
-			var4.printStackTrace();
-			throw new VciBaseException("鑾峰彇褰撳墠鏈嶅姟鎵�鍦ㄧ殑鏂囦欢澶瑰嚭鐜颁簡閿欒", new String[0], var4);
-		}
-
-		if (path.startsWith("file:\\")) {
-			path = path.substring(6);
-		}
-
-		if (System.getProperty("os.name").toLowerCase().startsWith("win") && path.startsWith("/")) {
-			path = path.substring(path.indexOf("/") + 1);
-		}
-
-		System.out.println("椤圭洰鐨勮矾寰勬槸:" + path);
-		return path;
-	}
-
-	public static void deleteTempFile(File tempFile, boolean deleteRandomFolder) {
-		if (tempFile != null) {
-			tempFile.delete();
-			if (deleteRandomFolder) {
-				tempFile.getParentFile().delete();
-			}
-		}
-
-	}
-
-	public static void alertNotNull(Object... s)  {
-		if (s != null && s.length > 0) {
-			for(int i = 0; i < s.length; ++i) {
-				Object obj = s[i];
-				if (obj == null || StringUtil.isBlank(obj.toString())) {
-					String param = "";
-
-					try {
-						++i;
-						param = s[i].toString();
-					} catch (Exception var5) {
-					}
-
-					throw new VciBaseException("鍙傛暟[" + param + "]涓嶈兘涓虹┖");
-				}
-			}
-		}
-
-	}
-
-	public static String getFileExtension(File file) {
-		return file != null ? getFileExtensionByName(file.getName()) : "";
-	}
-
-	public static String getFileExtensionByName(String name) {
-		return StringUtil.isNotBlank(name) && name.contains(".") ? name.substring(name.lastIndexOf(".") + 1) : "";
-	}
-
-	public static String getFileNameForIE(String name) {
-		if (StringUtil.isBlank(name)) {
-			return name;
-		} else if (name.contains(File.separator)) {
-			return name.substring(name.lastIndexOf(File.separator) + 1);
-		} else {
-			return name.contains("\\") ? name.substring(name.lastIndexOf("\\") + 1) : name;
-		}
-	}
-
-	public static String readContentForFileInJar(String fileName)  {
-		if (StringUtil.isBlank(fileName)) {
-			throw new VciBaseException("鏂囦欢鍚嶄负绌�");
-		} else {
-			if (!fileName.startsWith("/")) {
-				fileName = "/" + fileName;
-			}
-
-			InputStream in = null;
-			ByteArrayOutputStream os = null;
-
-			String var3;
-			try {
-				in = LocalFileUtil.class.getResourceAsStream(fileName);
-				if (in == null) {
-					in = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
-				}
-
-				os = new ByteArrayOutputStream();
-				IOUtils.copy(in, os);
-				var3 = new String(os.toByteArray(), "UTF-8");
-			} catch (Throwable var7) {
-				throw new VciBaseException("璇诲彇鏂囦欢鐨勫唴瀹瑰嚭鐜颁簡閿欒", new String[0], var7);
-			} finally {
-				IOUtils.closeQuietly(in);
-				IOUtils.closeQuietly(os);
-			}
-
-			return var3;
-		}
-	}
-
-	public static String readContentForFile(String fileName)  {
-		File file = new File(fileName);
-		if (!file.exists()) {
-			throw new VciBaseException("鏂囦欢鏈壘鍒帮紝{0}", new String[]{fileName});
-		} else {
-			InputStream in = null;
-			ByteArrayOutputStream os = null;
-
-			String var4;
-			try {
-				in = new FileInputStream(file);
-				os = new ByteArrayOutputStream();
-				IOUtils.copy(in, os);
-				var4 = new String(os.toByteArray(), "UTF-8");
-			} catch (Throwable var8) {
-				throw new VciBaseException("璇诲彇鏂囦欢鐨勫唴瀹瑰嚭鐜颁簡閿欒", new String[0], var8);
-			} finally {
-				IOUtils.closeQuietly(in);
-				IOUtils.closeQuietly(os);
-			}
-
-			return var4;
-		}
-	}
-
-	public static void writeContentToFile(String content, String fileName)  {
-		File file = new File(fileName);
-		if (!file.exists()) {
-			File parentFile = file.getParentFile();
-			if (!parentFile.exists()) {
-				parentFile.mkdirs();
-			}
-
-			try {
-				file.createNewFile();
-			} catch (IOException var11) {
-				throw new VciBaseException("鍐欏叆鏂囦欢鐨勫唴瀹规椂鍊欏嚭鐜颁簡鍒涘缓鏂囦欢澶辫触鐨勯棶棰�,{}", new String[]{fileName}, var11);
-			}
-		}
-
-		if (content == null) {
-			content = "";
-		}
-
-		OutputStream os = null;
-
-		try {
-			os = new FileOutputStream(file);
-			os.write(content.getBytes(StandardCharsets.UTF_8));
-			os.flush();
-		} catch (Throwable var9) {
-			throw new VciBaseException("鍐欏叆鏂囦欢鐨勫唴瀹规椂鍊欏嚭鐜颁簡鍒涢敊璇�,{}", new String[]{fileName}, var9);
-		} finally {
-			IOUtils.closeQuietly(os);
-		}
-
-	}
-
-	public static void copyFileInJar(String fileInJar, String target)  {
-		VciBaseUtil.alertNotNull(new Object[]{fileInJar, "婧愭枃浠�", target, "鐩爣鏂囦欢"});
-		File targetFile = new File(target);
-		File folder = targetFile.getParentFile();
-		if (!folder.exists()) {
-			folder.mkdirs();
-		}
-
-		if (!targetFile.exists()) {
-			try {
-				targetFile.createNewFile();
-			} catch (IOException var11) {
-				throw new VciBaseException("鍒涘缓鐩爣鏂囦欢鐨勫嚭鐜颁簡閿欒", new String[0], var11);
-			}
-		}
-
-		if (!fileInJar.startsWith("/")) {
-			fileInJar = "/" + fileInJar;
-		}
-
-		InputStream in = null;
-		FileOutputStream os = null;
-
-		try {
-			in = LocalFileUtil.class.getResourceAsStream(fileInJar);
-			if (in == null) {
-				in = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileInJar);
-			}
-
-			os = new FileOutputStream(target);
-			IOUtils.copy(in, os);
-		} catch (Throwable var12) {
-			throw new VciBaseException("鎷疯礉鏂囦欢鐨勫唴瀹瑰嚭鐜颁簡閿欒.{0},{1}", new String[]{fileInJar, target}, var12);
-		} finally {
-			IOUtils.closeQuietly(in);
-			IOUtils.closeQuietly(os);
-		}
-
-	}
-
-	public static List<String> fileToPatch(Collection<File> fileList) {
-		VciBaseUtil.alertNotNull(new Object[]{"鏂囦欢鍒楄〃", fileList});
-		List<String> filePath = new ArrayList();
-		Iterator var2 = fileList.iterator();
-
-		while(var2.hasNext()) {
-			File file = (File)var2.next();
-			if (!file.exists()) {
-				throw new VciBaseException(file.getAbsolutePath() + "鏂囦欢娌℃湁鎵惧埌" + new String[0]);
-			}
-
-			filePath.add(file.getAbsolutePath());
-		}
-
-		return filePath;
-	}
-}
-
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/annotation/VciFieldType.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/annotation/VciFieldType.java
deleted file mode 100644
index 5794349..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/annotation/VciFieldType.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.annotation;
-
-import com.vci.ubcs.com.vci.starter.web.enumpck.VciFieldTypeEnum;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.FIELD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface VciFieldType {
-	VciFieldTypeEnum value() default VciFieldTypeEnum.VTString;
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/annotation/VciUseEnum.java
deleted file mode 100644
index 9bc7d06..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/annotation/VciUseEnum.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.annotation;
-
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.FIELD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface VciUseEnum {
-	String value();
-
-	String defaultValue() default "";
-
-	String showTextField();
-
-	boolean multiple() default false;
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/EnumIdConstant.java
deleted file mode 100644
index 04adb68..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/EnumIdConstant.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.constant;
-
-/**
- * 鏋氫妇鐨勪笟鍔$被鍨�
- * @author weidy
- * @dat2 2021-2-15
- */
-public class EnumIdConstant {
-
-	/**
-	 * 鐢ㄦ埛鏋氫妇
-	 */
-	public static final String USERSECRET_ENUMNAME = "usersecurityenum";
-
-	/**
-	 * 鏁版嵁鏋氫妇
-	 */
-	public static final String DATASECRET_ENUMNAME="Enumsecretgrade";
-
-	/**
-	 * IP瀵嗙骇
-	 */
-	public static final String IPSECRET_ENUMNAME = "ipsecurityenum";
-
-	/**
-	 * ip鏋氫妇鐨勪笟鍔$被鍨�
-	 */
-	public static final String IPSECRET_BTMNAME = "ipsecurity";
-
-	/**
-	 * 鐢熷懡鍛ㄦ湡浣滀负鏋氫妇鐨勫悗缂�
-	 */
-	public static final String LC_STATUS_SUBFIX = "${lcstatus}";
-
-	/**
-	 * 浠g爜鐢熸垚鐨刄I闈㈡澘绫诲瀷
-	 */
-	public static final String OS_CODE_GEN_PANEL_TYPE = "codeGenPanelType" ;
-
-	/**
-	 * 缂栫爜鐢熸垚鏂瑰紡
-	 */
-	public static final String CODE_PRODUCT_TYPE = "codeProductType";
-
-	/**
-	 * 缂栫爜鐨勫厓绱犵被鍨�
-	 */
-	public static final String CODE_ELEMENT_TYPE = "codeElementType";
-
-	/**
-	 * 缂栫爜琛ヤ綅鏂瑰紡
-	 */
-	public static final String CODE_FILL_TYPE = "codeFillType";
-
-	/**
-	 * 缂栫爜鐨勬椂闂村彇鍊肩被鍨�
-	 */
-	public static final String CODE_DATE_VALUE_TYPE = "codeDateValueType";
-
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/MdmEnumIdConstant.java
deleted file mode 100644
index c092c99..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/MdmEnumIdConstant.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.constant;
-
-/**
- * 涓绘暟鎹殑鏋氫妇鍚嶇О
- */
-public class MdmEnumIdConstant {
-
-	/**
-	 * 鎸夐挳鐨勪娇鐢ㄤ綅缃�
-	 */
-	public static final String CODE_BUTTON_POSITION = "codeButtonPosition" ;
-
-	/**
-	 * 鐮佹闀垮害绫诲瀷
-	 */
-	public static final String CODE_SEC_LENGTH = "codeSecLength";
-	/**
-	 * 鏃ユ湡鏍煎紡
-	 */
-	public static final String CODE_DATA_FORMAT = "codeDateFormatEnum";
-	/**
-	 * 灞傜骇鐮佹鐨勫眰绾х被鍨�
-	 */
-	public static final String CODE_LEVEL_TYPE = "codeLevelType";
-	/**
-	 * 瀛楃鎴彇绫诲瀷
-	 */
-	public static final String CODE_CUT_TYPE = "codeCutType";
-	/**
-	 * 缂栫爜鍙栧�肩被鍨�
-	 */
-	public static final String CODE_GET_VALUE_TYPE = "codeGetValueType";
-	/**
-	 * 涓婚搴撳垎绫荤殑娴佺▼鐢ㄩ��
-	 */
-	public static final String CODE_CLASSIFY_PROCESS_USE = "codeClassifyProcessUse";
-	/**
-	 * 缂栫爜鏄犲皠瑙勫垯绫诲瀷
-	 */
-	public static final String CODE_MAP_RULE_TYPE = "codeMapRuleType";
-	/**
-	 * 鐮佹绫诲瀷
-	 */
-	public static final String CODE_SEC_TYPE = "codeSecType";
-	/**
-	 * 鎸夐挳鐨勭敤閫�
-	 */
-	public static final String CODE_TEMPLATE_BUTTON_USE = "codeTemplateButtonUse";
-
-	/**
-	 * 绯荤粺闆嗘垚鎺ュ彛绫诲瀷
-	 */
-	public static final String SYS_INTEGRATION_REQUEST_TYPE = "sysIntegrationRequestType";
-
-	/**
-	 * 绯荤粺闆嗘垚鎺ュ彛璇锋眰鏂瑰紡绫诲瀷
-	 */
-	public static final String SYS_INTEGRATION_REQUEST_METHOD_TYPE = "sysIntegrationRequestMethodType";
-
-	/**
-	 * 绯荤粺闆嗘垚鎺ュ彛璇锋眰鏂瑰紡绫诲瀷
-	 */
-	public static final String SYS_INTEGRATION_PARAM_AND_RETURN_TYPE = "sysIntegrationParamAndReturnType";
-
-	/**
-	 * 绯荤粺闆嗘垚楠岃瘉鏂瑰紡
-	 */
-	public static final String SYS_INTEGRATION_AUTHORITY_TYPE = "sysIntegrationAuthorityType";
-
-	/**
-	 * 鏁版嵁娴佸悜鏂瑰紡
-	 */
-	public static final String SYS_INTEGRATION_DATA_FLOW_TYPE = "sysIntegrationDataFlowType";
-	/***
-	 * 绯荤粺鎺ュ彛鎺ㄩ�佹柟寮�
-	 */
-	public static  final  String SYS_INTEGRATION_PUSH_TYPE="sysIntegrationPushType";
-
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/QueryOptionConstant.java
deleted file mode 100644
index e177a0b..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/constant/QueryOptionConstant.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.constant;
-
-
-public class QueryOptionConstant {
-	public static final String IN = "\\IN";
-	public static final String NOTIN = "\\NOTIN";
-	public static final String NOTEQUAL = "!=";
-	public static final String MORE = ">";
-	public static final String MORETHAN = ">=";
-	public static final String LESS = "<";
-	public static final String LESSTHAN = "<=";
-	public static final String OR = "\\OR";
-	public static final String ISNULL = "=null";
-	public static final String ISNOTNULL = "!=null";
-	public static final String EQUAL = "=";
-	public static final String AND = "and";
-	public static final String NO_OR_AND = "${no_or_and}";
-
-	public QueryOptionConstant() {
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/BaseEnumInt.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/BaseEnumInt.java
deleted file mode 100644
index a1a86e7..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/BaseEnumInt.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.enumpck;
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//package com.vci.starter.web.enumpck;
-
-public interface BaseEnumInt {
-
-	int 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/OsCodeFillTypeEnum.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/OsCodeFillTypeEnum.java
deleted file mode 100644
index d01cb6a..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/OsCodeFillTypeEnum.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.enumpck;
-
-//package com.vci.web.enumpck;
-
-
-/**
- * 缂栫爜鐨勮ˉ浣嶆柟寮�
- * @author weidy
- * @date 2020/3/28
- */
-//@VciEnum(name = EnumIdConstant.CODE_FILL_TYPE,text = "缂栫爜琛ヤ綅鏂瑰紡",description = "涓嶈ˉ浣嶏紝锛屽彸琛ヤ綅")
-public enum OsCodeFillTypeEnum implements BaseEnum {
-
-	/**
-	 * 涓嶈ˉ浣�
-	 */
-	NONE("code_fill_none","涓嶈ˉ浣�"),
-
-	/**
-	 * 宸﹁ˉ浣�
-	 */
-	LEFT("code_fill_left","宸﹁ˉ浣�"),
-
-	/**
-	 * 鍙宠ˉ浣�
-	 */
-	RIGHT("code_fill_right","鍙宠ˉ浣�");
-
-	/**
-	 * 鏋氫妇鐨勫��
-	 */
-	private String value;
-
-	/**
-	 * 鏋氫妇鏄剧ず鏂囨湰
-	 */
-	private String text;
-
-	/**
-	 * 鑾峰彇鏋氫妇鍊�
-	 *
-	 * @return 鏋氫妇鍊�
-	 */
-	@Override
-	public String getValue() {
-		return value;
-	}
-
-	/**
-	 * 璁剧疆鏋氫妇鍊�
-	 *
-	 * @param value 鏋氫妇鍊�
-	 */
-	public void setValue(String value) {
-		this.value = value;
-	}
-
-	/**
-	 * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
-	 *
-	 * @return 鏄剧ず鏂囨湰
-	 */
-	@Override
-	public String getText() {
-		return text;
-	}
-
-	/**
-	 * 璁剧疆鏄剧ず鏂囨湰
-	 *
-	 * @param text 鏄剧ず鏂囨湰
-	 */
-	public void setText(String text) {
-		this.text = text;
-	}
-
-	/**
-	 * 鏋勯�犲嚱鏁�
-	 *
-	 * @param value 鍊�
-	 * @param text  鏄剧ず鏂囨湰
-	 */
-	private OsCodeFillTypeEnum(String value, String text) {
-		this.value = value;
-		this.text = text;
-	}
-
-	/**
-	 * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
-	 *
-	 * @param text 鍚嶇О
-	 * @return 鏋氫妇鍊�
-	 */
-	public static String getValueByText(String text) {
-		for (OsCodeFillTypeEnum wenum : OsCodeFillTypeEnum.values()) {
-			if (wenum.getText().equalsIgnoreCase(text)) {
-				return wenum.getValue();
-			}
-		}
-		return "";
-	}
-
-	/**
-	 * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
-	 *
-	 * @param value 鏋氫妇鍊�
-	 * @return 鍚嶇О
-	 */
-	public static String getTextByValue(String value) {
-		for (OsCodeFillTypeEnum wenum : OsCodeFillTypeEnum.values()) {
-			if (wenum.getValue().equalsIgnoreCase(value)) {
-				return wenum.getText();
-			}
-		}
-		return "";
-	}
-
-	/**
-	 * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
-	 *
-	 * @param value 鏋氫妇鍊�
-	 * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
-	 */
-	public static OsCodeFillTypeEnum forValue(String value) {
-		for (OsCodeFillTypeEnum wenum : OsCodeFillTypeEnum.values()) {
-			if (wenum.getValue().equalsIgnoreCase(value)) {
-				return wenum;
-			}
-		}
-		return null;
-	}
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/UserSecretEnum.java
deleted file mode 100644
index c9cccee..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/UserSecretEnum.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.enumpck;
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//package com.vci.starter.web.enumpck;
-
-//import com.vci.starter.web.annotation.VciEnum;
-
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-
-@VciEnum(
-	name = "usersecurityenum",
-	text = "浜哄憳瀵嗙骇",
-	description = "鐢ㄦ埛锛屼汉鍛樼殑瀵嗙骇"
-)
-public enum UserSecretEnum implements BaseEnumInt {
-	NONE(10, "鍐呴儴"),
-	SECRET(20, "涓�鑸�"),
-	PRIVACY(30, "閲嶈");
-
-	private int value;
-	private String text;
-
-	@Override
-	public int getValue() {
-		return this.value;
-	}
-
-	public void setValue(int value) {
-		this.value = value;
-	}
-
-	@Override
-	public String getText() {
-		return this.text;
-	}
-
-	public void setText(String text) {
-		this.text = text;
-	}
-
-	private UserSecretEnum(int secret, String secretText) {
-		this.value = secret;
-		this.text = secretText;
-	}
-
-	public static String getSecretText(int secret) {
-		UserSecretEnum[] var1 = values();
-		int var2 = var1.length;
-
-		for(int var3 = 0; var3 < var2; ++var3) {
-			UserSecretEnum eu = var1[var3];
-			if (eu.value == secret) {
-				return eu.text;
-			}
-		}
-
-		return NONE.text;
-	}
-
-	public static boolean isValid(int secret) {
-		UserSecretEnum[] var1 = values();
-		int var2 = var1.length;
-
-		for(int var3 = 0; var3 < var2; ++var3) {
-			UserSecretEnum eu = var1[var3];
-			if (eu.value == secret) {
-				return true;
-			}
-		}
-
-		return false;
-	}
-
-	public static int getSecretValueByText(String text) {
-		UserSecretEnum[] var1 = values();
-		int var2 = var1.length;
-
-		for(int var3 = 0; var3 < var2; ++var3) {
-			UserSecretEnum eu = var1[var3];
-			if (eu.text.equalsIgnoreCase(text)) {
-				return eu.value;
-			}
-		}
-
-		return NONE.value;
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/VciFieldTypeEnum.java
deleted file mode 100644
index 2d549ac..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/enumpck/VciFieldTypeEnum.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.enumpck;
-
-
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-
-@VciEnum(
-	name = "VciFieldType",
-	text = "灞炴�х被鍨�"
-)
-public enum VciFieldTypeEnum {
-	VTString,
-	VTInteger,
-	VTLong,
-	VTDouble,
-	VTBoolean,
-	VTDate,
-	VTDateTime,
-	VTTime,
-	VTFilePath,
-	VTClob;
-
-	private VciFieldTypeEnum() {
-	}
-
-	public static String getValueByText(String text) {
-		if (text != null && text.trim().length() != 0) {
-			if ("甯冨皵鍨�".equalsIgnoreCase(text)) {
-				return VTBoolean.name();
-			} else if ("闀挎枃鏈�".equalsIgnoreCase(text)) {
-				return VTClob.name();
-			} else if ("鏃ユ湡".equalsIgnoreCase(text)) {
-				return VTDate.name();
-			} else if ("鏃ユ湡鏃堕棿".equalsIgnoreCase(text)) {
-				return VTDateTime.name();
-			} else if ("鏃堕棿".equalsIgnoreCase(text)) {
-				return VTTime.name();
-			} else if ("闀挎暣鍨�".equalsIgnoreCase(text)) {
-				return VTLong.name();
-			} else if ("閲戦/鍙岀簿搴�".equalsIgnoreCase(text)) {
-				return VTDouble.name();
-			} else if ("鏁村舰".equalsIgnoreCase(text)) {
-				return VTInteger.name();
-			} else {
-				return "鏂囦欢".equalsIgnoreCase(text) ? VTFilePath.name() : VTString.name();
-			}
-		} else {
-			return "";
-		}
-	}
-
-	public static String getTextByValue(String value) {
-		VciFieldTypeEnum wenum = forValue(value);
-		if (wenum == null) {
-			return "";
-		} else {
-			switch (wenum) {
-				case VTBoolean:
-					return "甯冨皵鍨�";
-				case VTClob:
-					return "闀挎枃鏈�";
-				case VTDate:
-					return "鏃ユ湡";
-				case VTDateTime:
-					return "鏃ユ湡鏃堕棿";
-				case VTTime:
-					return "鏃堕棿";
-				case VTLong:
-					return "闀挎暣鍨�";
-				case VTDouble:
-					return "閲戦/鍙岀簿搴�";
-				case VTInteger:
-					return "鏁村舰";
-				case VTFilePath:
-					return "鏂囦欢";
-				default:
-					return "瀛楃涓�";
-			}
-		}
-	}
-
-	public static VciFieldTypeEnum forValue(String value) {
-		VciFieldTypeEnum[] var1 = values();
-		int var2 = var1.length;
-
-		for(int var3 = 0; var3 < var2; ++var3) {
-			VciFieldTypeEnum wenum = var1[var3];
-			if (wenum.name().equalsIgnoreCase(value)) {
-				return wenum;
-			}
-		}
-
-		return null;
-	}
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/BaseQueryObject.java
deleted file mode 100644
index 96202dd..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/BaseQueryObject.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//package com.vci.starter.web.pagemodel;
-
-import com.alibaba.fastjson.annotation.JSONField;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-public class BaseQueryObject implements Serializable {
-	@JSONField(
-		serialize = false,
-		deserialize = false
-	)
-	private static final long serialVersionUID = 5608634730007623041L;
-	@JSONField
-	private Map<String, String> conditionMap = new HashMap();
-	@JSONField
-	private int page = 1;
-	@JSONField
-	private String sort;
-	@JSONField
-	private String order;
-	@JSONField
-	private int limit = 25;
-
-	public BaseQueryObject() {
-	}
-
-	public BaseQueryObject(Map<String, String> conditionMap) {
-		this.setConditionMap(conditionMap);
-	}
-
-	public BaseQueryObject(int limit) {
-		this.setLimit(limit);
-	}
-
-	public BaseQueryObject(Map<String, String> conditionMap, int limit) {
-		this.setConditionMap(conditionMap);
-		this.setLimit(limit);
-	}
-
-	public Map<String, String> getConditionMap() {
-		return this.conditionMap;
-	}
-
-	public Map<String, String> getConditionMapByNick(String nick) {
-		if (this.conditionMap != null) {
-			Map<String, String> conditionMapHasNick = new HashMap();
-			this.conditionMap.forEach((k, v) -> {
-				if (!k.contains(".")) {
-					conditionMapHasNick.put(nick + "." + k, v);
-				} else {
-					conditionMapHasNick.put(k, v);
-				}
-
-			});
-			return conditionMapHasNick;
-		} else {
-			return null;
-		}
-	}
-
-	public void setConditionMap(Map<String, String> conditionMap) {
-		this.conditionMap = conditionMap;
-	}
-
-	public int getPage() {
-		return this.page;
-	}
-
-	public void setPage(int page) {
-		this.page = page;
-	}
-
-	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 int getLimit() {
-		return this.limit;
-	}
-
-	public void setLimit(int limit) {
-		this.limit = limit;
-	}
-
-	@JSONField(
-		serialize = false,
-		deserialize = false
-	)
-	public PageHelper getPageHelper() {
-		PageHelper pageHelper = new PageHelper(this.limit);
-		pageHelper.setPage(this.getPage());
-		pageHelper.setSort(this.getSort());
-		pageHelper.setOrder(this.getOrder());
-		return pageHelper;
-	}
-
-	public BaseQueryObject addSort(String sort, String order) {
-		this.setSort(StringUtils.isBlank(this.getSort()) ? sort : this.getSort() + "," + sort);
-		this.setOrder(StringUtils.isBlank(this.getOrder()) ? order : this.getOrder() + "," + order);
-		return this;
-	}
-
-	public BaseQueryObject addCondition(String key, String value) {
-		if (this.getConditionMap() == null) {
-			this.conditionMap = new HashMap();
-		}
-
-		this.conditionMap.put(key, value);
-		return this;
-	}
-
-	public BaseQueryObject page(PageHelper pageHelper) {
-		this.setSort(pageHelper.getSort());
-		this.setOrder(pageHelper.getOrder());
-		this.setPage(pageHelper.getPage());
-		this.setLimit(pageHelper.getLimit());
-		return this;
-	}
-
-	@JSONField(
-		serialize = false,
-		deserialize = false
-	)
-	public Map<String, String> getFeignRequestMap() {
-		Map<String, String> feignRequestMap = new HashMap();
-		if (this.conditionMap != null) {
-			this.getConditionMap().forEach((k, v) -> {
-				feignRequestMap.put("conditionMap[\"" + k + "\"]", v);
-			});
-		}
-
-		feignRequestMap.put("page", this.getPage() + "");
-		feignRequestMap.put("limit", this.getLimit() + "");
-		feignRequestMap.put("sort", this.getSort());
-		feignRequestMap.put("order", this.getOrder());
-		return feignRequestMap;
-	}
-
-	@Override
-	public String toString() {
-		return "BaseQueryObject{conditionMap=" + this.conditionMap + ", page=" + this.page + ", sort='" + this.sort + '\'' + ", order='" + this.order + '\'' + ", limit=" + this.limit + '}';
-	}
-
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/DataGrid.java
deleted file mode 100644
index f12e362..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/DataGrid.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
-
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-public class DataGrid<T> implements Serializable {
-	private static final long serialVersionUID = -5909212697362510055L;
-	private long total = 0L;
-	private List<T> data = new ArrayList();
-	private int start;
-	private int limit;
-	private int page;
-	private String sort;
-	private String order;
-	private String msg;
-	private int code = 0;
-	private String traceId;
-
-	public DataGrid() {
-	}
-
-	public DataGrid(String msg) {
-		this.msg = msg;
-		this.code = 1;
-	}
-
-	public long getTotal() {
-		return this.total;
-	}
-
-	public void setTotal(long total) {
-		this.total = total;
-	}
-
-	public List<T> getData() {
-		return this.data;
-	}
-
-	public void setData(List<T> data) {
-		this.data = data;
-	}
-
-	public int getStart() {
-		return this.start;
-	}
-
-	public void setStart(int start) {
-		this.start = start;
-	}
-
-	public int getLimit() {
-		return this.limit;
-	}
-
-	public void setLimit(int limit) {
-		this.limit = limit;
-	}
-
-	public int getPage() {
-		return this.page;
-	}
-
-	public void setPage(int page) {
-		this.page = page;
-	}
-
-	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 getMsg() {
-		return this.msg;
-	}
-
-	public void setMsg(String msg) {
-		this.msg = msg;
-	}
-
-	public int getCode() {
-		return this.code;
-	}
-
-	public void setCode(int code) {
-		this.code = code;
-	}
-
-	public String getTraceId() {
-		return this.traceId;
-	}
-
-	public void setTraceId(String traceId) {
-		this.traceId = traceId;
-	}
-
-	public String toString() {
-		return "DataGrid{total=" + this.total + ", data=" + this.data + ", start=" + this.start + ", limit=" + this.limit + ", page=" + this.page + ", sort='" + this.sort + '\'' + ", order='" + this.order + '\'' + ", msg='" + this.msg + '\'' + ", code=" + this.code + ", traceId='" + this.traceId + '\'' + '}';
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/KeyValue.java
deleted file mode 100644
index 9762267..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/KeyValue.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
-
-//package com.vci.starter.web.pagemodel;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-public class KeyValue implements Serializable {
-	private static final long serialVersionUID = 7708882804529442626L;
-	private String key;
-	private String value;
-	private Map<String, Object> attributes = new HashMap();
-
-	public KeyValue() {
-
-	}
-
-	public String getKey() {
-		return this.key;
-	}
-
-	public void setKey(String key) {
-		this.key = key;
-	}
-
-	public String getValue() {
-		return this.value;
-	}
-
-	public void setValue(String value) {
-		this.value = value;
-	}
-
-	public Map<String, Object> getAttributes() {
-		return this.attributes;
-	}
-
-	public void setAttributes(Map<String, Object> attributes) {
-		this.attributes = attributes;
-	}
-
-	public void addAttr(String attr, Object attrValue) {
-		this.attributes.put(attr, attrValue);
-	}
-
-	@Override
-	public String toString() {
-		return "KeyValue{key='" + this.key + '\'' + ", value='" + this.value + '\'' + ", attributes=" + this.attributes + '}';
-	}
-
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/PageHelper.java
deleted file mode 100644
index 12c46dc..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/PageHelper.java
+++ /dev/null
@@ -1,239 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
-
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//package com.vci.starter.web.pagemodel;
-
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-
-public class PageHelper implements Serializable {
-	private static final long serialVersionUID = -588765760880887850L;
-	private int page;
-	private String sort;
-	private String order;
-	private int start = 0;
-	private int limit = 25;
-	private boolean queryTotal = true;
-	private String ordersql;
-	private String nick;
-	public final String asc = "asc";
-	public final String desc = "desc";
-	private Set<String> unNickField = new HashSet();
-
-	public PageHelper() {
-	}
-
-	public PageHelper(int limit) {
-		this.limit = limit;
-		this.page = 1;
-	}
-
-	public PageHelper(int limit, boolean queryTotal) {
-		this.limit = limit;
-		this.queryTotal = queryTotal;
-	}
-
-	public PageHelper(String sort) {
-		this.sort = sort;
-		this.limit = -1;
-		this.order = "asc";
-	}
-
-	public PageHelper(String sort, String order) {
-		this.sort = sort;
-		this.limit = -1;
-		this.order = order;
-	}
-
-	public PageHelper(int limit, String sort, String order) {
-		this.limit = limit;
-		this.sort = sort;
-		this.order = order;
-	}
-
-	public PageHelper(int limit, int page, String sort, String order) {
-		this.limit = limit;
-		this.page = page;
-		this.sort = sort;
-		this.order = order;
-	}
-
-	public int getPage() {
-		return this.page;
-	}
-
-	public void setPage(int page) {
-		this.page = page;
-		if (page > 0 && this.limit > 0) {
-			this.start = (this.page - 1) * this.limit;
-		}
-
-	}
-
-	public void setSort(String sort) {
-		this.sort = sort;
-	}
-
-	public String getOrder() {
-		return this.order;
-	}
-
-	public void setOrder(String order) {
-		this.order = order;
-	}
-
-	public int getStart() {
-		return this.limit <= 0 ? 0 : (this.page - 1) * this.limit + 1;
-	}
-
-	public boolean isQueryTotal() {
-		return this.queryTotal;
-	}
-
-	public void setQueryTotal(boolean queryTotal) {
-		this.queryTotal = queryTotal;
-	}
-
-	public int getLimit() {
-		return this.limit;
-	}
-
-	public void setLimit(int limit) {
-		this.limit = limit;
-		if (this.page > 0 && this.limit > 0) {
-			this.start = (this.page - 1) * this.limit + 1;
-		}
-
-	}
-
-	public void addSort(String sort, String order) {
-		this.setSort(StringUtils.isBlank(this.getSort()) ? sort : this.getSort() + "," + sort);
-		this.setOrder(StringUtils.isBlank(this.getOrder()) ? order : this.getOrder() + "," + order);
-	}
-
-	public void addAsc(String field) {
-		this.addSort(field, "asc");
-	}
-
-	public void addDefaultAsc(String field) {
-		if (StringUtils.isBlank(this.getSort()) && StringUtils.isBlank(this.getOrder())) {
-			this.addAsc(field);
-		}
-
-	}
-
-	public void addDefaultDesc(String field) {
-		if (StringUtils.isBlank(this.getSort()) && StringUtils.isBlank(this.getOrder())) {
-			this.addDesc(field);
-		}
-
-	}
-
-	public void addDesc(String field) {
-		this.addSort(field, "desc");
-	}
-
-	public String getSort() {
-		return this.sort;
-	}
-
-	public void setStart(int start) {
-		this.start = start;
-	}
-
-	public String getOrdersql() {
-		if ((this.ordersql == null || this.ordersql.trim().length() == 0) && this.sort != null && this.sort.trim().length() > 0 && this.order != null && this.order.trim().length() > 0) {
-			if (this.sort.indexOf(",") > -1) {
-				String[] sortArray = this.sort.split(",");
-				String[] orderArray = this.order.split(",");
-				StringBuilder sb = new StringBuilder();
-
-				for(int i = 0; i < sortArray.length; ++i) {
-					if (StringUtils.isNotBlank(sortArray[i]) && orderArray.length > i && StringUtils.isNotBlank(orderArray[i])) {
-						if (sortArray[i].indexOf(".") < 0 && !this.unNickField.contains(sortArray[i].toLowerCase())) {
-							sb.append(StringUtils.isBlank(this.getNick()) ? "" : this.getNick() + ".");
-						}
-
-						sb.append(sortArray[i].toLowerCase());
-						sb.append(" ");
-						sb.append(orderArray[i]);
-						sb.append(",");
-					}
-				}
-
-				this.ordersql = " order by " + sb.toString();
-				if (this.ordersql.endsWith(",")) {
-					this.ordersql = this.ordersql.substring(0, this.ordersql.length() - 1);
-				}
-			} else {
-				this.ordersql = " order by " + this.sort + " " + this.order;
-			}
-		}
-
-		return this.ordersql;
-	}
-
-	public String getOrderSql(String nick) {
-		if ((this.ordersql == null || this.ordersql.trim().length() == 0) && this.sort != null && this.sort.trim().length() > 0 && this.order != null && this.order.trim().length() > 0) {
-			if (this.sort.indexOf(",") > -1) {
-				String[] sortArray = this.sort.split(",");
-				String[] orderArray = this.order.split(",");
-				StringBuilder sb = new StringBuilder();
-
-				for(int i = 0; i < sortArray.length; ++i) {
-					if (StringUtils.isNotBlank(sortArray[i]) && orderArray.length > i && StringUtils.isNotBlank(orderArray[i])) {
-						if (sortArray[i].indexOf(".") < 0) {
-							sb.append(StringUtils.isBlank(nick) ? "" : nick + ".");
-						}
-
-						sb.append(sortArray[i].toLowerCase());
-						sb.append(" ");
-						sb.append(orderArray[i]);
-						sb.append(",");
-					}
-				}
-
-				this.ordersql = " order by " + sb.toString();
-				if (this.ordersql.endsWith(",")) {
-					this.ordersql = this.ordersql.substring(0, this.ordersql.length() - 1);
-				}
-			} else {
-				this.ordersql = " order by " + nick + "." + this.sort + " " + this.order;
-			}
-		}
-
-		return this.ordersql;
-	}
-
-	public String getNick() {
-		return this.nick;
-	}
-
-	public void setNick(String nick) {
-		this.nick = nick;
-	}
-
-	public void setOrdersql(String ordersql) {
-		this.ordersql = ordersql;
-	}
-
-	@Override
-	public String toString() {
-		return "PageHelper{page=" + this.page + ", sort='" + this.sort + '\'' + ", order='" + this.order + '\'' + ", start=" + this.start + ", limit=" + this.limit + ", queryTotal=" + this.queryTotal + ", ordersql='" + this.ordersql + '\'' + ", nick='" + this.nick + '\'' + ", asc='" + "asc" + '\'' + ", desc='" + "desc" + '\'' + ", unNickField=" + this.unNickField + '}';
-	}
-
-	public Set<String> getUnNickField() {
-		return this.unNickField;
-	}
-
-	public void setUnNickField(Set<String> unNickField) {
-		this.unNickField = unNickField;
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/SessionInfo.java
deleted file mode 100644
index 375417d..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/SessionInfo.java
+++ /dev/null
@@ -1,421 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
-
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//package com.vci.starter.web.pagemodel;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class SessionInfo implements Serializable {
-	private static final long serialVersionUID = 7950268190988911233L;
-	private String orgsOid;
-	private String orgsName;
-	private String deptOid;
-	private String deptName;
-	private String userOid;
-	private String userId;
-	private String userName;
-	private String personOid;
-	private String personId;
-	private String personName;
-	private String dutyOid;
-	private String dutyName;
-	private String workgroupOid;
-	private String workgroupName;
-	private String workTypeOid;
-	private String workTypeName;
-	private String usertype;
-	private String usertypeText;
-	private String sex;
-	private String sexText;
-	private Map<String, String> rolesName;
-	private List<String> functionOids;
-	private String photoUrl;
-	private String ip;
-	private String language;
-	private String userSecret;
-	private String userSecretText;
-	private String ipSecret;
-	private String ipSecretText;
-	private String machine;
-	private String os;
-	private String browser;
-	private String osUser;
-	private List<String> deviceInfo = new ArrayList();
-	private String email;
-	private String phoneNo;
-	private String rtxNo;
-	private String portalId;
-	private String IMId;
-	private boolean sso;
-	private String ssoServiceName;
-	private String token;
-	private Map<String, String> globalAttributeMap = new HashMap();
-	private String workNo;
-
-	public SessionInfo() {
-	}
-
-	public String getDutyOid() {
-		return this.dutyOid;
-	}
-
-	public void setDutyOid(String dutyOid) {
-		this.dutyOid = dutyOid;
-	}
-
-	public String getDutyName() {
-		return this.dutyName;
-	}
-
-	public void setDutyName(String dutyName) {
-		this.dutyName = dutyName;
-	}
-
-	public String getOrgsOid() {
-		return this.orgsOid;
-	}
-
-	public void setOrgsOid(String orgsOid) {
-		this.orgsOid = orgsOid;
-	}
-
-	public String getOrgsName() {
-		return this.orgsName;
-	}
-
-	public void setOrgsName(String orgsName) {
-		this.orgsName = orgsName;
-	}
-
-	public String getDeptOid() {
-		return this.deptOid;
-	}
-
-	public void setDeptOid(String deptOid) {
-		this.deptOid = deptOid;
-	}
-
-	public String getDeptName() {
-		return this.deptName;
-	}
-
-	public void setDeptName(String deptName) {
-		this.deptName = deptName;
-	}
-
-	public String getUserOid() {
-		return this.userOid;
-	}
-
-	public void setUserOid(String userOid) {
-		this.userOid = userOid;
-	}
-
-	public String getUserId() {
-		return this.userId;
-	}
-
-	public void setUserId(String userId) {
-		this.userId = userId;
-	}
-
-	public String getUserName() {
-		return this.userName;
-	}
-
-	public void setUserName(String userName) {
-		this.userName = userName;
-	}
-
-	public String getPersonOid() {
-		return this.personOid;
-	}
-
-	public void setPersonOid(String personOid) {
-		this.personOid = personOid;
-	}
-
-	public String getPersonName() {
-		return this.personName;
-	}
-
-	public void setPersonName(String personName) {
-		this.personName = personName;
-	}
-
-	public String getWorkgroupOid() {
-		return this.workgroupOid;
-	}
-
-	public void setWorkgroupOid(String workgroupOid) {
-		this.workgroupOid = workgroupOid;
-	}
-
-	public String getWorkgroupName() {
-		return this.workgroupName;
-	}
-
-	public void setWorkgroupName(String workgroupName) {
-		this.workgroupName = workgroupName;
-	}
-
-	public String getUsertype() {
-		return this.usertype;
-	}
-
-	public void setUsertype(String usertype) {
-		this.usertype = usertype;
-	}
-
-	public String getUsertypeText() {
-		return this.usertypeText;
-	}
-
-	public void setUsertypeText(String usertypeText) {
-		this.usertypeText = usertypeText;
-	}
-
-	public String getSex() {
-		return this.sex;
-	}
-
-	public void setSex(String sex) {
-		this.sex = sex;
-	}
-
-	public List<String> getFunctionOids() {
-		return this.functionOids;
-	}
-
-	public void setFunctionOids(List<String> functionOids) {
-		this.functionOids = functionOids;
-	}
-
-	public String getPhotoUrl() {
-		return this.photoUrl;
-	}
-
-	public void setPhotoUrl(String photoUrl) {
-		this.photoUrl = photoUrl;
-	}
-
-	public String getIp() {
-		return this.ip;
-	}
-
-	public void setIp(String ip) {
-		this.ip = ip;
-	}
-
-	public String getLanguage() {
-		return this.language;
-	}
-
-	public void setLanguage(String language) {
-		this.language = language;
-	}
-
-	public String getUserSecret() {
-		return this.userSecret;
-	}
-
-	public void setUserSecret(String userSecret) {
-		this.userSecret = userSecret;
-	}
-
-	public String getUserSecretText() {
-		return this.userSecretText;
-	}
-
-	public void setUserSecretText(String userSecretText) {
-		this.userSecretText = userSecretText;
-	}
-
-	public String getIpSecret() {
-		return this.ipSecret;
-	}
-
-	public void setIpSecret(String ipSecret) {
-		this.ipSecret = ipSecret;
-	}
-
-	public String getIpSecretText() {
-		return this.ipSecretText;
-	}
-
-	public void setIpSecretText(String ipSecretText) {
-		this.ipSecretText = ipSecretText;
-	}
-
-	public String getMachine() {
-		return this.machine;
-	}
-
-	public void setMachine(String machine) {
-		this.machine = machine;
-	}
-
-	public String getOs() {
-		return this.os;
-	}
-
-	public void setOs(String os) {
-		this.os = os;
-	}
-
-	public String getBrowser() {
-		return this.browser;
-	}
-
-	public void setBrowser(String browser) {
-		this.browser = browser;
-	}
-
-	public String getOsUser() {
-		return this.osUser;
-	}
-
-	public void setOsUser(String osUser) {
-		this.osUser = osUser;
-	}
-
-	public List<String> getDeviceInfo() {
-		return this.deviceInfo;
-	}
-
-	public void setDeviceInfo(List<String> deviceInfo) {
-		this.deviceInfo = deviceInfo;
-	}
-
-	public String getEmail() {
-		return this.email;
-	}
-
-	public void setEmail(String email) {
-		this.email = email;
-	}
-
-	public String getPhoneNo() {
-		return this.phoneNo;
-	}
-
-	public void setPhoneNo(String phoneNo) {
-		this.phoneNo = phoneNo;
-	}
-
-	public String getRtxNo() {
-		return this.rtxNo;
-	}
-
-	public void setRtxNo(String rtxNo) {
-		this.rtxNo = rtxNo;
-	}
-
-	public String getPortalId() {
-		return this.portalId;
-	}
-
-	public void setPortalId(String portalId) {
-		this.portalId = portalId;
-	}
-
-	public String getIMId() {
-		return this.IMId;
-	}
-
-	public void setIMId(String IMId) {
-		this.IMId = IMId;
-	}
-
-	public boolean isSso() {
-		return this.sso;
-	}
-
-	public void setSso(boolean sso) {
-		this.sso = sso;
-	}
-
-	public String getSsoServiceName() {
-		return this.ssoServiceName;
-	}
-
-	public void setSsoServiceName(String ssoServiceName) {
-		this.ssoServiceName = ssoServiceName;
-	}
-
-	public String getToken() {
-		return this.token;
-	}
-
-	public void setToken(String token) {
-		this.token = token;
-	}
-
-	public Map<String, String> getGlobalAttributeMap() {
-		return this.globalAttributeMap;
-	}
-
-	public void setGlobalAttributeMap(Map<String, String> globalAttributeMap) {
-		this.globalAttributeMap = globalAttributeMap;
-	}
-
-	public String getPersonId() {
-		return this.personId;
-	}
-
-	public void setPersonId(String personId) {
-		this.personId = personId;
-	}
-
-	public String getSexText() {
-		return this.sexText;
-	}
-
-	public void setSexText(String sexText) {
-		this.sexText = sexText;
-	}
-
-	public Map<String, String> getRolesName() {
-		return this.rolesName;
-	}
-
-	public void setRolesName(Map<String, String> rolesName) {
-		this.rolesName = rolesName;
-	}
-
-	public String getWorkNo() {
-		return this.workNo;
-	}
-
-	public void setWorkNo(String workNo) {
-		this.workNo = workNo;
-	}
-
-	public String getWorkTypeOid() {
-		return this.workTypeOid;
-	}
-
-	public void setWorkTypeOid(String workTypeOid) {
-		this.workTypeOid = workTypeOid;
-	}
-
-	public String getWorkTypeName() {
-		return this.workTypeName;
-	}
-
-	public void setWorkTypeName(String workTypeName) {
-		this.workTypeName = workTypeName;
-	}
-
-	public String toString() {
-		return "SessionInfo{orgsOid='" + this.orgsOid + '\'' + ", orgsName='" + this.orgsName + '\'' + ", deptOid='" + this.deptOid + '\'' + ", deptName='" + this.deptName + '\'' + ", userOid='" + this.userOid + '\'' + ", userId='" + this.userId + '\'' + ", userName='" + this.userName + '\'' + ", personOid='" + this.personOid + '\'' + ", personId='" + this.personId + '\'' + ", personName='" + this.personName + '\'' + ", dutyOid='" + this.dutyOid + '\'' + ", dutyName='" + this.dutyName + '\'' + ", workgroupOid='" + this.workgroupOid + '\'' + ", workgroupName='" + this.workgroupName + '\'' + ", workTypeOid='" + this.workTypeOid + '\'' + ", workTypeName='" + this.workTypeName + '\'' + ", usertype='" + this.usertype + '\'' + ", usertypeText='" + this.usertypeText + '\'' + ", sex='" + this.sex + '\'' + ", sexText='" + this.sexText + '\'' + ", rolesName=" + this.rolesName + ", functionOids=" + this.functionOids + ", photoUrl='" + this.photoUrl + '\'' + ", ip='" + this.ip + '\'' + ", language='" + this.language + '\'' + ", userSecret='" + this.userSecret + '\'' + ", userSecretText='" + this.userSecretText + '\'' + ", ipSecret='" + this.ipSecret + '\'' + ", ipSecretText='" + this.ipSecretText + '\'' + ", machine='" + this.machine + '\'' + ", os='" + this.os + '\'' + ", browser='" + this.browser + '\'' + ", osUser='" + this.osUser + '\'' + ", deviceInfo=" + this.deviceInfo + ", email='" + this.email + '\'' + ", phoneNo='" + this.phoneNo + '\'' + ", rtxNo='" + this.rtxNo + '\'' + ", portalId='" + this.portalId + '\'' + ", IMId='" + this.IMId + '\'' + ", sso=" + this.sso + ", ssoServiceName='" + this.ssoServiceName + '\'' + ", token='" + this.token + '\'' + ", globalAttributeMap=" + this.globalAttributeMap + ", workNo='" + this.workNo + '\'' + '}';
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/Tree.java
deleted file mode 100644
index 8214102..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/Tree.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
-
-
-import org.springblade.core.tool.utils.StringUtil;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-public class Tree implements Serializable {
-	private static final long serialVersionUID = 6886695271635257882L;
-	private String oid;
-	private String text;
-	private boolean leaf = false;
-	private boolean showCheckbox = false;
-	private boolean checked = false;
-	private List<Tree> children = new ArrayList();
-	private String icon;
-	private String iconCls;
-	private String parentId;
-	private String parentName;
-	private String parentBtmName;
-	private boolean expanded = false;
-	private String href;
-	private String index;
-	private Map<String, String> attributes = new HashMap();
-
-	public Tree() {
-	}
-
-	public Tree(String oid, String text) {
-		this.setOid(oid);
-		this.setText(text);
-	}
-
-	public String getOid() {
-		return this.oid;
-	}
-
-	public void setOid(String oid) {
-		this.oid = oid;
-	}
-
-	public String getText() {
-		return this.text;
-	}
-
-	public void setText(String text) {
-		this.text = text;
-	}
-
-	public boolean isLeaf() {
-		return this.leaf;
-	}
-
-	public void setLeaf(boolean leaf) {
-		this.leaf = leaf;
-	}
-
-	public boolean isShowCheckbox() {
-		return this.showCheckbox;
-	}
-
-	public void setShowCheckbox(boolean showCheckbox) {
-		this.showCheckbox = showCheckbox;
-	}
-
-	public boolean isChecked() {
-		return this.checked;
-	}
-
-	public void setChecked(boolean checked) {
-		this.checked = checked;
-	}
-
-	public List<Tree> getChildren() {
-		return this.children;
-	}
-
-	public void setChildren(List<Tree> children) {
-		this.children = children;
-	}
-
-	public String getIcon() {
-		return this.icon;
-	}
-
-	public void setIcon(String icon) {
-		this.icon = icon;
-	}
-
-	public String getIconCls() {
-		return this.iconCls;
-	}
-
-	public void setIconCls(String iconCls) {
-		this.iconCls = iconCls;
-	}
-
-	public String getParentId() {
-		return this.parentId;
-	}
-
-	public void setParentId(String parentId) {
-		this.parentId = parentId;
-	}
-
-	public boolean isExpanded() {
-		return this.expanded;
-	}
-
-	public void setExpanded(boolean expanded) {
-		this.expanded = expanded;
-	}
-
-	public String getHref() {
-		return this.href;
-	}
-
-	public void setHref(String href) {
-		this.href = href;
-	}
-
-	public String getIndex() {
-		return this.index;
-	}
-
-	public void setIndex(String index) {
-		this.index = index;
-	}
-
-	public Map<String, String> getAttributes() {
-		return this.attributes;
-	}
-
-	public void setAttributes(Map<String, String> attributes) {
-		this.attributes = attributes;
-	}
-
-	public String getParentName() {
-		return this.parentName;
-	}
-
-	public void setParentName(String parentName) {
-		this.parentName = parentName;
-	}
-
-	public String getParentBtmName() {
-		return this.parentBtmName;
-	}
-
-	public void setParentBtmName(String parentBtmName) {
-		this.parentBtmName = parentBtmName;
-	}
-
-	public static List<Tree> getChildList(List<Tree> rootTree, List<Tree> children) {
-		if (rootTree == null || rootTree.size() == 0) {
-			if (children == null || children.size() <= 0) {
-				return null;
-			}
-
-			rootTree = children.subList(0, children.size());
-		}
-
-		Tree bt = new Tree();
-		bt.findChild(rootTree, children);
-		return rootTree;
-	}
-
-	public void findChild(List<Tree> treenode, List<Tree> children) {
-		Tree node;
-		for(Iterator var3 = treenode.iterator(); var3.hasNext(); this.getChildren().add(node)) {
-			node = (Tree)var3.next();
-			Iterator var5 = children.iterator();
-
-			while(var5.hasNext()) {
-				Tree childnode = (Tree)var5.next();
-				if (node.getOid().equalsIgnoreCase(childnode.getParentId())) {
-					childnode.setParentName(node.getText());
-					if (StringUtil.isBlank(childnode.getParentBtmName())) {
-						childnode.setParentBtmName((String)node.getAttributes().getOrDefault("btmname", ""));
-					}
-
-					node.getChildren().add(childnode);
-				}
-			}
-
-			if (node.getChildren().size() > 0) {
-				this.findChild(node.getChildren(), children);
-				node.setLeaf(false);
-			} else {
-				node.setLeaf(true);
-			}
-		}
-
-	}
-
-	public String toString() {
-		return "Tree{oid='" + this.oid + '\'' + ", text='" + this.text + '\'' + ", leaf=" + this.leaf + ", showCheckbox=" + this.showCheckbox + ", checked=" + this.checked + ", children=" + this.children + ", icon='" + this.icon + '\'' + ", iconCls='" + this.iconCls + '\'' + ", parentId='" + this.parentId + '\'' + ", parentName='" + this.parentName + '\'' + ", parentBtmName='" + this.parentBtmName + '\'' + ", expanded=" + this.expanded + ", href='" + this.href + '\'' + ", index='" + this.index + '\'' + ", attributes=" + this.attributes + '}';
-	}
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UIFieldSortVO.java
deleted file mode 100644
index 51ee1bd..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UIFieldSortVO.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
-
-//package com.vci.web.pageModel;
-
-/**
- * 瀛楁鐨勬帓搴�
- * @author weidy
- * @date 2022-04-21
- */
-public class UIFieldSortVO implements java.io.Serializable{
-
-	/**
-	 * 搴忓垪鍖�
-	 */
-	private static final long serialVersionUID = 3364856602124197925L;
-
-	/**
-	 * 鎺掑簭鐨勫瓧娈�
-	 */
-	private String field;
-
-	/**
-	 * 鎺掑簭鐨勭被鍨�
-	 */
-	private String type;
-
-	public String getField() {
-		return field;
-	}
-
-	public void setField(String field) {
-		this.field = field;
-	}
-
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	@Override
-	public String toString() {
-		return "UIFieldSortVO{" +
-			"field='" + field + '\'' +
-			", type='" + type + '\'' +
-			'}';
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UIFormReferVO.java
deleted file mode 100644
index 3794e3d..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UIFormReferVO.java
+++ /dev/null
@@ -1,349 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
-
-//package com.vci.web.pageModel;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍙傜収鐨勯厤缃�
- * @author weidy
- * @date 2021/2/24
- */
-public class UIFormReferVO implements java.io.Serializable{
-
-	/**
-	 * 搴忓垪鍖�
-	 */
-	private static final long serialVersionUID = 1459005348514757537L;
-	/**
-	 * 鍙傜収鐨勭獥鍙g被鍨�
-	 */
-	private String type;
-
-	/**
-	 * 鏄剧ず鐨勫瓧娈靛睘鎬�
-	 */
-	private String textField = "name";
-
-	/**
-	 * 鍊肩殑灞炴��
-	 */
-	private String valueField = "oid";
-
-	/**
-	 * 鏄惁澶氶��
-	 */
-	private boolean muti = false;
-
-	/**
-	 * 鍚庡彴鍦板潃
-	 */
-	private String url;
-
-	/**
-	 * 鏈嶅姟鐨勫湴鍧�
-	 */
-	private String backPath;
-
-	/**
-	 * 璇锋眰鍚庡彴鐨勫舰寮�
-	 */
-	private String method = "GET";
-
-	/**
-	 * 楂樺害
-	 */
-	private Integer height;
-
-	//閫氱敤鐨勫弬鐓�
-	/**
-	 * 鍙傜収鐨勪笟鍔$被鍨�
-	 */
-	private String referType;
-
-	/**
-	 * 鍙傜収鐨刄I涓婁笅鏂�
-	 */
-	private String referContent;
-
-	//鏍戝舰鐨勫弬鐓�
-	/**
-	 * 涓婄骇瀛楁
-	 */
-	private String parentFieldName;
-
-	/**
-	 * 涓婄骇瀛楁鐨勫唴瀹瑰搴旂殑灞炴�х殑鍊�
-	 */
-	private String parentUsedField;
-
-	/**
-	 * 涓婄骇瀛楁鐨勫��
-	 */
-	private String parentValue;
-
-	/**
-	 * 鍔犺浇鏂瑰紡
-	 */
-	private String loadType = "all";
-
-	/**
-	 * 鏄惁鍙兘閫夋嫨鍙跺瓙鑺傜偣
-	 */
-	private boolean onlyLeaf = false;
-
-	/**
-	 * 杩囨护(绾ц仈)灞炴��
-	 */
-	private String useFormKey;
-
-	/**
-	 * 杩囨护灞炴�ц姹傚弬鏁�
-	 */
-	private String paramForFormKey;
-
-	/**
-	 * 鏄犲皠鍏朵粬灞炴��
-	 */
-	private String mapFields;
-
-
-	//鍒楄〃鐨勫弬鐓�
-
-	/**
-	 * 鏄剧ず鐨勫垪琛�
-	 */
-	private String displayTable;
-
-	/**
-	 * 琛ㄦ牸鐨勮嚜瀹氫箟瀹氫箟
-	 */
-	private UITableCustomDefineVO tableConfig;
-
-	/**
-	 * 绛涢�夋潯浠�
-	 */
-	private Map<String,String> where;
-
-	/**
-	 * 鍚庡彴鎺掑簭
-	 */
-	private boolean remoteSort;
-
-	/**
-	 * 鍒濆鍖栨帓搴�
-	 */
-	private UIFieldSortVO initSort;
-
-	public boolean isRemoteSort() {
-		return remoteSort;
-	}
-
-	public void setRemoteSort(boolean remoteSort) {
-		this.remoteSort = remoteSort;
-	}
-
-
-	public UIFieldSortVO getInitSort() {
-		return initSort;
-	}
-
-	public void setInitSort(UIFieldSortVO initSort) {
-		this.initSort = initSort;
-	}
-
-	public String getParentUsedField() {
-		return parentUsedField;
-	}
-
-	public void setParentUsedField(String parentUsedField) {
-		this.parentUsedField = parentUsedField;
-	}
-
-	public Map<String, String> getWhere() {
-		return where;
-	}
-
-	public void setWhere(Map<String, String> where) {
-		this.where = where;
-	}
-
-	public String getUseFormKey() {
-		return useFormKey;
-	}
-
-	public void setUseFormKey(String useFormKey) {
-		this.useFormKey = useFormKey;
-	}
-
-	public String getParamForFormKey() {
-		return paramForFormKey;
-	}
-
-	public void setParamForFormKey(String paramForFormKey) {
-		this.paramForFormKey = paramForFormKey;
-	}
-
-	public String getMapFields() {
-		return mapFields;
-	}
-
-	public void setMapFields(String mapFields) {
-		this.mapFields = mapFields;
-	}
-
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	public String getTextField() {
-		return textField;
-	}
-
-	public void setTextField(String textField) {
-		this.textField = textField;
-	}
-
-	public String getValueField() {
-		return valueField;
-	}
-
-	public void setValueField(String valueField) {
-		this.valueField = valueField;
-	}
-
-	public boolean isMuti() {
-		return muti;
-	}
-
-	public void setMuti(boolean muti) {
-		this.muti = muti;
-	}
-
-	public String getUrl() {
-		return url;
-	}
-
-	public void setUrl(String url) {
-		this.url = url;
-	}
-
-	public String getBackPath() {
-		return backPath;
-	}
-
-	public void setBackPath(String backPath) {
-		this.backPath = backPath;
-	}
-
-	public String getMethod() {
-		return method;
-	}
-
-	public void setMethod(String method) {
-		this.method = method;
-	}
-
-	public Integer getHeight() {
-		return height;
-	}
-
-	public void setHeight(Integer height) {
-		this.height = height;
-	}
-
-	public String getReferType() {
-		return referType;
-	}
-
-	public void setReferType(String referType) {
-		this.referType = referType;
-	}
-
-	public String getReferContent() {
-		return referContent;
-	}
-
-	public void setReferContent(String referContent) {
-		this.referContent = referContent;
-	}
-
-	public String getParentFieldName() {
-		return parentFieldName;
-	}
-
-	public void setParentFieldName(String parentFieldName) {
-		this.parentFieldName = parentFieldName;
-	}
-
-	public String getParentValue() {
-		return parentValue;
-	}
-
-	public void setParentValue(String parentValue) {
-		this.parentValue = parentValue;
-	}
-
-	public String getLoadType() {
-		return loadType;
-	}
-
-	public void setLoadType(String loadType) {
-		this.loadType = loadType;
-	}
-
-	public boolean isOnlyLeaf() {
-		return onlyLeaf;
-	}
-
-	public void setOnlyLeaf(boolean onlyLeaf) {
-		this.onlyLeaf = onlyLeaf;
-	}
-
-	public String getDisplayTable() {
-		return displayTable;
-	}
-
-	public void setDisplayTable(String displayTable) {
-		this.displayTable = displayTable;
-	}
-
-	public UITableCustomDefineVO getTableConfig() {
-		return tableConfig;
-	}
-
-	public void setTableConfig(UITableCustomDefineVO tableConfig) {
-		this.tableConfig = tableConfig;
-	}
-
-	@Override
-	public String toString() {
-		return "UIFormReferVO{" +
-			"type='" + type + '\'' +
-			", textField='" + textField + '\'' +
-			", valueField='" + valueField + '\'' +
-			", muti=" + muti +
-			", url='" + url + '\'' +
-			", backPath='" + backPath + '\'' +
-			", method='" + method + '\'' +
-			", height=" + height +
-			", referType='" + referType + '\'' +
-			", referContent='" + referContent + '\'' +
-			", parentFieldName='" + parentFieldName + '\'' +
-			", parentValue='" + parentValue + '\'' +
-			", loadType='" + loadType + '\'' +
-			", onlyLeaf=" + onlyLeaf +
-			", useFormKey='" + useFormKey + '\'' +
-			", paramForFormKey='" + paramForFormKey + '\'' +
-			", mapFields='" + mapFields + '\'' +
-			", displayTable='" + displayTable + '\'' +
-			", tableConfig=" + tableConfig +
-			", where=" + where +
-			'}';
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITableCustomDefineVO.java
deleted file mode 100644
index 823dfe1..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITableCustomDefineVO.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
-
-//package com.vci.web.pageModel;
-
-import java.util.List;
-
-/**
- * 琛ㄦ牸鐨勮嚜瀹氫箟
- * @author weidy
- * @date 2021/2/25
- */
-public class UITableCustomDefineVO implements java.io.Serializable{
-
-	/**
-	 * 搴忓垪鍖�
-	 */
-	private static final long serialVersionUID = 431728683965836558L;
-	/**
-	 * 涓婚敭
-	 */
-	private String oid;
-
-	/**
-	 * 鍒嗛〉鐨勫璞�
-	 */
-	private UITablePageVO page;
-
-	/**
-	 * 鏄剧ず鐨勫垪
-	 */
-	private List<UITableFieldVO> cols;
-
-	/**
-	 * 鏌ヨ鐨勫垪
-	 */
-	private List<UITableFieldVO> queryColumns;
-
-	public String getOid() {
-		return oid;
-	}
-
-	public void setOid(String oid) {
-		this.oid = oid;
-	}
-
-	public UITablePageVO getPage() {
-		return page;
-	}
-
-	public void setPage(UITablePageVO page) {
-		this.page = page;
-	}
-
-	public List<UITableFieldVO> getCols() {
-		return cols;
-	}
-
-	public void setCols(List<UITableFieldVO> cols) {
-		this.cols = cols;
-	}
-
-	public List<UITableFieldVO> getQueryColumns() {
-		return queryColumns;
-	}
-
-	public void setQueryColumns(List<UITableFieldVO> queryColumns) {
-		this.queryColumns = queryColumns;
-	}
-
-	@Override
-	public String toString() {
-		return "UITableCustomDefineVO{" +
-			"oid='" + oid + '\'' +
-			", page=" + page +
-			", cols=" + cols +
-			", queryColumns=" + queryColumns +
-			'}';
-	}
-
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITableFieldVO.java
deleted file mode 100644
index 6945beb..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITableFieldVO.java
+++ /dev/null
@@ -1,398 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
-//package com.vci.web.pageModel;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍒楄〃鐨勫垪鐨勪俊鎭�
- * @author weidy
- * @date 2021/2/25
- */
-public class UITableFieldVO implements java.io.Serializable{
-
-	/**
-	 * 鍒楀悕
-	 */
-	private String field;
-
-	/**
-	 * 鏄剧ず鐨勫悕绉�
-	 */
-	private String title;
-
-	/**
-	 * 瀛楁绫诲瀷
-	 */
-	private String fieldType;
-
-	/**
-	 * 鏄惁鎺掑簭
-	 */
-	private boolean sort = false;
-
-	/**
-	 * 鎺掑簭瀛楁
-	 */
-	private String sortField ;
-
-	/**
-	 * 闅愯棌鐨勫瓧娈�
-	 */
-	private boolean hidden = false;
-
-	/**
-	 * 瀹藉害
-	 */
-	private Integer width;
-
-	/**
-	 * 鏈�灏忕殑瀹藉害
-	 */
-	private Integer minWidth;
-
-	/**
-	 * 鍥哄畾浣嶇疆锛屾敮鎸乺ight鍜宭eft
-	 */
-	private String fixed;
-
-	/**
-	 * 鎵�鍗犵殑鍒�
-	 */
-	private Integer colspan = 1;
-
-	/**
-	 * 鎵�绔欑殑琛�
-	 */
-	private Integer rowspan = 1;
-
-	/**
-	 * 妯℃澘鐨勭殑鍐呭
-	 */
-	private String templet;
-
-	/**
-	 * 鏃堕棿鏍煎紡
-	 */
-	private String dateFormate;
-
-	/**
-	 * 鏄惁鎿嶄綔鍒�
-	 */
-	private boolean optionField = false;
-
-	/**
-	 * 鎿嶄綔鍒楀寘鍚殑鎸夐挳
-	 */
-	private List<KeyValue> optionButtons;
-
-	/**
-	 * 浜嬩欢-鎵цjs鐨勬槧灏�
-	 */
-	private Map<String,String> optionJsMap;
-
-	/**
-	 * 鏄惁缂栬緫
-	 */
-	private String edit;
-
-	/**
-	 * 缂栬緫鐨勯厤缃�
-	 */
-	private String editConfig ;
-
-	/**
-	 * 瀵归綈鏂瑰紡
-	 */
-	private String align = "left";
-
-	/**
-	 * 鐗规畩鏍峰紡
-	 */
-	private String style;
-
-	/**
-	 * 鍗曞厓鏍肩偣鍑讳簨浠�
-	 */
-	private String event;
-
-	/**
-	 * 绂佺敤鎷栨嫿鍒楀
-	 */
-	private boolean unresize = false;
-
-	/**
-	 * 涓嬫媺鑿滃崟鐨勫悕绉�
-	 */
-	private String comboxKey;
-
-	/**
-	 * 涓嬫媺鑿滃崟鐨勯�夐」鍊�
-	 */
-	private List<KeyValue> data = new ArrayList<>();
-
-	/**
-	 * 鍙傜収鏄剧ず鐨勫瓧娈�
-	 */
-	private String showField;
-
-	/**
-	 * 鏌ヨ鐨勫瓧娈�
-	 */
-	private String queryField;
-
-	/**
-	 * 鍙傜収鐨勪俊鎭�
-	 */
-	private UIFormReferVO referConfig;
-
-	public Map<String, String> getOptionJsMap() {
-		return optionJsMap;
-	}
-
-	public void setOptionJsMap(Map<String, String> optionJsMap) {
-		this.optionJsMap = optionJsMap;
-	}
-
-	public String getFieldType() {
-		return fieldType;
-	}
-
-	public void setFieldType(String fieldType) {
-		this.fieldType = fieldType;
-	}
-
-	public String getDateFormate() {
-		return dateFormate;
-	}
-
-	public void setDateFormate(String dateFormate) {
-		this.dateFormate = dateFormate;
-	}
-
-	public String getField() {
-		return field;
-	}
-
-	public void setField(String field) {
-		this.field = field;
-	}
-
-	public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	public boolean isSort() {
-		return sort;
-	}
-
-	public void setSort(boolean sort) {
-		this.sort = sort;
-	}
-
-	public String getSortField() {
-		return sortField;
-	}
-
-	public void setSortField(String sortField) {
-		this.sortField = sortField;
-	}
-
-	public boolean isHidden() {
-		return hidden;
-	}
-
-	public void setHidden(boolean hidden) {
-		this.hidden = hidden;
-	}
-
-	public Integer getWidth() {
-		return width;
-	}
-
-	public void setWidth(Integer width) {
-		this.width = width;
-	}
-
-	public Integer getMinWidth() {
-		return minWidth;
-	}
-
-	public void setMinWidth(Integer minWidth) {
-		this.minWidth = minWidth;
-	}
-
-	public String getFixed() {
-		return fixed;
-	}
-
-	public void setFixed(String fixed) {
-		this.fixed = fixed;
-	}
-
-	public Integer getColspan() {
-		return colspan;
-	}
-
-	public void setColspan(Integer colspan) {
-		this.colspan = colspan;
-	}
-
-	public Integer getRowspan() {
-		return rowspan;
-	}
-
-	public void setRowspan(Integer rowspan) {
-		this.rowspan = rowspan;
-	}
-
-	public String getTemplet() {
-		return templet;
-	}
-
-	public void setTemplet(String templet) {
-		this.templet = templet;
-	}
-
-	public boolean isOptionField() {
-		return optionField;
-	}
-
-	public void setOptionField(boolean optionField) {
-		this.optionField = optionField;
-	}
-
-	public List<KeyValue> getOptionButtons() {
-		return optionButtons;
-	}
-
-	public void setOptionButtons(List<KeyValue> optionButtons) {
-		this.optionButtons = optionButtons;
-	}
-
-	public String getEdit() {
-		return edit;
-	}
-
-	public void setEdit(String edit) {
-		this.edit = edit;
-	}
-
-	public String getEditConfig() {
-		return editConfig;
-	}
-
-	public void setEditConfig(String editConfig) {
-		this.editConfig = editConfig;
-	}
-
-	public String getAlign() {
-		return align;
-	}
-
-	public void setAlign(String align) {
-		this.align = align;
-	}
-
-	public String getStyle() {
-		return style;
-	}
-
-	public void setStyle(String style) {
-		this.style = style;
-	}
-
-	public String getEvent() {
-		return event;
-	}
-
-	public void setEvent(String event) {
-		this.event = event;
-	}
-
-	public boolean isUnresize() {
-		return unresize;
-	}
-
-	public void setUnresize(boolean unresize) {
-		this.unresize = unresize;
-	}
-
-	public String getComboxKey() {
-		return comboxKey;
-	}
-
-	public void setComboxKey(String comboxKey) {
-		this.comboxKey = comboxKey;
-	}
-
-	public List<KeyValue> getData() {
-		return data;
-	}
-
-	public void setData(List<KeyValue> data) {
-		this.data = data;
-	}
-
-	public String getShowField() {
-		return showField;
-	}
-
-	public void setShowField(String showField) {
-		this.showField = showField;
-	}
-
-	public UIFormReferVO getReferConfig() {
-		return referConfig;
-	}
-
-	public void setReferConfig(UIFormReferVO referConfig) {
-		this.referConfig = referConfig;
-	}
-
-	public String getQueryField() {
-		return queryField;
-	}
-
-	public void setQueryField(String queryField) {
-		this.queryField = queryField;
-	}
-
-	@Override
-	public String toString() {
-		return "UITableFieldVO{" +
-			"field='" + field + '\'' +
-			", title='" + title + '\'' +
-			", fieldType='" + fieldType + '\'' +
-			", sort=" + sort +
-			", sortField='" + sortField + '\'' +
-			", hidden=" + hidden +
-			", width=" + width +
-			", minWidth=" + minWidth +
-			", fixed='" + fixed + '\'' +
-			", colspan=" + colspan +
-			", rowspan=" + rowspan +
-			", templet='" + templet + '\'' +
-			", dateFormate='" + dateFormate + '\'' +
-			", optionField=" + optionField +
-			", optionButtons=" + optionButtons +
-			", optionJsMap=" + optionJsMap +
-			", edit='" + edit + '\'' +
-			", editConfig='" + editConfig + '\'' +
-			", align='" + align + '\'' +
-			", style='" + style + '\'' +
-			", event='" + event + '\'' +
-			", unresize=" + unresize +
-			", comboxKey='" + comboxKey + '\'' +
-			", data=" + data +
-			", showField='" + showField + '\'' +
-			", queryField='" + queryField + '\'' +
-			", referConfig=" + referConfig +
-			'}';
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITablePageVO.java
deleted file mode 100644
index badb844..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/pagemodel/UITablePageVO.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.pagemodel;
-
-//package com.vci.web.pageModel;
-
-/**
- * 琛ㄦ牸鐨勫垎椤靛璞�
- * @author weidy
- * @date 2021/2/25
- */
-public class UITablePageVO implements java.io.Serializable{
-
-	/**
-	 * 搴忓垪鍖�
-	 */
-	private static final long serialVersionUID = -6338518925812603615L;
-	/**
-	 * 姣忛〉鏄剧ず鏁伴噺
-	 */
-	private Integer limit = -1;
-
-	/**
-	 * 褰撳墠椤垫暟
-	 */
-	private Integer page = 1;
-
-	public Integer getLimit() {
-		return limit;
-	}
-
-	public void setLimit(Integer limit) {
-		this.limit = limit;
-	}
-
-	public Integer getPage() {
-		return page;
-	}
-
-	public void setPage(Integer page) {
-		this.page = page;
-	}
-
-	@Override
-	public String toString() {
-		return "UITablePageVO{" +
-			"limit=" + limit +
-			", page=" + page +
-			'}';
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/service/VciSecretServiceI.java
deleted file mode 100644
index c56de15..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/service/VciSecretServiceI.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.vci.ubcs.com.vci.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;
-
-public interface VciSecretServiceI {
-
-	default String getLessThanUserSecretSql() {
-		SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfoNotException();
-		return sessionInfo != null ? sessionInfo.getUserSecret() : "";
-	}
-
-	default boolean checkUserSecret(int dataSecret) {
-		SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfoNotException();
-		if (sessionInfo != null) {
-			if (StringUtils.isBlank(sessionInfo.getUserSecret())) {
-				sessionInfo.setUserSecret(UserSecretEnum.NONE.getValue() + "");
-			}
-
-			return VciBaseUtil.getInt(sessionInfo.getUserSecret()) >= dataSecret;
-		} else {
-			return false;
-		}
-	}
-
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/toolmodel/DateConverter.java
deleted file mode 100644
index b942198..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/toolmodel/DateConverter.java
+++ /dev/null
@@ -1,188 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.toolmodel;
-
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.web.util.VciDateUtil;
-import org.springblade.core.tool.utils.StringUtil;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class DateConverter {
-	private DateFormat dateFormat;
-	private int exactDateLength;
-	private Date value;
-
-	public DateConverter() {
-	}
-
-	public DateFormat getDateFormat() {
-		return this.dateFormat;
-	}
-
-	public void setDateFormat(DateFormat dateFormat) {
-		this.dateFormat = dateFormat;
-	}
-
-	public int getExactDateLength() {
-		return this.exactDateLength;
-	}
-
-	public void setExactDateLength(int exactDateLength) {
-		this.exactDateLength = exactDateLength;
-	}
-
-	public Date getValue() {
-		return this.value;
-	}
-
-	public void setValue(Date value) {
-		this.value = value;
-	}
-
-	public void setAsText(String text) throws VciBaseException {
-		if (StringUtil.isBlank(text)) {
-			this.setValue((Date)null);
-		} else {
-			text = text.trim();
-			text = text.replace("骞�", "-").replace("鏈�", "-").replace("鏃�", "").replace("鏃�", ":").replace("鍒�", ":");
-			String pattern = "\\d{2,4}([^\\d]?)\\d{1,2}\\1\\d{1,2}( \\d{1,2}([^\\d])\\d{1,2})?";
-			Pattern r = Pattern.compile(pattern);
-			Matcher m = r.matcher(text);
-			if (!m.find()) {
-				throw new VciBaseException("涓嶆槸鍚堟牸鐨勬椂闂存牸寮忓瓧绗︿覆,{0}", new String[]{text});
-			}
-
-			String dateSplit = m.group(1);
-			String timeSplit = m.group(3);
-			String formateStr = String.format("yyyy%sMM%sdd", dateSplit, dateSplit);
-			String yearMD;
-			if (StringUtil.isNotBlank(timeSplit)) {
-				yearMD = text.substring(text.indexOf(" "));
-				String[] split = yearMD.split(timeSplit);
-				if (split.length == 2) {
-					formateStr = formateStr + String.format(" HH%smm", timeSplit);
-				}
-
-				if (split.length > 2) {
-					formateStr = formateStr + String.format(" HH%smm%sss", timeSplit, timeSplit);
-				}
-
-				if (yearMD.contains(".")) {
-					formateStr = formateStr + ".SSS";
-				}
-			}
-
-			yearMD = text.contains(" ") ? text.substring(0, text.indexOf(" ")) : text;
-			if (StringUtil.isNotBlank(dateSplit)) {
-				String year = text.substring(0, text.indexOf(dateSplit));
-				if (StringUtil.isNotBlank(year) && year.length() == 2) {
-					formateStr = formateStr.replace("yyyy", "yy");
-				}
-
-				String[] split = yearMD.split(dateSplit);
-				if (split.length == 2) {
-					formateStr = formateStr.replace("dd", "");
-				}
-			} else if (!text.matches("^[0-9]*$")) {
-				if (text.length() == 5) {
-					formateStr = formateStr.replace("yyyyMMdd", "yy" + text.substring(2, 3) + "MM");
-				}
-
-				if (text.length() == 7) {
-					formateStr = formateStr.replace("yyyyMMdd", "yyyy" + text.substring(4, 5) + "MM");
-				}
-			} else if (text.length() == 2 && text.matches("^[0-9]*$")) {
-				formateStr = "yy";
-			} else if (text.length() == 4 && text.matches("^[0-9]*$")) {
-				formateStr = "yyyy";
-			} else if (text.length() == 6 && text.matches("^[0-9]*$")) {
-				formateStr = "yyyyMM";
-			} else if (StringUtil.isNotBlank(yearMD) && yearMD.length() < 6) {
-				formateStr = formateStr.replace("yyyy", "yy");
-			}
-
-			SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formateStr);
-
-			try {
-				this.setValue(simpleDateFormat.parse(text));
-			} catch (ParseException var13) {
-				formateStr = formateStr.replace("yyyy", "yy");
-				simpleDateFormat = new SimpleDateFormat(formateStr);
-
-				try {
-					this.setValue(simpleDateFormat.parse(text));
-				} catch (ParseException var12) {
-					if (text.length() == 2 && text.matches("^[0-9]*$")) {
-						formateStr = "yy";
-					}
-
-					throw new VciBaseException("涓嶈兘鏍煎紡鍖栨棩鏈�: {0}", new String[]{text}, var13);
-				}
-			}
-		}
-
-	}
-
-	private String fillNano(String text) {
-		String nano = text.substring(text.lastIndexOf(".") + 1);
-		if (nano.length() < 3) {
-			for(int i = 0; i < 3 - nano.length(); ++i) {
-				nano = nano + "0";
-			}
-		}
-
-		return text.substring(0, text.lastIndexOf(".")) + "." + nano;
-	}
-
-	public static void main(String[] args) {
-		List<String> list = new ArrayList<String>() {
-			{
-				this.add("2020-11-12 12:12:03");
-				this.add("2020-1-2 2:2:3");
-				this.add("2020-11-12 12:12:03.232");
-				this.add("2020/11/12 12:12:03");
-				this.add("2020/1/2 2:2:3");
-				this.add("2020/11/12 12:12:03.232");
-				this.add("20/11/12 12:12:03");
-				this.add("20/1/2 2:2:3");
-				this.add("20/11/12 12:12:03.232");
-				this.add("2020");
-				this.add("2020-11");
-				this.add("202011");
-				this.add("12:02:12");
-				this.add("2:2:3");
-				this.add("20201112");
-				this.add("202012");
-				this.add("202012");
-				this.add("2020骞�11鏈�12鏃� 12鏃�12鍒�03绉�");
-				this.add("2020骞�1鏈�2鏃� 2:2:3");
-				this.add("2020骞�11鏈�12鏃� 12鏃�12鍒�03绉�232姣");
-			}
-		};
-		list.stream().forEach((t) -> {
-			try {
-				DateConverter dateConverter = new DateConverter();
-				dateConverter.setAsText(t);
-				System.out.println("杞崲鍓�:" + t + "; 杞崲鍚�:" + VciDateUtil.date2Str(dateConverter.getValue(), "yyyy-MM-dd HH:mm:ss.SSS"));
-			} catch (Throwable var2) {
-				var2.printStackTrace();
-			}
-
-		});
-	}
-
-	public String getAsText(String dateFormat) {
-		Date value = this.getValue();
-		if (StringUtil.isEmpty(dateFormat)) {
-			dateFormat = "yyyy-MM-dd HH:mm:ss.SSS";
-		}
-
-		return value != null ? (new SimpleDateFormat(dateFormat)).format(value) : "";
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/BeanUtilForVCI.java
deleted file mode 100644
index 85237cf..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/BeanUtilForVCI.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.util;
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.CollectionUtils;
-
-import java.lang.reflect.Field;
-import java.util.*;
-
-public class BeanUtilForVCI {
-	private static Logger logger = LoggerFactory.getLogger(BeanUtilForVCI.class);
-
-	public BeanUtilForVCI() {
-	}
-
-	public static void copyPropertiesIgnoreCase(Object source, Object target) {
-		copyPropertiesIgnoreCase(source, target, false);
-	}
-
-	public static void copyPropertiesIgnoreCase(Object source, Object target, Map<String, String> fieldMap) {
-		copyPropertiesIgnoreCase(source, target, false, fieldMap);
-	}
-
-	public static void copyPropertiesIgnoreCase(Object source, Object target, boolean ignoreNull) {
-		copyPropertiesIgnoreCase(source, target, ignoreNull, (Map)null);
-	}
-
-	public static void copyDeclaredIgnoreCase(Object source, Object target) {
-		copyDeclaredIgnoreCase(source, target, false);
-	}
-
-	public static void copyDeclaredIgnoreCase(Object source, Object target, boolean ignoreNull) {
-		copyDeclaredIgnoreCase(source, target, ignoreNull, (Map)null);
-	}
-
-	public static void copyDeclaredIgnoreCase(Object source, Object target, boolean ignoreNull, Map<String, String> fieldMap) {
-		copyDeclaredIgnoreCase(source, target, ignoreNull, fieldMap, (Collection)null);
-	}
-
-	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());
-		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());
-		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, Map<String, Field> targetMap) {
-		if (fieldMap == null) {
-			fieldMap = new HashMap();
-		}
-
-		Map<String, String> finalFieldMap = fieldMap;
-		targetMap.values().forEach((it) -> {
-			boolean not = false;
-			if (ignoreField != null && ignoreField.contains(it.getName())) {
-				not = true;
-			}
-
-			if (!not) {
-				String itFieldName = it.getName().toLowerCase().replace("_", "");
-				itFieldName = (String) finalFieldMap.getOrDefault(itFieldName, itFieldName);
-				Field field = (Field)sourceMap.getOrDefault(itFieldName, (Field) null);
-				if (field != null) {
-					it.setAccessible(true);
-					field.setAccessible(true);
-
-					try {
-						String sourceClassName = field.getClass().getName();
-						String targetClassName = it.getClass().getName();
-						if ((sourceClassName.equalsIgnoreCase(Boolean.class.getName()) || sourceClassName.equalsIgnoreCase(Boolean.TYPE.getName())) && targetClassName.equalsIgnoreCase(String.class.getName()) || (targetClassName.equalsIgnoreCase(Boolean.class.getName()) || targetClassName.equalsIgnoreCase(Boolean.TYPE.getName())) && sourceClassName.equalsIgnoreCase(String.class.getName())) {
-							if (targetClassName.equalsIgnoreCase(String.class.getName())) {
-								it.set(target, String.valueOf((Boolean)field.get(source)));
-							} else {
-								it.set(target, Boolean.valueOf((String)field.get(source)));
-							}
-						} else if (!ignoreNull) {
-							it.set(target, field.get(source));
-						} else {
-							Object sourceValue = field.get(source);
-							if (sourceValue != null && StringUtils.isNotBlank(sourceValue.toString())) {
-								it.set(target, sourceValue);
-							}
-						}
-					} catch (IllegalAccessException var13) {
-						if (logger.isErrorEnabled()) {
-							logger.error("鎷疯礉灞炴�у嚭閿�" + var13);
-						}
-					}
-				}
-			}
-
-		});
-	}
-
-	public static void copyPropertiesIgnoreCase(Object source, Object target, boolean ignoreNull, Map<String, String> fieldMap) {
-		copyPropertiesIgnoreCase(source, target, ignoreNull, fieldMap, (Collection)null);
-	}
-
-	private static class CacheFieldMap {
-		private static Map<String, Map<String, Field>> cacheMap = new HashMap();
-		private static Map<String, Map<String, Field>> declaredCacheMap = new HashMap();
-
-		private CacheFieldMap() {
-		}
-
-		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) {
-					if (result == null) {
-						Map<String, Field> fieldMap = new HashMap();
-						List<Field> allFields = VciBaseUtil.getAllFieldForObj(clazz);
-						if (!CollectionUtils.isEmpty(allFields)) {
-							allFields.stream().forEach((field) -> {
-								fieldMap.put(field.getName().toLowerCase().replace("_", ""), field);
-							});
-						}
-
-						cacheMap.put(clazz.getName(), fieldMap);
-						result = (Map)cacheMap.get(clazz.getName());
-					}
-				}
-			}
-
-			return result;
-		}
-
-		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) {
-					if (result == null) {
-						Map<String, Field> fieldMap = new HashMap();
-						Field[] allFields = clazz.getDeclaredFields();
-						if (allFields != null && allFields.length > 0) {
-							Arrays.stream(allFields).forEach((field) -> {
-								fieldMap.put(field.getName().toLowerCase().replace("_", ""), field);
-							});
-						}
-
-						declaredCacheMap.put(clazz.getName(), fieldMap);
-						result = (Map)declaredCacheMap.get(clazz.getName());
-					}
-				}
-			}
-
-			return result;
-		}
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/ControllerUtil.java
deleted file mode 100644
index 314b441..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/ControllerUtil.java
+++ /dev/null
@@ -1,248 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.util;
-
-import org.apache.commons.io.IOUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springblade.core.tool.utils.StringUtil;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
-import java.net.URLEncoder;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-public class ControllerUtil {
-	private static Logger logger = LoggerFactory.getLogger(ControllerUtil.class);
-	public static final Map<String, String> tempFileForDownloadMap = new ConcurrentHashMap();
-
-	public ControllerUtil() {
-	}
-
-	public static void writeFileToResponse(HttpServletResponse response, String fileName) throws FileNotFoundException, IOException {
-		writeFileToResponse(response, fileName, true);
-	}
-
-	public static void writeFileToResponse(HttpServletResponse response, String fileName, boolean deleteFile) throws FileNotFoundException, IOException {
-		writeFileToResponse(response, (String)fileName, (String)null, deleteFile);
-	}
-
-	public static void writeFileToResponse(HttpServletResponse response, String fileName, String showName, boolean deleteFile) throws FileNotFoundException, IOException {
-		File file = new File(fileName);
-		if (!file.exists()) {
-			throw new FileNotFoundException(fileName);
-		} else {
-			writeFileToResponse(response, file, showName, deleteFile);
-		}
-	}
-
-	public static void writeFileToResponse(HttpServletResponse response, File file) throws FileNotFoundException, IOException {
-		writeFileToResponse(response, file, true);
-	}
-
-	public static void writeFileToResponse(HttpServletResponse response, File file, boolean deleteFile) throws FileNotFoundException, IOException {
-		writeFileToResponse(response, (File)file, (String)null, deleteFile);
-	}
-
-	public static void writeFileToResponse(HttpServletResponse response, File file, String showName, boolean deleteFile) throws FileNotFoundException, IOException {
-		writeFileToResponse(response, file, showName, deleteFile, (String)null);
-	}
-
-	public static void writeFileToResponse(HttpServletResponse response, File file, String showName, boolean deleteFile, String contentType) throws FileNotFoundException, IOException {
-		VciBaseUtil.alertNotNull(new Object[]{file, "鏂囦欢瀵硅薄"});
-		if (!file.exists()) {
-			throw new FileNotFoundException(file.getName());
-		} else {
-			if (StringUtil.isBlank(showName)) {
-				showName = file.getName();
-			}
-
-			FileInputStream in = null;
-			boolean var11 = false;
-
-			File parentFile;
-			label96: {
-				try {
-					var11 = true;
-					in = new FileInputStream(file);
-					writeFileToResponse(response, in, showName, contentType);
-					var11 = false;
-					break label96;
-				} catch (IOException var12) {
-					if (logger.isErrorEnabled()) {
-						logger.error("鍐欏叆鏂囦欢鍒板搷搴旀祦鍑洪敊", var12);
-						var11 = false;
-					} else {
-						var11 = false;
-					}
-				} finally {
-					if (var11) {
-						IOUtils.closeQuietly(in);
-						if (deleteFile) {
-							File parentFile1 = file.getParentFile();
-							file.delete();
-							parentFile1.delete();
-						}
-
-					}
-				}
-
-				IOUtils.closeQuietly(in);
-				if (deleteFile) {
-					parentFile = file.getParentFile();
-					file.delete();
-					parentFile.delete();
-				}
-
-				return;
-			}
-
-			IOUtils.closeQuietly(in);
-			if (deleteFile) {
-				parentFile = file.getParentFile();
-				file.delete();
-				parentFile.delete();
-			}
-
-		}
-	}
-
-	public static void writeFileToResponse(HttpServletResponse response, InputStream ins, String showName) throws IOException {
-		writeFileToResponse(response, ins, showName, (String)null);
-	}
-
-	public static void writeFileToResponse(HttpServletResponse response, InputStream ins, String showName, String contentType) throws IOException {
-		if (StringUtil.isBlank(contentType)) {
-			contentType = "application/force-download";
-		}
-
-		if (StringUtil.isBlank(showName)) {
-			showName = "涓嬭浇鏂囦欢";
-		}
-
-		response.setContentType(contentType);
-
-		try {
-			String fileName = URLEncoder.encode(showName, "UTF8");
-			response.addHeader("Content-Disposition", "attachment; filename=" + fileName + ";filename*=utf-8''" + fileName);
-		} catch (Exception var12) {
-			if (logger.isErrorEnabled()) {
-				logger.error("璁剧疆鏂囦欢鐨勫悕绉板埌鍝嶅簲娴佺殑鏃跺�欏嚭閿�", var12);
-			}
-		}
-
-		response.setCharacterEncoding("UTF-8");
-		Cookie cookie = new Cookie("fileDownload", "true");
-		cookie.setPath("/");
-		response.addCookie(cookie);
-
-		try {
-			IOUtils.copy(ins, response.getOutputStream());
-		} catch (IOException var10) {
-			if (logger.isErrorEnabled()) {
-				logger.error("鍐欏叆鏂囦欢鍒板搷搴旀祦鍑洪敊", var10);
-			}
-
-			throw var10;
-		} finally {
-			IOUtils.closeQuietly(ins);
-		}
-
-	}
-
-	public static void writeDataToResponse(HttpServletResponse response, byte[] data, String contentType) throws IOException {
-		if (StringUtil.isBlank(contentType)) {
-			contentType = "application/force-download";
-		}
-
-		response.setContentType(contentType);
-		response.setCharacterEncoding("UTF-8");
-		Cookie cookie = new Cookie("fileDownload", "true");
-		cookie.setPath("/");
-		response.addCookie(cookie);
-
-		try {
-			response.getOutputStream().write(data);
-		} catch (IOException var5) {
-			if (logger.isErrorEnabled()) {
-				logger.error("鍐欏叆鏂囦欢鍒板搷搴旀祦鍑洪敊", var5);
-			}
-
-			throw var5;
-		}
-	}
-
-	public static void writeClasspathFileToResponse(HttpServletResponse response, String classPathFileName) throws FileNotFoundException, IOException {
-		writeClasspathFileToResponse(response, classPathFileName, (String)null);
-	}
-
-	public static void writeClasspathFileToResponse(HttpServletResponse response, String classPathFileName, String showName) throws FileNotFoundException, IOException {
-		InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(classPathFileName);
-		if (StringUtil.isBlank(showName)) {
-			showName = classPathFileName.contains("/") ? classPathFileName.substring(classPathFileName.lastIndexOf("/") + 1) : classPathFileName;
-		}
-
-		try {
-			writeFileToResponse(response, in, showName);
-		} catch (IOException var8) {
-			throw var8;
-		} finally {
-			IOUtils.closeQuietly(in);
-		}
-
-	}
-
-	public static String getClientInfo(HttpServletRequest request) {
-		String ip = request.getHeader("X-Forwarded-For");
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("Proxy-Client-IP");
-		}
-
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("WL-Proxy-Client-IP");
-		}
-
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("HTTP_CLIENT_IP");
-		}
-
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("HTTP_X_FORWARDED_FOR");
-		}
-
-		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getRemoteAddr();
-		}
-
-		if (ip == null || ip.length() == 0 || ip.indexOf("0:0:0:0:0:0:0:1") > -1) {
-			ip = "127.0.0.1";
-		}
-
-		return ip;
-	}
-
-	public static void setQueryTotal(HttpServletRequest request, boolean isQueryTotal) {
-		WebThreadLocalUtil.getNeedQueryTotalInThread().set(isQueryTotal ? "true" : "false");
-	}
-
-	public static String putErrorFile(String errorFile) {
-		String uuid = VciBaseUtil.getPk();
-		tempFileForDownloadMap.put(uuid, errorFile);
-		return uuid;
-	}
-
-	public static void downloadErrorFile(HttpServletResponse response, String uuid) throws IOException {
-		String errorFile = (String)tempFileForDownloadMap.getOrDefault(uuid, "");
-
-		try {
-			if (StringUtil.isNotBlank(errorFile)) {
-				writeFileToResponse(response, new File(errorFile), (String)null, true, "application/msexcel");
-			}
-		} finally {
-			tempFileForDownloadMap.remove(uuid);
-		}
-
-	}
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/LangBaseUtil.java
deleted file mode 100644
index 9739921..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/LangBaseUtil.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.util;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-public class LangBaseUtil {
-	public LangBaseUtil() {
-	}
-
-	public static String getErrorMsg(Throwable e) {
-		if (e == null) {
-			return "鏈煡閿欒";
-		} else {
-			if (e.getClass() != null && e.getClass().getSuperclass() != null && (e.getClass().getSuperclass().equals(RuntimeException.class) || e.getClass().getSuperclass().getName().endsWith(".VciBaseException") || e.getClass().getName().endsWith(".VciBaseException"))) {
-				try {
-					Method errorMethod = e.getClass().getMethod("getErrorMsg");
-					if (errorMethod != null) {
-						return (String)errorMethod.invoke(e);
-					}
-				} catch (NoSuchMethodException var2) {
-					return e.getMessage();
-				} catch (IllegalAccessException var3) {
-					return e.getMessage();
-				} catch (InvocationTargetException var4) {
-					return e.getMessage();
-				}
-			}
-
-			return e.getMessage();
-		}
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/Lunar.java
deleted file mode 100644
index eb7454b..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/Lunar.java
+++ /dev/null
@@ -1,194 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.util;
-
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//package com.vci.starter.web.util;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-
-public class Lunar {
-	private int year;
-	private int month;
-	private int day;
-	private boolean leap;
-	static final String[] chineseNumber = new String[]{"涓�", "浜�", "涓�", "鍥�", "浜�", "鍏�", "涓�", "鍏�", "涔�", "鍗�", "鍗佷竴", "鍗佷簩"};
-	static SimpleDateFormat chineseDateFormat = new SimpleDateFormat("yyyy骞碝M鏈坉d鏃�");
-	static final long[] lunarInfo = new long[]{19416L, 19168L, 42352L, 21717L, 53856L, 55632L, 91476L, 22176L, 39632L, 21970L, 19168L, 42422L, 42192L, 53840L, 119381L, 46400L, 54944L, 44450L, 38320L, 84343L, 18800L, 42160L, 46261L, 27216L, 27968L, 109396L, 11104L, 38256L, 21234L, 18800L, 25958L, 54432L, 59984L, 28309L, 23248L, 11104L, 100067L, 37600L, 116951L, 51536L, 54432L, 120998L, 46416L, 22176L, 107956L, 9680L, 37584L, 53938L, 43344L, 46423L, 27808L, 46416L, 86869L, 19872L, 42448L, 83315L, 21200L, 43432L, 59728L, 27296L, 44710L, 43856L, 19296L, 43748L, 42352L, 21088L, 62051L, 55632L, 23383L, 22176L, 38608L, 19925L, 19152L, 42192L, 54484L, 53840L, 54616L, 46400L, 46496L, 103846L, 38320L, 18864L, 43380L, 42160L, 45690L, 27216L, 27968L, 44870L, 43872L, 38256L, 19189L, 18800L, 25776L, 29859L, 59984L, 27480L, 21952L, 43872L, 38613L, 37600L, 51552L, 55636L, 54432L, 55888L, 30034L, 22176L, 43959L, 9680L, 37584L, 51893L, 43344L, 46240L, 47780L, 44368L, 21977L, 19360L, 42416L, 86390L, 21168L, 43312L, 31060L, 27296L, 44368L, 23378L, 19296L, 42726L, 42208L, 53856L, 60005L, 54576L, 23200L, 30371L, 38608L, 19415L, 19152L, 42192L, 118966L, 53840L, 54560L, 56645L, 46496L, 22224L, 21938L, 18864L, 42359L, 42160L, 43600L, 111189L, 27936L, 44448L};
-
-	private static final int yearDays(int y) {
-		int sum = 348;
-
-		for(int i = 32768; i > 8; i >>= 1) {
-			if ((lunarInfo[y - 1900] & (long)i) != 0L) {
-				++sum;
-			}
-		}
-
-		return sum + leapDays(y);
-	}
-
-	private static final int leapDays(int y) {
-		if (leapMonth(y) != 0) {
-			return (lunarInfo[y - 1900] & 65536L) != 0L ? 30 : 29;
-		} else {
-			return 0;
-		}
-	}
-
-	private static final int leapMonth(int y) {
-		return (int)(lunarInfo[y - 1900] & 15L);
-	}
-
-	private static final int monthDays(int y, int m) {
-		return (lunarInfo[y - 1900] & (long)(65536 >> m)) == 0L ? 29 : 30;
-	}
-
-	public final String animalsYear() {
-		String[] Animals = new String[]{"榧�", "鐗�", "铏�", "鍏�", "榫�", "铔�", "椹�", "缇�", "鐚�", "楦�", "鐙�", "鐚�"};
-		return Animals[(this.year - 4) % 12];
-	}
-
-	private static final String cyclicalm(int num) {
-		String[] Gan = new String[]{"鐢�", "涔�", "涓�", "涓�", "鎴�", "宸�", "搴�", "杈�", "澹�", "鐧�"};
-		String[] Zhi = new String[]{"瀛�", "涓�", "瀵�", "鍗�", "杈�", "宸�", "鍗�", "鏈�", "鐢�", "閰�", "鎴�", "浜�"};
-		return Gan[num % 10] + Zhi[num % 12];
-	}
-
-	public final String cyclical() {
-		int num = this.year - 1900 + 36;
-		return cyclicalm(num);
-	}
-
-	public Lunar(Calendar cal) {
-		//int leapMonth = false;
-		Date baseDate = null;
-
-		try {
-			baseDate = chineseDateFormat.parse("1900骞�1鏈�31鏃�");
-		} catch (ParseException var12) {
-			var12.printStackTrace();
-		}
-
-		int offset = (int)((cal.getTime().getTime() - baseDate.getTime()) / 86400000L);
-		int dayCyl = offset + 40;
-		int monCyl = 14;
-		int daysOfYear = 0;
-
-		int iYear;
-		for(iYear = 1900; iYear < 2050 && offset > 0; ++iYear) {
-			daysOfYear = yearDays(iYear);
-			offset -= daysOfYear;
-			monCyl += 12;
-		}
-
-		if (offset < 0) {
-			offset += daysOfYear;
-			--iYear;
-			monCyl -= 12;
-		}
-
-		this.year = iYear;
-		int yearCyl = iYear - 1864;
-		int leapMonth = leapMonth(iYear);
-		this.leap = false;
-		int daysOfMonth = 0;
-
-		int iMonth;
-		for(iMonth = 1; iMonth < 13 && offset > 0; ++iMonth) {
-			if (leapMonth > 0 && iMonth == leapMonth + 1 && !this.leap) {
-				--iMonth;
-				this.leap = true;
-				daysOfMonth = leapDays(this.year);
-			} else {
-				daysOfMonth = monthDays(this.year, iMonth);
-			}
-
-			offset -= daysOfMonth;
-			if (this.leap && iMonth == leapMonth + 1) {
-				this.leap = false;
-			}
-
-			if (!this.leap) {
-				++monCyl;
-			}
-		}
-
-		if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) {
-			if (this.leap) {
-				this.leap = false;
-			} else {
-				this.leap = true;
-				--iMonth;
-				--monCyl;
-			}
-		}
-
-		if (offset < 0) {
-			offset += daysOfMonth;
-			--iMonth;
-			--monCyl;
-		}
-
-		this.month = iMonth;
-		this.day = offset + 1;
-	}
-
-	public static String getChinaDayString(int day) {
-		String[] chineseTen = new String[]{"鍒�", "鍗�", "寤�", "鍗�"};
-		int n = day % 10 == 0 ? 9 : day % 10 - 1;
-		if (day > 30) {
-			return "";
-		} else {
-			return day == 10 ? "鍒濆崄" : chineseTen[day / 10] + chineseNumber[n];
-		}
-	}
-
-	@Override
-	public String toString() {
-		String m = chineseNumber[this.month - 1];
-		if (m != null && m.trim().equals("涓�")) {
-			m = "姝�";
-		}
-
-		if (m != null && m.trim().equals("鍗佷竴")) {
-			m = "鍐�";
-		}
-
-		if (m != null && m.trim().equals("鍗佷簩")) {
-			m = "鑵�";
-		}
-
-		return this.year + this.cyclical() + this.animalsYear() + "骞�" + (this.leap ? "闂�" : "") + m + "鏈�" + getChinaDayString(this.day);
-	}
-
-	public String getDate() {
-		String m = chineseNumber[this.month - 1];
-		if (m != null && m.trim().equals("涓�")) {
-			m = "姝�";
-		}
-
-		if (m != null && m.trim().equals("鍗佷竴")) {
-			m = "鍐�";
-		}
-
-		if (m != null && m.trim().equals("鍗佷簩")) {
-			m = "鑵�";
-		}
-
-		return this.animalsYear() + "骞�" + (this.leap ? "闂�" : "") + m + "鏈�" + getChinaDayString(this.day);
-	}
-
-	public static void main(String[] args) throws ParseException {
-		Calendar today = Calendar.getInstance();
-		today.setTime(chineseDateFormat.parse("2013骞�2鏈�1鏃�"));
-		Lunar lunar = new Lunar(today);
-		System.out.println(lunar.toString());
-		System.out.println("鍖椾含鏃堕棿锛�" + chineseDateFormat.format(today.getTime()) + "銆�鍐滃巻" + lunar);
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/MessageUtils.java
deleted file mode 100644
index cbfa31b..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/MessageUtils.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.util;
-
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//package com.vci.starter.web.util;
-
-import org.springframework.context.MessageSource;
-import org.springframework.context.i18n.LocaleContextHolder;
-import org.springframework.stereotype.Component;
-
-@Component
-public class MessageUtils {
-	private static MessageSource messageSource;
-
-	public MessageUtils(MessageSource messageSource) {
-		MessageUtils.messageSource = messageSource;
-	}
-
-	public static String get(String msgKey) {
-		try {
-			return messageSource.getMessage(msgKey, (Object[])null, LocaleContextHolder.getLocale());
-		} catch (Throwable var2) {
-			return msgKey;
-		}
-	}
-
-	public static String get(String msgKey, Object[] objects) {
-		try {
-			return messageSource.getMessage(msgKey, objects, LocaleContextHolder.getLocale());
-		} catch (Throwable var3) {
-			return msgKey;
-		}
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/VciBaseUtil.java
deleted file mode 100644
index 58336f4..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/VciBaseUtil.java
+++ /dev/null
@@ -1,1211 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.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.toolmodel.DateConverter;
-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 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) {
-		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);
-		}
-	}
-
-	public static <T> Collection<Collection<T>> switchCollectionForOracleIn(Collection<T> list) {
-		return switchCollectionForOracleIn(list, 500);
-	}
-
-	public static <T> Collection<Collection<T>> switchCollectionForOracleIn(Collection<T> collection, int preSize) {
-		Collection<Collection<T>> listHasList = new ArrayList();
-		if (collection == null) {
-			return listHasList;
-		} else {
-			List<T> newList = new ArrayList();
-			Iterator var4 = collection.iterator();
-
-			while(var4.hasNext()) {
-				Object obj = var4.next();
-				newList.add((T) obj);
-			}
-
-			int muti = 1;
-			int i;
-			if (newList.size() > preSize) {
-				i = newList.size() % preSize;
-				muti = (newList.size() - i) / preSize + (i == 0 ? 0 : 1);
-			}
-
-			for(i = 0; i < muti; ++i) {
-				int start = i * preSize;
-				int end = start + preSize;
-				if (i == muti - 1 || end > newList.size()) {
-					end = newList.size();
-				}
-
-				List subList = newList.subList(start, end);
-				listHasList.add(subList);
-			}
-
-			return listHasList;
-		}
-	}
-	public static short getShort(String s) {
-//		short i = false;
-		if (s == null) {
-			return 0;
-		} else {
-			try {
-				short i = Short.parseShort(s);
-				return i;
-			} catch (Exception var3) {
-				return 0;
-			}
-		}
-	}
-
-	public static void setValueForField(Field field, Object obj, String value) {
-		try {
-			if (field != null && StringUtils.isNotBlank(value)) {
-				field.setAccessible(true);
-				Method setMethod = getSetmethod(field.getDeclaringClass(), field.getName());
-				Class type = field.getType();
-				Object valueObj = null;
-				if (!type.equals(Integer.TYPE) && !type.equals(Integer.class)) {
-					if (!type.equals(Float.TYPE) && !type.equals(Float.class)) {
-						if (!type.equals(Long.TYPE) && !type.equals(Long.class)) {
-							if (!type.equals(Double.class) && !type.equals(Double.TYPE)) {
-								if (type.equals(Date.class)) {
-									DateConverter dateConverter = new DateConverter();
-									dateConverter.setAsText(value);
-									valueObj = dateConverter.getValue();
-								} else if (type.equals(String.class)) {
-									valueObj = value;
-								} else {
-									valueObj = value;
-									if (log.isErrorEnabled()) {
-										log.error("涓嶆敮鎸佺殑绫诲瀷" + type.toString());
-									}
-								}
-							} else {
-								valueObj = getDouble(value);
-							}
-						} else {
-							valueObj = getLong(value);
-						}
-					} else {
-						valueObj = getFloat(value);
-					}
-				} else {
-					valueObj = getInt(value);
-				}
-
-				if (setMethod != null) {
-					setMethod.invoke(obj, valueObj);
-				} else {
-					field.set(obj, valueObj);
-				}
-			}
-		} catch (Throwable var7) {
-			if (log.isErrorEnabled()) {
-				log.error("璁剧疆灞炴�х殑鍊煎嚭閿欎簡閿欒", var7);
-			}
-		}
-
-	}
-
-}
-
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/VciDateUtil.java
deleted file mode 100644
index 5ab4990..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/VciDateUtil.java
+++ /dev/null
@@ -1,638 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.util;
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-
-import java.sql.Timestamp;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
-import java.util.*;
-
-public class VciDateUtil {
-	private static final String DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
-	public static final String DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
-	public static final String DateTimeFormatStr = "yyyyMMddHHmmss";
-	public static final String DateTimeMillFormatStr = "yyyyMMddHHmmssSSS";
-	public static final String DateTimeMillFormat = "yyyy-MM-dd HH:mm:ss.SSS";
-	public static final String DateFormat = "yyyy-MM-dd";
-	public static final String TimeFormat = "HH:mm:ss";
-
-	private VciDateUtil() {
-	}
-
-	public static Date str2Date(String str, String format) throws Exception {
-		if (null != str && !"".equals(str) && !str.equals("null")) {
-			if (null == format || "".equals(format) || format.equals("null")) {
-				format = "yyyy-MM-dd HH:mm:ss.SSS";
-			}
-
-			SimpleDateFormat sdf = new SimpleDateFormat(format);
-			Date date = null;
-
-			try {
-				date = sdf.parse(str);
-				return date;
-			} catch (ParseException var5) {
-				throw new Exception(var5);
-			}
-		} else {
-			return null;
-		}
-	}
-
-	public static Date getCurrentMonday() {
-		return getCurrentWeekDay(2);
-	}
-
-	public static Date getCurrentWeekDay(int dayOfWeek) {
-		if (dayOfWeek > 7) {
-			dayOfWeek = 7;
-		}
-
-		if (dayOfWeek < 1) {
-			dayOfWeek = 1;
-		}
-
-		Date date = new Date();
-		Calendar calendar = Calendar.getInstance();
-		calendar.setTime(date);
-		calendar.set(7, dayOfWeek);
-		calendar.set(11, 0);
-		calendar.set(12, 0);
-		calendar.set(13, 0);
-		calendar.set(14, 0);
-		return calendar.getTime();
-	}
-
-	public static Date getCurrentFriday() {
-		return getCurrentWeekDay(6);
-	}
-
-	public static String date2Str(Date date, String format) {
-		if (null == date) {
-			return null;
-		} else {
-			if (format == null || format.trim().length() == 0) {
-				format = "yyyy-MM-dd HH:mm:ss.SSS";
-			}
-
-			SimpleDateFormat sdf = new SimpleDateFormat(format);
-			return sdf.format(date);
-		}
-	}
-
-	public static String timestamp2Str(Timestamp time) {
-		Date date = null;
-		if (null == time) {
-			return null;
-		} else {
-			if (null != time) {
-				date = new Date(time.getTime());
-			}
-
-			return date2Str(date, "yyyy-MM-dd HH:mm:ss.SSS");
-		}
-	}
-
-	public static Timestamp str2Timestamp(String str) throws Exception {
-		if (str != null && str.trim().length() != 0) {
-			Date date = str2Date(str, "yyyy-MM-dd HH:mm:ss.SSS");
-			return new Timestamp(date.getTime());
-		} else {
-			return null;
-		}
-	}
-
-	public static String compareDate(String date, String date1) throws Exception {
-		if (date != null && date.trim().length() != 0 && date1 != null && date1.trim().length() != 0) {
-			try {
-				long time = str2Date(date, "yyyy-MM-dd").getTime();
-				long time1 = str2Date(date1, "yyyy-MM-dd").getTime();
-				if (time == time1) {
-					return "=";
-				} else if (time < time1) {
-					return "<";
-				} else {
-					return time > time1 ? ">" : "";
-				}
-			} catch (Exception var6) {
-				throw var6;
-			}
-		} else {
-			throw new Exception("浼犲叆compareDate鐨勫弬鏁颁负绌�");
-		}
-	}
-
-	public static String compareDate(Date date, Date date1) {
-		if (date != null && date1 != null) {
-			long time = date.getTime();
-			long time1 = date1.getTime();
-			if (time == time1) {
-				return "=";
-			} else if (time < time1) {
-				return "<";
-			} else {
-				return time > time1 ? ">" : "";
-			}
-		} else {
-			return "";
-		}
-	}
-
-	public static String dateTimeAddMinutes(String date, int minute) throws Exception {
-		String ret = "";
-		if (date == null || date.equals("")) {
-			date = date2Str(getNow(), "yyyy-MM-dd HH:mm:ss.SSS");
-		}
-
-		if (minute == 0) {
-			return date;
-		} else {
-			Date d = str2Date(date, "yyyy-MM-dd HH:mm:ss");
-			Calendar cal = Calendar.getInstance();
-			cal.setTime(d);
-			cal.add(12, minute);
-			return date2Str(cal.getTime(), "yyyy-MM-dd HH:mm:ss");
-		}
-	}
-
-	public static Date getDateAddDay(String date, int dayCount) throws Exception {
-		if (date != null && !date.equals("") && !date.equals("null")) {
-			if (dayCount == 0) {
-				return str2Date(date, "yyyy-MM-dd");
-			} else {
-				Date d = str2Date(date, "yyyy-MM-dd");
-				Calendar cal = Calendar.getInstance();
-				cal.setTime(d);
-				cal.add(5, dayCount);
-				return cal.getTime();
-			}
-		} else {
-			return getNow();
-		}
-	}
-
-	public static Date getDateAddDay(Date date, int dayCount) {
-		if (dayCount == 0) {
-			return date;
-		} else {
-			Calendar cal = Calendar.getInstance();
-			cal.setTime(date);
-			cal.add(5, dayCount);
-			return cal.getTime();
-		}
-	}
-
-	public static long getDaySub(String beginDateStr, String endDateStr) {
-		if (beginDateStr != null && !beginDateStr.trim().equals("") && endDateStr != null && !endDateStr.trim().equals("")) {
-			long day = 0L;
-			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-
-			try {
-				Date beginDate = format.parse(beginDateStr);
-				Date endDate = format.parse(endDateStr);
-				day = (endDate.getTime() - beginDate.getTime()) / 86400000L;
-			} catch (ParseException var8) {
-				var8.printStackTrace();
-			}
-
-			return day;
-		} else {
-			return 0L;
-		}
-	}
-
-	public static long getDaySub(Date date, Date date1) {
-		return (date.getTime() - date1.getTime()) / 86400000L;
-	}
-
-	public static Date addOrSubDate(Date d, int addDayType, int addCount) {
-		Calendar cal = Calendar.getInstance();
-		cal.setTime(d);
-		cal.add(addDayType, addCount);
-		return cal.getTime();
-	}
-
-	public static Date getNow() {
-		return new Date();
-	}
-
-	public static String getNowString() {
-		return getNowString("yyyy-MM-dd HH:mm:ss.SSS");
-	}
-
-	public static String getNowString(String simpleDateFormat) {
-		Date currentTime = new Date();
-		SimpleDateFormat formatter = new SimpleDateFormat(simpleDateFormat);
-		return formatter.format(currentTime);
-	}
-
-	public static Date getNow(String simpleDateFormat) throws Exception {
-		return str2Date(getNowString(simpleDateFormat), simpleDateFormat);
-	}
-
-	public static String getCountdown(String oldtime, String newTime) {
-		if (oldtime != null && !oldtime.trim().equals("") && newTime != null && !newTime.equals("")) {
-			try {
-				Date date1 = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse(oldtime);
-				Date date2 = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse(newTime);
-				long l = date1.getTime() - date2.getTime() > 0L ? date1.getTime() - date2.getTime() : date2.getTime() - date1.getTime();
-				long d = 0L;
-				long yushu = l;
-				long h = 0L;
-				long m = 0L;
-				if (l > 86400000L) {
-					yushu = l % 86400000L;
-					d = (l - yushu) / 86400000L;
-				}
-
-				if (yushu > 3600000L) {
-					h = (yushu - yushu % 3600000L) / 3600000L;
-					yushu %= 3600000L;
-				}
-
-				if (yushu > 60000L) {
-					m = (yushu - yushu % 60000L) / 60000L;
-				}
-
-				return date1.getTime() - date2.getTime() < 0L ? "宸茬粡瓒呮湡" + d + "澶�" + h + "灏忔椂" + m + "鍒�" : "杩樺墿涓�" + d + "澶�" + h + "灏忔椂" + m + "鍒�";
-			} catch (Exception var14) {
-				return "";
-			}
-		} else {
-			return "";
-		}
-	}
-
-	public static long getDateDiffer(String oldTime, String newTime) {
-		if (oldTime != null && !oldTime.trim().equals("") && newTime != null && !newTime.equals("")) {
-			try {
-				Date date1 = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse(oldTime);
-				Date date2 = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse(newTime);
-				return date1.getTime() - date2.getTime();
-			} catch (Exception var4) {
-				return 0L;
-			}
-		} else {
-			return 0L;
-		}
-	}
-
-	public static int getWeeks(int year) {
-		if (year == 0) {
-			return year;
-		} else {
-			//int week = false;
-			int days = 365;
-			if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
-				days = 366;
-			}
-
-			int week = days / 7;
-			return week;
-		}
-	}
-
-	public static int getWeekOnDate(Date date) {
-		GregorianCalendar g = new GregorianCalendar();
-		g.setTime(date);
-		return isSunday(date) ? g.get(3) - 1 : g.get(3);
-	}
-
-	public static Calendar getCalendarFromWeek(String year, int week) throws Exception {
-		Date newDate = str2Date(year + "-01-01", "yyyy-MM-dd");
-		Calendar caleNew = Calendar.getInstance();
-		caleNew.setTime(newDate);
-		caleNew.add(3, week - 1);
-		return caleNew;
-	}
-
-	public static String[] getDaysInWeek(int year, int week) {
-		String[] thisWeek = new String[7];
-
-		try {
-			GregorianCalendar gc = (GregorianCalendar)getCalendarFromWeek(year + "-01-01", week);
-
-			for(int i = 0; i < 7; ++i) {
-				Calendar myCale = Calendar.getInstance();
-				myCale.setTime(gc.getTime());
-				myCale.set(5, gc.get(5) - gc.get(7) + i + 2);
-				thisWeek[i] = date2Str(myCale.getTime(), "yyyy-MM-dd");
-			}
-		} catch (Exception var6) {
-			System.out.println(var6.getMessage());
-		}
-
-		return thisWeek;
-	}
-
-	public static boolean isSunday() {
-		return isSunday(new Date());
-	}
-
-	public static boolean isSunday(Date date) {
-		Calendar calendar = Calendar.getInstance();
-		calendar.setTime(date);
-		int week = calendar.get(7) - 1;
-		return week == 0;
-	}
-
-	public static boolean isWeekend(Date date) {
-		Calendar calendar = Calendar.getInstance();
-		calendar.setTime(date);
-		int week = calendar.get(7) - 1;
-		return week == 0 || week == 1;
-	}
-
-	public static boolean isFriday(Date date) {
-		Calendar calendar = Calendar.getInstance();
-		calendar.setTime(date);
-		int week = calendar.get(7) - 1;
-		return week == 5;
-	}
-
-	public static boolean isMouthEnd(Date date) {
-		Calendar calendar = Calendar.getInstance();
-		calendar.setTime(date);
-		int dayOfMonth = calendar.get(5);
-		int endMonth = calendar.getActualMaximum(5);
-		return endMonth == dayOfMonth;
-	}
-
-	public static boolean isSeasonEnd(Date date) {
-		Calendar calendar = Calendar.getInstance();
-		calendar.setTime(date);
-		int y = calendar.get(2) + 1;
-		int d = calendar.get(5);
-		if (y == 3 && d == 31) {
-			return true;
-		} else if (y == 6 && d == 30) {
-			return true;
-		} else if (y == 9 && d == 30) {
-			return true;
-		} else {
-			return y == 12 && d == 31;
-		}
-	}
-
-	public static boolean isYearEnd(Date date) {
-		Calendar calendar = Calendar.getInstance();
-		calendar.setTime(date);
-		int y = calendar.get(2) + 1;
-		int d = calendar.get(5);
-		return y == 12 && d == 31;
-	}
-
-	public static Long getProcessedTime(Date newDate, Date startDate) {
-		try {
-			Long p = newDate.getTime() - startDate.getTime();
-			return p;
-		} catch (Exception var3) {
-			return 0L;
-		}
-	}
-
-	public static String getProcessedTime(Date startDate) {
-		return getProcessedTime(new Date(), startDate) + "ms";
-	}
-
-	public static String getCurrentYear() {
-		Calendar c = Calendar.getInstance();
-		return String.valueOf(c.get(1) + 1900);
-	}
-
-	public static String getCurrentYearStart() {
-		return getCurrentYear() + "-01-01 00:00:00";
-	}
-
-	public static String getCurrentYearEnd() {
-		return getCurrentYear() + "-12-31 23:59:59";
-	}
-
-	public static String getCurrentQuarter() {
-		String currentMouth = getCurrentMouth();
-		int currentMouthInt = getInt(currentMouth);
-		if (currentMouthInt > 0 && currentMouthInt <= 3) {
-			return "1";
-		} else if (currentMouthInt > 3 && currentMouthInt <= 6) {
-			return "2";
-		} else {
-			return currentMouthInt > 6 && currentMouthInt <= 9 ? "3" : "4";
-		}
-	}
-
-	private static int getInt(String s) {
-		try {
-			return Integer.valueOf(s);
-		} catch (Exception var2) {
-			return 0;
-		}
-	}
-
-	public static String getCurrentQuarterStart() {
-		String currentQuarter = getCurrentQuarter();
-		if ("1".equalsIgnoreCase(currentQuarter)) {
-			return getCurrentYearStart();
-		} else if ("2".equalsIgnoreCase(currentQuarter)) {
-			return getCurrentYear() + "-04-01 00:00:00";
-		} else {
-			return "3".equalsIgnoreCase(currentQuarter) ? getCurrentYear() + "-07-01 00:00:00" : getCurrentYear() + "-10-01 00:00:00";
-		}
-	}
-
-	public static String getCurrentQuarterEnd() {
-		String currentQuarter = getCurrentQuarter();
-		if ("1".equalsIgnoreCase(currentQuarter)) {
-			return getCurrentYear() + "-03-31 23:59:59";
-		} else if ("2".equalsIgnoreCase(currentQuarter)) {
-			return getCurrentYear() + "-06-30 23:59:59";
-		} else {
-			return "3".equalsIgnoreCase(currentQuarter) ? getCurrentYear() + "-09-30 23:59:59" : getCurrentYear() + "-12-31 23:59:59";
-		}
-	}
-
-	public static String getCurrentMouth() {
-		Calendar cal = Calendar.getInstance();
-		cal.setTime(getNow());
-		int m = cal.get(2);
-		return m < 10 ? "0" + String.valueOf(m) : String.valueOf(m);
-	}
-
-	public static String getCurrentMouthStart() {
-		String currentMouth = getCurrentMouth();
-		return getCurrentYear() + "-" + currentMouth + "-01 00:00:00";
-	}
-
-	public static String getCurrentMouthEnd() {
-		String currentMouth = getCurrentMouth();
-		int currentMouthInt = getInt(currentMouth);
-		if (currentMouthInt != 1 && currentMouthInt != 3 && currentMouthInt != 5 && currentMouthInt != 7 && currentMouthInt != 8 && currentMouthInt != 10 && currentMouthInt != 12) {
-			if (currentMouthInt == 2) {
-				return isLeapYear(getInt(getCurrentYear())) ? getCurrentYear() + "-" + currentMouth + "-29 23:59:59" : getCurrentYear() + "-" + currentMouth + "-28 23:59:59";
-			} else {
-				return getCurrentYear() + "-" + currentMouth + "-30 23:59:59";
-			}
-		} else {
-			return getCurrentYear() + "-" + currentMouth + "-31 23:59:59";
-		}
-	}
-
-	public static boolean isLeapYear(int year) {
-		return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
-	}
-
-	public static String getCurrentDay() {
-		Calendar cal = Calendar.getInstance();
-		cal.setTime(getNow());
-		int day = cal.get(5);
-		return day < 10 ? "0" + String.valueOf(day) : String.valueOf(day);
-	}
-
-	public static String getCurrentDayStart() {
-		return LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-	}
-
-	public static String getCurrentDayEnd() {
-		return LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MAX).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-	}
-
-	public static List<Date> getDateInRange(Date dBegin, Date dEnd) {
-		List lDate = new ArrayList();
-		lDate.add(dBegin);
-		Calendar calBegin = Calendar.getInstance();
-		calBegin.setTime(dBegin);
-		Calendar calEnd = Calendar.getInstance();
-		calEnd.setTime(dEnd);
-
-		while(dEnd.after(calBegin.getTime())) {
-			calBegin.add(5, 1);
-			lDate.add(calBegin.getTime());
-		}
-
-		return lDate;
-	}
-
-	public static Date getDateFromStringForVci(String value) {
-		Date d = null;
-		if (StringUtils.isNotBlank(value)) {
-			try {
-				if (value.indexOf("-") > -1 && value.indexOf(".") > -1 && value.indexOf(" ") > -1 && value.substring(value.lastIndexOf(".") + 1).length() >= 9) {
-					String ymd = value.substring(0, value.indexOf("."));
-					value = value.substring(value.indexOf(".") + 1);
-					if (value.indexOf(".") > -1) {
-						String hms = value.substring(0, value.lastIndexOf("."));
-						String nano = value.substring(value.lastIndexOf(".") + 1).trim();
-						if (nano.length() > 3) {
-							nano = nano.substring(0, 3);
-						}
-
-						hms = hms.replace(".", ":").replace(" ", "");
-						Date tempDate = str2Date(ymd + " " + hms, "yyyy-M-d h:m:s");
-						if (tempDate != null) {
-							d = str2Date(date2Str(tempDate, "yyyy-MM-dd HH:mm:ss") + "." + nano, "yyyy-MM-dd HH:mm:ss.SSS");
-						}
-					}
-				} else if (VciBaseUtil.isNumber(value)) {
-					d = new Date();
-
-					try {
-						d = str2Date(value, "yyyyMMddHHmmssSSS");
-					} catch (Exception var8) {
-						if (value.length() != 14) {
-							d.setTime(VciBaseUtil.getLong(value));
-						} else {
-							try {
-								d = str2Date(value, "yyyyMMddHHmmss");
-								Calendar cal = Calendar.getInstance();
-								cal.setTime(d);
-								if (cal.get(1) < 1900) {
-									d.setTime(VciBaseUtil.getLong(value));
-								}
-							} catch (Exception var7) {
-								d.setTime(VciBaseUtil.getLong(value));
-							}
-						}
-					}
-				} else {
-					d = str2Date(value, "yyyy-MM-dd HH:mm:ss.SSS");
-				}
-			} catch (Exception var9) {
-				try {
-					d = str2Date(value, "yyyy-MM-dd HH:mm:ss.SSS");
-				} catch (Exception var6) {
-				}
-			}
-		}
-
-		return d;
-	}
-
-	public static Date readText2Date(String text) {
-		if (VciBaseUtil.isNullOrNullString(text)) {
-			return null;
-		} else {
-			SimpleDateFormat dateFormat = null;
-			int exactDateLength = 0;
-			if (text.trim().indexOf("/") > -1 && text.trim().length() == 19) {
-				exactDateLength = 19;
-				dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
-			} else if (text.trim().indexOf("/") > -1 && text.trim().length() == 17) {
-				exactDateLength = 17;
-				dateFormat = new SimpleDateFormat("yy/MM/dd HH:mm:ss");
-			} else if (text.trim().indexOf("/") > -1 && text.trim().length() == 8) {
-				exactDateLength = 8;
-				dateFormat = new SimpleDateFormat("yy/MM/dd");
-			} else if (text.trim().indexOf("-") > -1 && text.trim().length() >= 19) {
-				if (text.trim().length() == 19) {
-					exactDateLength = 19;
-					dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-				} else if (text.trim().length() == 23) {
-					exactDateLength = 23;
-					dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
-				}
-			} else if (text.trim().indexOf("-") > -1 && text.trim().length() == 17) {
-				exactDateLength = 17;
-				dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
-			} else if (text.trim().indexOf("-") > -1 && text.trim().length() == 8) {
-				exactDateLength = 8;
-				dateFormat = new SimpleDateFormat("yy-MM-dd");
-			} else {
-				exactDateLength = 19;
-				dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-			}
-
-			if (text != null && exactDateLength >= 0 && text.length() != exactDateLength) {
-				throw new IllegalArgumentException("涓嶈兘鍒濆鍖栨椂闂达紝鍥犱负鍐呭涓嶅埌" + exactDateLength + "闀垮害");
-			} else {
-				try {
-					return str2Date(date2Str(dateFormat.parse(text), "yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd HH:mm:ss.SSS");
-				} catch (ParseException var4) {
-					throw new IllegalArgumentException("涓嶈兘鏍煎紡鍖栨棩鏈�: " + var4.getMessage(), var4);
-				} catch (Exception var5) {
-					throw new IllegalArgumentException("涓嶈兘鏍煎紡鍖栨棩鏈�: " + var5.getMessage(), var5);
-				}
-			}
-		}
-	}
-
-	public static String getChinaDate(String d) throws Exception {
-		Date s = str2Date(d, "yyyy-MM-dd");
-		SimpleDateFormat chineseDateFormat = new SimpleDateFormat("yyyy骞碝M鏈坉d鏃�");
-		Calendar today = Calendar.getInstance();
-
-		try {
-			today.setTime(chineseDateFormat.parse(date2Str(s, "yyyy骞碝M鏈坉d鏃�")));
-		} catch (ParseException var5) {
-			throw new Exception(var5);
-		}
-
-		Lunar lunar = new Lunar(today);
-		return lunar.getDate();
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/WebThreadLocalUtil.java
deleted file mode 100644
index c9a342a..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/WebThreadLocalUtil.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.vci.ubcs.com.vci.starter.web.util;
-
-//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by FernFlower decompiler)
-//
-
-//package com.vci.starter.web.util;
-
-
-import com.vci.ubcs.com.vci.starter.web.pagemodel.SessionInfo;
-
-public class WebThreadLocalUtil {
-	private static ThreadLocal<SessionInfo> currentUserSessionInfoInThread = new ThreadLocal();
-	private static ThreadLocal<String> needQueryTotalInThread = new ThreadLocal();
-
-	public WebThreadLocalUtil() {
-	}
-
-	public static ThreadLocal<SessionInfo> getCurrentUserSessionInfoInThread() {
-		return currentUserSessionInfoInThread;
-	}
-
-	public static void setCurrentUserSessionInfoInThread(ThreadLocal<SessionInfo> currentUserSessionInfoInThread) {
-		WebThreadLocalUtil.currentUserSessionInfoInThread = currentUserSessionInfoInThread;
-	}
-
-	public static ThreadLocal<String> getNeedQueryTotalInThread() {
-		return needQueryTotalInThread;
-	}
-
-	public static void setNeedQueryTotalInThread(ThreadLocal<String> needQueryTotalInThread) {
-		WebThreadLocalUtil.needQueryTotalInThread = needQueryTotalInThread;
-	}
-}
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-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/WebUtil.java
deleted file mode 100644
index 08f31bc..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/com/vci/starter/web/util/WebUtil.java
+++ /dev/null
@@ -1,712 +0,0 @@
-package com.vci.ubcs.com.vci.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 org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.*;
-import java.math.BigDecimal;
-import java.net.InetAddress;
-import java.net.NetworkInterface;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 閫氱敤宸ュ叿绫�
- * @author weidy
- * @date 2021-2-13
- */
-@Component
-public  class WebUtil extends VciBaseUtil {
-
-	/**
-	 * 鍏ㄩ儴鏍囪锛屽父鐢ㄨ鏍戝舰灞曠ず鏃�
-	 */
-	public static final String ALL = "${all}";
-
-	/**
-	 * 鏄惁鎸佷箙鍖�
-	 */
-	private static ThreadLocal<String> needPersistenceInThread = new ThreadLocal<>();
-	/**
-	 * 鏃ュ織瀵硅薄
-	 */
-	private static Logger logger = LoggerFactory.getLogger(WebUtil.class);
-
-	/**
-	 * json瀛楃涓茶浆涓哄璞�
-	 * @param jsonString json鐨勫瓧绗︿覆
-	 * @param beanClass bean鐨勭被
-	 * @return bean
-	 */
-	public static <T> T jsonString2JavaBean(String jsonString,Class<T> beanClass){
-		return (T)JSONObject.parseObject(jsonString,  beanClass);
-	}
-
-	/**
-	 * 浠巎son瀛楃涓蹭腑鑾峰彇绗竴涓璞�
-	 * @param jsonString json鐨勫瓧绗︿覆
-	 * @param beanClass Bean鐨勭被
-	 * @return 浠庡垪琛ㄩ噷鑾峰彇绗竴涓璞�
-	 */
-	public static <T> T getFirstObjectFromJson(String jsonString,Class<T> beanClass){
-		if(!isNull(jsonString)) {
-			return JSONObject.parseArray(jsonString, beanClass).get(0);
-		} else {
-			return null;
-		}
-	}
-
-	/**
-	 * 鑾峰彇sessionInfo瀵硅薄
-	 * @return 鑾峰彇褰撳墠鐢ㄦ埛鐨勪俊鎭�
-	 */
-	public static SessionInfo getSessionInfo(){
-		try{
-			return getCurrentUserSessionInfoNotException();
-		}catch(Exception e){
-			return null;
-		}
-	}
-
-	/**
-	 * 鑾峰彇褰撳墠绾跨▼涓殑鐢ㄦ埛瀵硅薄
-	 * @return 褰撳墠鐢ㄦ埛淇℃伅
-	 * @throws VciBaseException 娌℃湁鐧诲綍浼氭姏鍑哄紓甯�
-	 */
-	public static SessionInfo getCurrentUserSessionInfo() throws VciBaseException{
-		SessionInfo si= getCurrentUserSessionInfoNotException();
-		if(si==null){
-			throw new VciBaseException("noLogin",new String[]{"娌℃湁褰撳墠鐢ㄦ埛淇℃伅"});
-		}
-		return si;
-	}
-
-	/**
-	 * 鑾峰彇褰撳墠绾跨▼涓殑鐢ㄦ埛瀵硅薄
-	 * @return 鐢ㄦ埛瀵硅薄锛屼絾鏄笉鎶涘嚭寮傚父
-	 */
-	public static SessionInfo getCurrentUserSessionInfoNotException() {
-		return WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get();
-	}
-
-	/**
-	 * 璁剧疆鐢ㄦ埛鐨勪細璇濅俊鎭璞�
-	 * @param sessionInfo 浼氳瘽淇℃伅
-	 */
-	public static synchronized void setSessionInfo(SessionInfo sessionInfo){
-		WebThreadLocalUtil.getCurrentUserSessionInfoInThread().set(sessionInfo);
-	}
-
-	/**
-	 * 鏄惁璁剧疆浜哻orba闇�瑕佷娇鐢ㄧ殑涓婁笅鏂囦俊鎭紝鍙拡瀵箇ebService鐨�
-	 */
-	private static volatile boolean isSetContext = false;
-
-	/**
-	 * 鑾峰彇IP鍦板潃锛岄�氳繃request
-	 * @param request 璇锋眰鐨勫璞�
-	 * @return ip鍦板潃
-	 */
-	public static String getClientInfo(HttpServletRequest request){
-		String ip = request.getHeader("X-Forwarded-For");
-		if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("Proxy-Client-IP");
-		}
-		if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("WL-Proxy-Client-IP");
-		}
-		if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("HTTP_CLIENT_IP");
-		}
-		if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getHeader("HTTP_X_FORWARDED_FOR");
-		}
-		if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
-			ip = request.getRemoteAddr();
-		}
-		if (StringUtils.isBlank(ip) || ip.indexOf("0:0:0:0:0:0:0:1") >-1) {//0:0:0:0:0:0:0:1鏄湰鏈哄湪璁块棶
-			ip = "127.0.0.1";
-		}
-		return ip;
-	}
-
-	/**
-	 * 璁剧疆鏄惁鎸佷箙鍖�
-	 * @param isPersistence 鏄惁鎸佷箙鍖�
-	 */
-	public static void setPersistence(boolean isPersistence){
-		if(!isPersistence){
-			needPersistenceInThread.set("false");
-		}else{
-			needPersistenceInThread.set("");
-		}
-	}
-
-
-	/**
-	 * 灏嗗璞¤浆鎹负瀛楃涓插嚭鏉�
-	 * @return json瀛楃涓�
-	 */
-	public static String getJSONStringWithDateFormat(Object obj){
-		return JSONObject.toJSONStringWithDateFormat(obj, VciDateUtil.DateTimeMillFormat, SerializerFeature.WriteDateUseDateFormat);
-	}
-
-	/**
-	 * 鏈�鏂拌浆鎹负map
-	 * @param o 瀵硅薄
-	 * @return map
-	 */
-	public static Map<String,Object> objectToMap(Object o){
-		Map<String,Object> map = new HashMap<String,Object>();
-		if(o!=null) {
-			String jsonString = JSONObject.toJSONStringWithDateFormat(o, VciDateUtil.DateTimeMillFormat, SerializerFeature.WriteDateUseDateFormat);
-			if(StringUtils.isNotBlank(jsonString)) {
-				JSONObject jsonObject = JSONObject.parseObject(jsonString);
-				if(jsonObject!=null){
-					for(String key : jsonObject.keySet()){
-						map.put(key,jsonObject.get(key));
-					}
-				}
-			}
-		}
-		return map;
-	}
-
-	/**
-	 * 瀵硅薄杞崲涓簃ap
-	 * @param o 瀵硅薄
-	 * @return map
-	 */
-	public static Map<String,String> objectToMapString(Object o){
-		Map<String,String> map = new HashMap<String,String>();
-		if(o!=null) {
-			String jsonString = JSONObject.toJSONStringWithDateFormat(o, VciDateUtil.DateTimeMillFormat, SerializerFeature.WriteDateUseDateFormat);
-			if(StringUtils.isNotBlank(jsonString)) {
-				JSONObject jsonObject = JSONObject.parseObject(jsonString);
-				if(jsonObject!=null){
-					for(String key : jsonObject.keySet()){
-						map.put(key,jsonObject.getString(key));
-					}
-				}
-			}
-		}
-		return map;
-	}
-
-	/**
-	 * 鍒ゆ柇鏌愪釜灞炴�ф槸鍚︿负绌�
-	 * @param obj 瀵硅薄
-	 * @param f 瀛楁
-	 * @return true鏄笉绌�
-	 */
-	public static boolean isNotNullForField(Object obj,Field f){
-		if(!"serialVersionUID".equalsIgnoreCase(f.getName()) &&!"DEFAULT_INITIAL_CAPACITY".equalsIgnoreCase(f.getName())&&null!=obj && !WebUtil.isNullOrNullString(obj.toString())) {
-			return true;
-		} else {
-			return false;
-		}
-	}
-
-	/**
-	 * 鏁扮粍杞崲涓哄瓧绗︿覆
-	 * @param array 鏁扮粍
-	 * @return 瀛楃涓�
-	 */
-	public static String array2String(String[] array) {
-		if(null == array || array.length == 0) {
-			return "";
-		}else{
-			return Arrays.stream(array).collect(Collectors.joining(","));
-		}
-	}
-
-	/**
-	 * 瀵硅薄杞崲涓哄瓧绗︿覆
-	 * @param obj 瀵硅薄
-	 * @return 瀛楃涓�
-	 */
-	public static String getString(Object obj){
-		if(obj == null) {
-			return "";
-		}
-		if(obj instanceof Date) {
-			return VciDateUtil.date2Str((Date) obj, VciDateUtil.DateTimeFormat);
-		}
-		return String.valueOf(obj);
-	}
-
-	/**
-	 * 鎷疯礉map閲岀殑鍊�
-	 * @param source 婧�
-	 * @param target 鐩爣
-	 * @param copyField 鎷疯礉鐨勫睘鎬�
-	 */
-	public static void copyValueForMap(Map source,Map target,String[] copyField){
-		Map<String,String> copyFieldMap = new HashMap<String,String>();
-		for(String field : copyField) {
-			copyFieldMap.put(field, field);
-		}
-		copyValueForMap(source,target,copyFieldMap);
-	}
-	/**
-	 * 涓簃ap鎷疯礉鍊�
-	 * @param source 婧�
-	 * @param target 鐩爣
-	 * @param copyField key涓虹洰鏍囧璞¢噷鐨勫瓧娈碉紝
-	 */
-	public static void copyValueForMap(Map source,Map target,Map<String,String> copyField){
-		try{
-			Iterator<String> it = copyField.keySet().iterator();
-			while(it.hasNext()){
-				String field = it.next();
-				target.put(field, source.get(copyField.get(field)));
-			}
-		}catch(Exception e){
-			if(logger.isErrorEnabled()){
-				logger.error("鎷疯礉鍊煎埌map",e);
-			}
-		}
-	}
-
-	/**
-	 * 浠嶮ap閲岃幏鍙杁ouble绫诲瀷
-	 * @param field 瀛楁鍚嶇О
-	 * @param record map
-	 * @return 灞炴��
-	 */
-	public static Double getDoubleFromMap(String field,
-										  Map<String, Object> record) {
-		if(WebUtil.isNullOrNullString(field) || record == null || !record.containsKey(field)) {
-			return null;
-		}else{
-			Object v = record.get(field);
-			if(v instanceof BigDecimal){
-				return ((BigDecimal)v).doubleValue();
-			}else if(v instanceof Double){
-				return ((Double)v).doubleValue();
-			}else{
-				return WebUtil.getDouble((String)v);
-			}
-		}
-	}
-
-	/**
-	 * 鑾峰彇涓嶆槸绌哄�肩殑鏄犲皠锛屼笖key鏄皬鍐�
-	 * @param map 鏄犲皠
-	 * @return 鍘婚櫎绌哄�肩殑
-	 */
-	public static Map getNotNullMap(Map map){
-		if(map == null){
-			return new HashMap();
-		}
-		Iterator it = map.keySet().iterator();
-		Map unNullMap = new HashMap();
-		while(it.hasNext()){
-			Object key = it.next();
-			String newKey = key.toString().toLowerCase();
-			Object value = map.get(key);
-			if(value !=null){
-				if(value instanceof String && WebUtil.isNotNull(value.toString())){
-					unNullMap.put(newKey, value);
-				}else if(!(value instanceof String)){
-					unNullMap.put(newKey, value);
-				}
-			}
-		}
-		return unNullMap;
-	}
-
-	/**
-	 * 鑾峰彇闆嗗悎鐨勫厓绱犵被鍨�
-	 * @param field 灞炴��
-	 * @return 鍏冪礌绫诲瀷, 涓嶆槸闆嗗悎鐨勬椂鍊欒繑鍥濶ull
-	 */
-	public static Class getCollectionElementClass(Field field) throws VciBaseException{
-		Class fieldClass = null;
-		if(field == null){
-			return null;
-		}
-		if(field.getType().isAssignableFrom(List.class) ||
-			field.getType().isAssignableFrom(Set.class) ||
-			field.getType().isAssignableFrom(Vector.class)){
-			Type fc = field.getGenericType();
-			if(fc instanceof ParameterizedType){
-				ParameterizedType pt = (ParameterizedType)fc;
-				fieldClass= (Class)pt.getActualTypeArguments()[0];
-			}
-		}
-		return fieldClass;
-	}
-
-	/**
-	 * 鑾峰彇瀵硅薄涓殑鎵�鏈夊睘鎬э紝鍖呮嫭鍏剁户鎵跨殑灞炴��
-	 * @param c 瀵硅薄
-	 * @return 鎵�鏈夌殑灞炴��
-	 */
-	public static List<Field> getAllFieldForObj(Class c){
-		List<Field> allField = new ArrayList<Field>();
-		for(Class<?> classz = c ; classz != Object.class ; classz = classz.getSuperclass() ){
-			Field[] thisClassField = classz.getDeclaredFields();
-			for(Field field : thisClassField){
-				if(!field.getName().equals("serialVersionUID")){
-					if(!allField.contains(field)){
-						allField.add(field);
-					}
-				}
-			}
-		}
-		return allField;
-	}
-
-	/**
-	 * 鑾峰彇ts鐨勫瓧娈�
-	 * @param c 瀵硅薄鎵�灞炵殑绫�
-	 * @return 鏃堕棿鎴崇殑瀵硅薄
-	 */
-	public static Field getTsField(Class c){
-		List<Field> allField = getAllFieldForObj(c);
-		if(allField!=null&&allField.size()>0){
-			for(Field field : allField){
-				if(field.getName().equals("ts")){
-					return  field;
-				}
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * 鏍规嵁鍚嶇О鑾峰彇瀛楁
-	 * @param field 瀛楁鐨勫悕绉�
-	 * @param obj 瀵硅薄
-	 * @return 瀛楁瀵硅薄
-	 */
-	public static Field getFieldForObject(String field,Object obj){
-		if(obj == null){
-			return null;
-		}
-		return getFieldForObject(field,obj.getClass());
-	}
-
-	/**
-	 * 鏍规嵁鍚嶇О鑾峰彇瀛楁
-	 * @param fieldName 瀛楁鐨勫悕绉�
-	 * @param c 瀵硅薄绫诲瀷
-	 * @return 瀛楁瀵硅薄
-	 */
-	public static Field getFieldForObject(String fieldName,Class c){
-		List<Field> allField = getAllFieldForObj(c);
-		if(allField!=null&&allField.size()>0){
-			for(Field field : allField){
-				if(field.getName().toLowerCase().equalsIgnoreCase(fieldName.toLowerCase())){
-					return  field;
-				}
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * 鑾峰彇瀛楁鐨剆etter
-	 * @param c 瀵硅薄绫�
-	 * @param field 瀛楁
-	 * @return 鏂规硶
-	 */
-	public static Method getSetmethod(Class c,Field field){
-		return getSetmethod(c,field.getName());
-	}
-
-	/**
-	 * 鑾峰彇瀛楁鐨剆etter
-	 * @param c 瀵硅薄绫诲瀷
-	 * @param fieldName 瀛楁鍚嶇О
-	 * @return 鏂规硶
-	 */
-	public static Method getSetmethod(Class c,String fieldName){
-		if(c!=null&&isNotNull(fieldName)){
-			try {
-				PropertyDescriptor pd = new PropertyDescriptor(fieldName, c);
-				return pd.getWriteMethod();
-			} catch (SecurityException e) {
-			} catch (IntrospectionException e) {
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * 鑾峰彇瀛楁鐨刧etter
-	 * @param c 瀵硅薄绫诲瀷
-	 * @param fieldName 瀛楁鍚嶇О
-	 * @return 鏂规硶
-	 */
-	public static Method getGetmethod(Class c,String fieldName){
-		if(c!=null&&isNotNull(fieldName)){
-			try {
-				PropertyDescriptor pd = new PropertyDescriptor(fieldName, c);
-				return pd.getReadMethod();
-			} catch (SecurityException e) {
-			} catch (IntrospectionException e) {
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * 鑾峰彇瀛楁鐨刧etter
-	 * @param c 瀵硅薄绫诲瀷
-	 * @param field 瀛楁
-	 * @return 鏂规硶
-	 */
-	public static Method getGetmethod(Class c,Field field){
-		return getGetmethod(c,field.getName());
-	}
-
-	/**
-	 * 鑾峰彇瀵硅薄杞崲瀛楃涓�
-	 * @param obj 瀵硅薄
-	 * @return 瀛楃涓�
-	 */
-	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 String.valueOf(obj);
-			}else if(obj instanceof Date){
-				return VciDateUtil.date2Str((Date)obj, VciDateUtil.DateTimeMillFormat);
-			}else{
-				return obj.toString();
-			}
-		}
-	}
-
-	/**
-	 * 涓哄璞¤祴鍊硷紝涓嶅垽鏂被鍨嬶紝灞炴�ф槸浠�涔堢被鍨嬬殑锛寁alue灏卞繀椤绘槸浠�涔堢被鍨�
-	 * @param fieldName 灞炴�у悕绉�
-	 * @param targetObject 瀵硅薄
-	 * @param value 灞炴�у��
-	 */
-	public static void setValueToField(String fieldName,Object targetObject,Object value){
-		if(isNotNull(fieldName)){
-			Method setMethod = getSetmethod(targetObject.getClass(), fieldName);
-			try {
-				if(setMethod != null){
-					setMethod.invoke(targetObject, value);
-				}else{
-					Field field = getFieldForObject(fieldName, targetObject);
-					if(field !=null){
-						field.setAccessible(true);
-						field.set(targetObject, value);
-					}
-				}
-			} catch (IllegalArgumentException e) {
-				if(logger.isErrorEnabled()){
-					logger.error("WebUtil.setValueToField",e);
-				}
-			} catch (IllegalAccessException e) {
-				if(logger.isErrorEnabled()){
-					logger.error("WebUtil.setValueToField",e);
-				}
-			} catch (InvocationTargetException e) {
-				if(logger.isErrorEnabled()){
-					logger.error("WebUtil.setValueToField",e);
-				}
-			}
-		}
-	}
-
-	/**
-	 * 浠庡璞′笂鑾峰彇灞炴�х殑鍊�
-	 * @param fieldName 灞炴�у悕
-	 * @param sourceObject 瀵硅薄
-	 * @return 鍊�
-	 */
-	public static Object getValueFromField(String fieldName,Object sourceObject){
-		if(isNotNull(fieldName)){
-			try {
-				Method getMethod = getGetmethod(sourceObject.getClass(), fieldName);
-				if(getMethod !=null){
-					return getMethod.invoke(sourceObject);
-				}else{
-					//璇存槑娌℃湁璁剧疆getter锛屾瘮濡侭O鍜孡O瀵硅薄杩欑
-					Field field = getFieldForObject(fieldName, sourceObject);
-					if(field !=null){
-						field.setAccessible(true);
-						return field.get(sourceObject);
-					}
-				}
-			} catch (SecurityException e) {
-				if(logger.isErrorEnabled()){
-					logger.error("WebUtil.getValueFromField",e);
-				}
-			} catch (IllegalAccessException e) {
-				if(logger.isErrorEnabled()){
-					logger.error("WebUtil.getValueFromField",e);
-				}
-			} catch (IllegalArgumentException e) {
-				if(logger.isErrorEnabled()){
-					logger.error("WebUtil.getValueFromField",e);
-				}
-			} catch (InvocationTargetException e) {
-				if(logger.isErrorEnabled()){
-					logger.error("WebUtil.getValueFromField",e);
-				}
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * 鏄惁涓烘櫘閫氱殑灞炴��
-	 * @param attrName 灞炴�х殑鍚嶅瓧
-	 * @return true
-	 */
-	public static boolean isNormalAttr(String attrName){
-		attrName = attrName.toLowerCase();
-		if(attrName.indexOf(".")<0 && attrName.indexOf("_")<0 && !attrName.equalsIgnoreCase("lcstatustext")){
-			return true;
-		}else{
-			return false;
-		}
-	}
-
-
-	/**
-	 * 灏唚hereSql閲岀殑鍐呭杞寲鍒版煡璇ap閲�
-	 * @param whereSql sql杞崲涓簃ap
-	 * @return map
-	 */
-	public static Map<String,String>  whereSql2Map(
-		String whereSql) {
-		Map<String,String> map = new HashMap<String, String>();
-		if(isNotNull(whereSql)){
-			String[] selects = whereSql.split("and");
-			if(selects!=null&&selects.length>0){
-				for(String s : selects){
-					s = s.trim();
-					map.put(s.substring(0,s.indexOf(" ")).trim(), s.substring(s.indexOf(" ") +1).trim());
-				}
-			}
-		}
-		return map;
-	}
-
-	/**
-	 * 鏈満鐨刬p
-	 */
-	private static String localIp = null;
-
-	/**
-	 * 鑾峰彇鏈満鍦板潃锛屼笉鏄鎴风鐢佃剳鐨刬p,鏄綋鍓嶆湇鍔℃墍鍦ㄧ殑ip
-	 * @return
-	 */
-	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 e){
-				localIp = "127.0.0.1";
-			}
-		}
-		return localIp;
-	}
-
-	/**
-	 * 浠庣綉缁滄帴鍙d笂鑾峰彇ip鍦板潃
-	 * @return ip鍦板潃
-	 */
-	private static InetAddress getLocalHostLANAddress(){
-		try {
-			InetAddress candidateAddress = null;
-			// 閬嶅巻鎵�鏈夌殑缃戠粶鎺ュ彛
-			for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); ) {
-				NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
-				// 鍦ㄦ墍鏈夌殑鎺ュ彛涓嬪啀閬嶅巻IP
-				for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); ) {
-					InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
-					if (!inetAddr.isLoopbackAddress()) {// 鎺掗櫎loopback绫诲瀷鍦板潃
-						if (inetAddr.isSiteLocalAddress()) {
-							// 濡傛灉鏄痵ite-local鍦板潃锛屽氨鏄畠浜�
-							return inetAddr;
-						} else if (candidateAddress == null) {
-							// site-local绫诲瀷鐨勫湴鍧�鏈鍙戠幇锛屽厛璁板綍鍊欓�夊湴鍧�
-							candidateAddress = inetAddr;
-						}
-					}
-				}
-			}
-			if (candidateAddress != null) {
-				return candidateAddress;
-			}
-			// 濡傛灉娌℃湁鍙戠幇 non-loopback鍦板潃.鍙兘鐢ㄦ渶娆¢�夌殑鏂规
-			InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
-			return jdkSuppliedAddress;
-		} catch (Exception e) {
-			if(logger.isErrorEnabled()){
-				logger.error("鑾峰彇鏈満ip",e);
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * oracle in 鏌ヨ涓嶈兘瓒呰繃1000锛岃浆鎹竴涓嬮泦鍚�
-	 * 鐢变簬SQL璇彞1000涓彲鑳藉緢闀匡紝瓒呰繃oracle10g锛屾墍浠ョ壓鐗叉�ц兘鍒嗛厤涓�500涓暟缁�
-	 * @param list 闇�瑕佽浆鎹㈢殑鍒楄〃鍐呭
-	 * @return 鍒嗙粍鍚庣殑list
-	 */
-	public static <T> Collection<Collection<T>> switchCollectionForOracleIn(Collection<T> list) {
-		return switchCollectionForOracleIn(list,500);
-	}
-
-	/**
-	 * 杞崲闆嗗悎鐨勫ぇ灏忥紝杩欎釜鐢ㄥ湪feign璋冪敤鐨勬椂鍊欙紝涓嶈鍦╯ql鏌ヨ鐨勬椂鍊欎娇鐢�
-	 * @param collection 闇�瑕佽浆鎹㈢殑鍒楄〃鍐呭
-	 * @param preSize 姣忎釜鍒嗙粍鐨勫ぇ灏�
-	 * @return 鍒嗙粍鍚庣殑list
-	 */
-	public static <T> Collection<Collection<T>> switchCollectionForOracleIn(Collection<T> collection,int preSize) {
-		Collection<Collection<T>> listHasList = new ArrayList<Collection<T>>();
-		if(collection == null){
-			return listHasList;
-		}
-		List<T> newList = new ArrayList<T>();
-		for(Object obj : collection){
-			//涓轰簡璁﹍ist杩樺彲浠ユ坊鍔犲唴瀹癸紝鍥犱负浣跨敤sublist鍚庯紝list涓嶈兘鍐岮dd浜�
-			newList.add((T)obj);
-		}
-		int muti = 1;
-		if(newList.size() >preSize){
-			int balance = newList.size()%preSize;
-			muti = (newList.size() - balance)/preSize + (balance == 0?0:1);
-		}
-		for(int i = 0 ; i < muti; i ++){
-			int start = i*preSize;
-			int end = start + preSize;
-			if(i == muti-1 || end >newList.size() ){
-				end = newList.size();
-			}
-			List subList = newList.subList(start,end);
-			listHasList.add(subList);
-		}
-		return listHasList;
-	}
-
-}
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..80770a5
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml
@@ -0,0 +1,20 @@
+<?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>
+
+</project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java
new file mode 100644
index 0000000..101f07f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java
@@ -0,0 +1,75 @@
+package com.vci.ubcs.ddl.bo;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/28
+ */
+@Getter
+public class DdlFieldMappingAttrBO {
+
+	/**
+	 * 绫诲瀷
+	 */
+	private final String dataType;
+
+	/**
+	 * 闀垮害
+	 */
+	@Setter
+	private Integer dataLength;
+
+	/**
+	 * 绮惧害
+	 */
+	@Setter
+	private Integer dataPrecision;
+
+	/**
+	 * 鍏佽涓虹┖
+	 */
+	@Setter
+	private Boolean nullable;
+
+	/**
+	 * 榛樿鍊�
+	 */
+	@Setter
+	private String defaultValue;
+
+
+	public DdlFieldMappingAttrBO(String dataType, Integer dataLength, Integer dataPrecision, Boolean nullable, String defaultValue) {
+		this.dataType = dataType;
+		this.dataLength = dataLength;
+		this.dataPrecision = dataPrecision;
+		this.nullable = nullable;
+		this.defaultValue = defaultValue;
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder stringBuilder = new StringBuilder().append(dataType);
+		if (dataLength != null){
+			stringBuilder.append(StringPool.SPACE).append(StringPool.LEFT_BRACKET).append(dataLength).append(StringPool.RIGHT_BRACKET).append(StringPool.SPACE);
+		}
+		if (dataPrecision != null){
+			stringBuilder.append(StringPool.SPACE).append(StringPool.LEFT_BRACKET).append(dataLength == null ? 22 : dataLength).append(StringPool.COMMA).append(dataPrecision).append(StringPool.RIGHT_BRACKET).append(StringPool.SPACE);
+		}
+		if (!nullable){
+			stringBuilder.append(StringPool.SPACE).append("not null").append(StringPool.SPACE);
+		}
+		if (StringUtil.isNotBlank(defaultValue)){
+			stringBuilder.append(StringPool.SPACE).append("default").append(StringPool.SPACE).append(defaultValue).append(StringPool.SPACE);
+		}
+		return stringBuilder.toString();
+	}
+
+
+}
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/BusinessTypeEnum.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/BusinessTypeEnum.java
new file mode 100644
index 0000000..ae9b98b
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/BusinessTypeEnum.java
@@ -0,0 +1,35 @@
+package com.vci.ubcs.ddl.enums;
+
+/**
+ * Description:瀵硅薄寤烘ā绫诲瀷
+ *
+ * @author LiHang
+ * @date 2023/4/30
+ */
+public enum BusinessTypeEnum {
+	/**
+	 * 涓氬姟绫诲瀷
+	 */
+	BTM("bussiness_type_model","涓氬姟绫诲瀷"),
+	/**
+	 * 閾炬帴绫诲瀷
+	 */
+	LINK("link_type_model","閾炬帴绫诲瀷")
+	;
+	private String value;
+
+	private String name;
+
+	BusinessTypeEnum(String value, String name) {
+		this.value = value;
+		this.name = name;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public String getName() {
+		return name;
+	}
+}
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/enums/ModifyTableTaskEnum.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/ModifyTableTaskEnum.java
new file mode 100644
index 0000000..56479b9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/ModifyTableTaskEnum.java
@@ -0,0 +1,41 @@
+package com.vci.ubcs.ddl.enums;
+
+/**
+ * Description: DDL鎿嶄綔浠诲姟绫诲瀷
+ *
+ * @author LiHang
+ * @date 2023/4/30
+ */
+public enum ModifyTableTaskEnum {
+	/**
+	 * 鏂板缓
+	 */
+	CREATE("create","鏂板缓"),
+	/**
+	 * 淇敼
+	 */
+	EDIT("edit","淇敼"),
+	/**
+	 * 涓�鑷存�ф鏌�
+	 */
+	CONSISTENCY_CHECK("consistency_check","涓�鑷存�ф鏌�")
+	;
+
+	private String value;
+
+	private String name;
+
+	ModifyTableTaskEnum(String value, String name) {
+		this.value = value;
+		this.name = name;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+}
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/AttributeCache.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/AttributeCache.java
new file mode 100644
index 0000000..6342448
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/AttributeCache.java
@@ -0,0 +1,63 @@
+package com.vci.ubcs.omd.cache;
+
+import com.vci.ubcs.omd.entity.Attribute;
+import com.vci.ubcs.omd.feign.IAttributeClient;
+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.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+
+/**
+ * 鍏冩暟鎹�(灞炴��)缂撳瓨宸ュ叿绫�
+ *
+ * @author Chill
+ */
+public class AttributeCache {
+
+	private static final String ATTR_ID = "attr:id";
+	private static final String ATTR_LIST = "attr:list";
+	private static final String ATTR_CACHE = "ubcs:attr";
+
+	private static IAttributeClient attrClient;
+
+	private static IAttributeClient getAttributeClient() {
+		if (attrClient == null) {
+			attrClient = SpringUtil.getBean(IAttributeClient.class);
+		}
+		return attrClient;
+	}
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹疄浣�
+	 *
+	 * @param id 涓婚敭
+	 * @return 鍏冩暟鎹疄浣撳璞�
+	 */
+	public static Attribute getById(Long id) {
+		String keyPrefix = ATTR_ID.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(ATTR_CACHE, keyPrefix, id, () -> {
+			R<Attribute> result = getAttributeClient().getById(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹泦鍚�
+	 *
+	 * @param key 灞炴�у悕绉�
+	 */
+	public static List<Attribute> getList(String key) {
+		String keyPrefix = ATTR_LIST.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(DICT_CACHE, keyPrefix, key, () -> {
+			R<List<Attribute>> result = getAttributeClient().getList(key);
+			return result.getData();
+		});
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java
new file mode 100644
index 0000000..2897d65
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java
@@ -0,0 +1,78 @@
+package com.vci.ubcs.omd.cache;
+
+import com.vci.ubcs.omd.feign.IBtmTypeClient;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+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 BtmTypeCache {
+
+	private static final String BTM_DETAIL = "btm:id";
+
+	private static final String BTM_TYPE_CACHE = "ubcs:btm";
+
+	private static final String BTM_IDS = "btm:ids";
+
+	private static IBtmTypeClient btmTypeClient;
+
+	private static IBtmTypeClient getBtmTypeClient() {
+		if (btmTypeClient == null) {
+			btmTypeClient = SpringUtil.getBean(IBtmTypeClient.class);
+		}
+		return btmTypeClient;
+	}
+
+	/**
+	 * 鑾峰彇涓氬姟绫诲瀷璇︽儏淇℃伅
+	 *
+	 * @param oid 涓婚敭
+	 * @return 涓氬姟绫诲瀷璇︽儏淇℃伅
+	 */
+	public static BtmTypeVO 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<BtmTypeVO> result = getBtmTypeClient().getDetail(oid);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+	 * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	public static List<BtmTypeVO> 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<BtmTypeVO>> result = getBtmTypeClient().selectByIdCollection(ids);
+			return result.getData();
+		});
+	}
+
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+	 * @param pkBtmTypeCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 */
+	public static List<BtmTypeVO> 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<BtmTypeVO>> 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/cache/OmdAttributeCache.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/OmdAttributeCache.java
deleted file mode 100644
index 449ada2..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/OmdAttributeCache.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.vci.ubcs.omd.cache;
-
-import com.vci.ubcs.omd.entity.OmdAttribute;
-import com.vci.ubcs.omd.feign.IOmdAttributeClient;
-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.SpringUtil;
-import org.springblade.core.tool.utils.StringPool;
-
-import java.util.List;
-
-import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
-
-
-/**
- * 鍏冩暟鎹�(灞炴��)缂撳瓨宸ュ叿绫�
- *
- * @author Chill
- */
-public class OmdAttributeCache {
-
-	private static final String ATTR_ID = "attr:id";
-	private static final String ATTR_LIST = "attr:list";
-	private static final String ATTR_CACHE = "ubcs:attr";
-
-	private static IOmdAttributeClient attrClient;
-
-	private static IOmdAttributeClient getAttributeClient() {
-		if (attrClient == null) {
-			attrClient = SpringUtil.getBean(IOmdAttributeClient.class);
-		}
-		return attrClient;
-	}
-
-	/**
-	 * 鑾峰彇鍏冩暟鎹疄浣�
-	 *
-	 * @param id 涓婚敭
-	 * @return 鍏冩暟鎹疄浣撳璞�
-	 */
-	public static OmdAttribute getById(Long id) {
-		String keyPrefix = ATTR_ID.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-		return CacheUtil.get(ATTR_CACHE, keyPrefix, id, () -> {
-			R<OmdAttribute> result = getAttributeClient().getById(id);
-			return result.getData();
-		});
-	}
-
-	/**
-	 * 鑾峰彇鍏冩暟鎹泦鍚�
-	 *
-	 * @param key 灞炴�у悕绉�
-	 */
-	public static List<OmdAttribute> getList(String key) {
-		String keyPrefix = ATTR_LIST.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-		return CacheUtil.get(DICT_CACHE, keyPrefix, key, () -> {
-			R<List<OmdAttribute>> result = getAttributeClient().getList(key);
-			return result.getData();
-		});
-	}
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeConstant.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeConstant.java
new file mode 100644
index 0000000..7ecdc9e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeConstant.java
@@ -0,0 +1,140 @@
+package com.vci.ubcs.omd.constant;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+public class BtmTypeConstant {
+
+	/**
+	 * 灞炴�х殑涓氬姟绫诲瀷鍚嶇О
+	 */
+	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/BtmTypeFieldConstant.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeFieldConstant.java
new file mode 100644
index 0000000..67c34cc
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeFieldConstant.java
@@ -0,0 +1,112 @@
+package com.vci.ubcs.omd.constant;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/27
+ */
+public class BtmTypeFieldConstant {
+
+	public static Map<String, String> USER_TABLE_COMPATIBILITY_BTM_MAP;
+
+	public static Map<String, String> USER_TABLE_COMPATIBILITY_FIELD_MAP;
+
+	public static final Boolean DEFAULT_QUERY_SECRET;
+
+	public static final Boolean DEFAULT_QUERY_DATA_RIGHT;
+
+	public static final Map<String, String> REVISION_MANAGE_FIELD_MAP;
+
+	public static final Map<String, String> BASIC_FIELD_MAP;
+
+	public static final Map<String, String> BASE_MODEL_COMPATIBILITY_MAP;
+
+	public static final Map<String, String> LIFECYCLE_MANAGE_FIELD_MAP;
+
+	public static final Map<String, String> SECRET_MANAGE_FIELD_MAP;
+
+	public static final Map<String, String> LINK_TYPE_FIELD_MAP;
+
+	static {
+		USER_TABLE_COMPATIBILITY_BTM_MAP = new HashMap();
+		USER_TABLE_COMPATIBILITY_FIELD_MAP = new HashMap();
+		DEFAULT_QUERY_SECRET = true;
+		DEFAULT_QUERY_DATA_RIGHT = false;
+		REVISION_MANAGE_FIELD_MAP = new HashMap() {
+			{
+				this.put("nameoid", "瀵硅薄涓婚敭");
+				this.put("revisionoid", "鐗堟湰涓婚敭");
+				this.put("lastr", "鏄惁鏈�鏂扮増鏈�");
+				this.put("firstr", "鏄惁鏈�鑰佺増鏈�");
+				this.put("lastv", "鏄惁鏈�鏂扮増娆�");
+				this.put("firstv", "鏄惁鏈�鑰佺増娆�");
+				this.put("revisionrule", "鐗堟湰瑙勫垯");
+				this.put("revisionseq", "鐗堟湰鎺掑簭鍙�");
+				this.put("revisionvalue", "鐗堟湰鍊�");
+				this.put("versionrule", "鐗堟瑙勫垯");
+				this.put("versionseq", "鐗堟鎺掑簭鍙�");
+				this.put("versionvalue", "鐗堟鍊�");
+				this.put("checkinby", "绛惧叆浜�");
+				this.put("checkintime", "绛惧叆鏃堕棿");
+				this.put("checkoutby", "绛惧嚭浜�");
+				this.put("checkouttime", "绛惧嚭鏃堕棿");
+				this.put("copyfromversion", "鎷疯礉鐗堟湰鏉ユ簮");
+			}
+		};
+		BASIC_FIELD_MAP = new HashMap() {
+			{
+				this.put("oid", "涓婚敭");
+				this.put("btmname", "涓氬姟绫诲瀷鐨勫悕绉�");
+				this.put("id", "缂栧彿");
+				this.put("name", "鍚嶇О");
+				this.put("description", "鎻忚堪");
+				this.put("creator", "鍒涘缓浜�");
+				this.put("createtime", "鍒涘缓鏃堕棿");
+				this.put("lastmodifier", "鏈�鍚庢椂闂翠汉");
+				this.put("lastmodifytime", "鏈�鍚庝慨鏀规椂闂�");
+				this.put("ts", "鏃堕棿鎴�");
+				this.put("owner", "鎷ユ湁鑰�");
+			}
+		};
+		BASE_MODEL_COMPATIBILITY_MAP = new HashMap() {
+			{
+				this.put("lastr", "islastr");
+				this.put("firstr", "isfirstr");
+				this.put("lastv", "islastv");
+				this.put("firstv", "isfirstv");
+			}
+		};
+		LIFECYCLE_MANAGE_FIELD_MAP = new HashMap() {
+			{
+				this.put("lcstatus", "鐢熷懡鍛ㄦ湡鍊�");
+			}
+		};
+		SECRET_MANAGE_FIELD_MAP = new HashMap() {
+			{
+				this.put("secretgrade", "瀵嗙骇鍊�");
+			}
+		};
+		LINK_TYPE_FIELD_MAP = new HashMap() {
+			{
+				this.put("oid", "涓婚敭");
+				this.put("creator", "鍒涘缓浜�");
+				this.put("createtime", "鍒涘缓鏃堕棿");
+				this.put("lastmodifier", "鏈�鍚庢椂闂翠汉");
+				this.put("lastmodifytime", "鏈�鍚庝慨鏀规椂闂�");
+				this.put("f_oid", "from绔富閿�");
+				this.put("f_revisionoid", "from绔増鏈富閿�");
+				this.put("f_nameoid", "from绔璞′富閿�");
+				this.put("f_btmname", "from绔笟鍔$被鍨�");
+				this.put("t_oid", "to绔富閿�");
+				this.put("t_revisionoid", "to绔増鏈富閿�");
+				this.put("t_nameoid", "to绔璞′富閿�");
+				this.put("t_btmname", "to绔笟鍔$被鍨�");
+				this.put("ts", "鏃堕棿鎴�");
+			}
+		};
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeLcStatusConstant.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeLcStatusConstant.java
new file mode 100644
index 0000000..458a829
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeLcStatusConstant.java
@@ -0,0 +1,16 @@
+package com.vci.ubcs.omd.constant;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/27
+ */
+public class BtmTypeLcStatusConstant {
+	public static final String FRAME_WORK_LIFE_CYCLE_NAME = "frameworkDataLc";
+	public static final String EMTYPE_LIFE_CYCLE = "defaultLC";
+	public static final String RELEASE_LIFE_CYCLE = "releaseDataLc";
+
+	public BtmTypeLcStatusConstant() {
+	}
+}
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/AttributeDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/AttributeDTO.java
new file mode 100644
index 0000000..e5c2906
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/AttributeDTO.java
@@ -0,0 +1,22 @@
+package com.vci.ubcs.omd.dto;
+
+import com.vci.ubcs.omd.entity.Attribute;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+ * Description: 鍏冩暟鎹〉闈紶杈撳璞�
+ *
+ * @author LiHang
+ * @date 2023/4/4
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AttributeDTO extends Attribute {
+
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 5515095331865594996L;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmAndLinkTypeDdlDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmAndLinkTypeDdlDTO.java
new file mode 100644
index 0000000..e8d2f75
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmAndLinkTypeDdlDTO.java
@@ -0,0 +1,26 @@
+package com.vci.ubcs.omd.dto;
+
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.vo.LinkTypeVO;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/27
+ */
+@Data
+public class BtmAndLinkTypeDdlDTO implements Serializable {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 1199602927699648522L;
+
+	List<BtmTypeVO> btmTypeList;
+
+	List<LinkTypeVO> linkTypeList;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java
new file mode 100644
index 0000000..723c7ea
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.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 BtmTypeDTO 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<BtmTypeLinkAttributesDTO> attributes;
+
+    /**
+     * 鏃堕棿鎴筹紝鐢ㄤ簬鏍¢獙鏄惁鏈�鏂版暟鎹�
+     */
+    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/BtmTypeExportDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeExportDTO.java
new file mode 100644
index 0000000..4f5f864
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeExportDTO.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 BtmTypeExportDTO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -5279288274756092398L;
+    /**
+     * 鐘舵�佹暟鎹紶杈撳璞�
+     */
+    private List<StatusDTO> statusDTOList;
+
+    /**
+     * 鐗堟湰瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     */
+    private List<RevisionRuleDTO> revisionRuleDTOList;
+
+    /**
+     * 鏋氫妇鏁版嵁浼犺緭瀵硅薄
+     */
+    private List<EnumDTO> enumDTOList;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鏁版嵁浼犺緭瀵硅薄
+     */
+    private List<LifeCycleDTO> lifeCycleDTOList;
+
+    /**
+     * 灞炴�ф暟鎹紶杈撳璞�
+     */
+    private List<AttributeDTO> attributeDTOList;
+
+    /**
+     * 涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
+     */
+    private List<BtmTypeDTO> btmTypeDTOList;
+
+    /**
+     * 閾炬帴绫诲瀷鏁版嵁浼犺緭瀵硅薄
+     */
+    private List<LinkTypeDTO> linkTypeDTOList;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeLinkAttributesDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeLinkAttributesDTO.java
new file mode 100644
index 0000000..0040abc
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeLinkAttributesDTO.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 BtmTypeLinkAttributesDTO 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/EnumDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/EnumDTO.java
new file mode 100644
index 0000000..aedc1bf
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/EnumDTO.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 EnumDTO 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/LifeCycleDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LifeCycleDTO.java
new file mode 100644
index 0000000..7a1ccf6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LifeCycleDTO.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 LifeCycleDTO 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<LifeCycleLineDTO> lineDTOList;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LifeCycleLineDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LifeCycleLineDTO.java
new file mode 100644
index 0000000..57ea385
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LifeCycleLineDTO.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 LifeCycleLineDTO 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<LifeCycleLineEventDTO> eventDTOList;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LifeCycleLineEventDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LifeCycleLineEventDTO.java
new file mode 100644
index 0000000..2f01763
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LifeCycleLineEventDTO.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 LifeCycleLineEventDTO 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/LinkTypeDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LinkTypeDTO.java
new file mode 100644
index 0000000..d0eab19
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/LinkTypeDTO.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 LinkTypeDTO 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<BtmTypeLinkAttributesDTO> attributesDTOList;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdAttributeDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdAttributeDTO.java
deleted file mode 100644
index 3365ca7..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdAttributeDTO.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.vci.ubcs.omd.dto;
-
-import com.vci.ubcs.omd.entity.OmdAttribute;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-
-/**
- * Description: 鍏冩暟鎹〉闈紶杈撳璞�
- *
- * @author LiHang
- * @date 2023/4/4
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class OmdAttributeDTO extends OmdAttribute {
-
-	/**
-	 * 搴忓垪鍖�
-	 */
-	private static final long serialVersionUID = 5515095331865594996L;
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/RevisionRuleDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/RevisionRuleDTO.java
new file mode 100644
index 0000000..4f83e18
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/RevisionRuleDTO.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 RevisionRuleDTO 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/StatusDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/StatusDTO.java
new file mode 100644
index 0000000..b387959
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/StatusDTO.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 StatusDTO 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/Attribute.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Attribute.java
new file mode 100644
index 0000000..8abd472
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Attribute.java
@@ -0,0 +1,187 @@
+package com.vci.ubcs.omd.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springframework.data.annotation.Transient;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+
+/**
+ * Description: 鍏冩暟鎹�(灞炴�ф睜)
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@TableName("pl_omd_attribute")
+@ApiModel(value = "灞炴�у璞�", description = "灞炴�у璞�")
+public class Attribute extends BaseEntity {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = -6792640675358002410L;
+
+	/**
+	 * 绉熸埛ID
+	 */
+	@ApiModelProperty(value = "绉熸埛ID")
+	private String tenantId;
+
+	/**
+	 * 瀛楁缂栧彿
+	 */
+	@ApiModelProperty(value = "瀛楁缂栧彿")
+	@NotNull
+	private String key;
+
+	/**
+	 * 瀛楁鍚嶇О
+	 */
+	@ApiModelProperty(value = "瀛楁鍚嶇О")
+	private String label;
+
+	/**
+	 * 灞炴�х被鍨嬪瓧鍏哥爜
+	 */
+	@ApiModelProperty(value = "灞炴�х被鍨嬪瓧鍏哥爜")
+	private String typeCode;
+
+	/**
+	 * 灞炴�х被鍨嬪瓧鍏稿��
+	 */
+	@ApiModelProperty(value = "灞炴�х被鍨嬪瓧鍏稿��")
+	private String typeKey;
+
+	/**
+	 * 灞炴�х被鍨嬪瓧鍏告樉绀哄悕绉�
+	 */
+	@Transient
+	@TableField(exist = false)
+	private String typeValue;
+
+
+	/**
+	 * 鏍囩
+	 */
+	@ApiModelProperty(value = "鏍囩")
+	private String hashtag;
+
+	/**
+	 * 鎻忚堪
+	 */
+	@ApiModelProperty(value = "鎻忚堪")
+	private String description;
+
+	/**
+	 * 鏄惁涓虹┖
+	 */
+	@ApiModelProperty("鏄惁涓虹┖")
+	private String nullable;
+
+	/**
+	 * 鏈�澶ч暱搴�
+	 */
+	@ApiModelProperty("鏈�澶ч暱搴�")
+	private Integer maxLength;
+
+	/**
+	 * 绮惧害
+	 */
+	@ApiModelProperty("绮惧害")
+	private Integer precision;
+
+	/**
+	 * 鍙傜収鐨勭被鍨�
+	 */
+	@ApiModelProperty("鍙傜収绫诲瀷瀛楀吀鐮�")
+	private String referTypeCode;
+
+	/**
+	 * 鍙傜収绫诲瀷瀛楀吀鍊�
+	 */
+	@ApiModelProperty("鍙傜収绫诲瀷瀛楀吀鍊�")
+	private String referTypeKey;
+
+	/**
+	 * 鍙傜収绫诲瀷瀛楀吀鏄剧ず鍚嶇О
+	 */
+	@Transient
+	@TableField(exist = false)
+	private String referTypeValue;
+
+	/**
+	 * 鍙傜収瀵硅薄
+	 */
+	@ApiModelProperty("鍙傜収鐨勪富閿�")
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long referToId;
+
+	/**
+	 * 鍙傜収瀵硅薄鐨勫悕绉�
+	 */
+	@ApiModelProperty("鍙傜収瀵硅薄鍚嶇О")
+	private String referToName;
+
+	/**
+	 * 浣跨敤瀛楀吀
+	 */
+	@ApiModelProperty("浣跨敤瀛楀吀")
+	private String usingDict;
+
+	/**
+	 * 瀛楀吀鐮�
+	 */
+	@ApiModelProperty("瀛楀吀鐮�")
+	private String dictCode;
+
+	/**
+	 * 瀛楀吀閿��
+	 */
+	@ApiModelProperty("瀛楀吀閿��")
+	private String dictKey;
+
+	/**
+	 * 瀛楀吀鏄剧ず鍊�
+	 */
+	@Transient
+	@TableField(exist = false)
+	private String dictValue;
+
+	/**
+	 * 榛樿鍊�
+	 */
+	@ApiModelProperty("榛樿鍊�")
+	private String defaultValue;
+
+	/**
+	 * 鏃堕棿鎴�
+	 */
+	@ApiModelProperty(value = "鏃堕棿鎴�")
+	private Date ts;
+
+	/**
+	 * 姣旇緝鏂瑰紡
+	 */
+	@Transient
+	@TableField(exist = false)
+	private String calculateType;
+
+	/**
+	 * 姣旇緝鍊�
+	 */
+	@Transient
+	@TableField(exist = false)
+	private String calculateValue;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java
new file mode 100644
index 0000000..c221329
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java
@@ -0,0 +1,179 @@
+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 BtmType 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 revisionFlag;
+    /**
+     * 鐗堟湰瑙勫垯鐨勭紪鍙�
+     */
+    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 lifeCycleFlag;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勮嫳鏂囧悕绉�
+     */
+    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;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmTypeAttribute.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmTypeAttribute.java
new file mode 100644
index 0000000..28738a4
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmTypeAttribute.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 BtmTypeAttribute 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/FieldRange.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/FieldRange.java
new file mode 100644
index 0000000..3679fa1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/FieldRange.java
@@ -0,0 +1,39 @@
+package com.vci.ubcs.omd.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springblade.core.mp.base.BaseEntity;
+
+
+/**
+ * Description: 瀛楁鑼冨洿
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@TableName("pl_omd_field_range")
+@ApiModel(value = "瀛楁鑼冨洿",description = "瀛楁鑼冨洿")
+public class FieldRange extends BaseEntity {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 7849276277821126507L;
+	/**
+	 * 姣旇緝鏂瑰紡
+	 */
+	@ApiModelProperty("姣旇緝鏂瑰紡")
+	private String calculateType;
+
+	/**
+	 * 姣旇緝鍊�
+	 */
+	@ApiModelProperty("姣旇緝鍊�")
+	private String calculateValue;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleEvent.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleEvent.java
new file mode 100644
index 0000000..1832c80
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleEvent.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 LifeCycleEvent 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/LifeCycleLine.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLine.java
new file mode 100644
index 0000000..1d3b5ff
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLine.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 LifeCycleLine 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/LifeCycleLineEvent.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLineEvent.java
new file mode 100644
index 0000000..74760c2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleLineEvent.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 LifeCycleLineEvent 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/LifeCycleRule.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleRule.java
new file mode 100644
index 0000000..af28860
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LifeCycleRule.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 LifeCycleRule 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/LinkTypeAttribute.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeAttribute.java
new file mode 100644
index 0000000..9e1e620
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeAttribute.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 LinkTypeAttribute 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/LinkTypeDO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeDO.java
new file mode 100644
index 0000000..4d7862a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeDO.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 LinkTypeDO 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/ModifyAttributeInfo.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfo.java
new file mode 100644
index 0000000..6526d96
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfo.java
@@ -0,0 +1,128 @@
+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 ModifyAttributeInfo implements Serializable {
+
+	/**
+	 * 绂佹淇敼杩欎釜鍊�
+	 */
+	private static final long serialVersionUID = 2996604298980606103L;
+	/**
+	 * 鑻辨枃鍚嶇О
+	 */
+	private String id;
+
+	/**
+	 * 涓枃鍚嶇О
+	 */
+	private String name;
+
+	/**
+	 * 瀵硅薄绫诲瀷
+	 */
+	private String businessType;
+
+	/**
+	 * 鏁版嵁搴撹〃鍚�
+	 */
+	private String tableName;
+
+	/**
+	 * 浠诲姟鎵цFlag
+	 */
+	private String taskName;
+
+	/**
+	 * 娣诲姞鐨勫睘鎬�
+	 */
+	private String addAttributes;
+
+	/**
+	 * 淇敼鐨勫睘鎬�
+	 */
+	private String modifyAttributes;
+
+	/**
+	 * 鍒犻櫎鐨勫睘鎬�
+	 */
+	private String deleteAttributes;
+
+	/**
+	 * 灞炴�т慨鏀瑰墠鐨勫唴瀹�
+	 */
+	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;
+}
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
deleted file mode 100644
index bcb3582..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdAttribute.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package com.vci.ubcs.omd.entity;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.springblade.core.mp.base.BaseEntity;
-import org.springframework.data.annotation.Transient;
-
-import javax.validation.constraints.NotNull;
-
-
-/**
- * Description: 鍏冩暟鎹�(灞炴�ф睜)
- *
- * @author LiHang
- * @date 2023/4/3
- */
-@Data
-@ToString(callSuper = true)
-@EqualsAndHashCode(callSuper = true)
-@TableName("pl_omd_attribute")
-@ApiModel(value = "灞炴�у璞�", description = "灞炴�у璞�")
-public class OmdAttribute extends BaseEntity {
-	/**
-	 * 搴忓垪鍖�
-	 */
-	private static final long serialVersionUID = -6792640675358002410L;
-
-	/**
-	 * 绉熸埛ID
-	 */
-	@ApiModelProperty(value = "绉熸埛ID")
-	private String tenantId;
-
-	/**
-	 * 瀛楁缂栧彿
-	 */
-	@ApiModelProperty(value = "瀛楁缂栧彿")
-	@NotNull
-	private String key;
-
-	/**
-	 * 瀛楁鍚嶇О
-	 */
-	@ApiModelProperty(value = "瀛楁鍚嶇О")
-	private String label;
-
-	/**
-	 * 灞炴�х被鍨嬪瓧鍏哥爜
-	 */
-	@ApiModelProperty(value = "灞炴�х被鍨嬪瓧鍏哥爜")
-	private String typeCode;
-
-	/**
-	 * 灞炴�х被鍨嬪瓧鍏稿��
-	 */
-	@ApiModelProperty(value = "灞炴�х被鍨嬪瓧鍏稿��")
-	private String typeKey;
-
-	/**
-	 * 灞炴�х被鍨嬪瓧鍏告樉绀哄悕绉�
-	 */
-	@Transient
-	@TableField(exist = false)
-	private String typeValue;
-
-
-	/**
-	 * 鏍囩
-	 */
-	@ApiModelProperty(value = "鏍囩")
-	private String hashtag;
-
-	/**
-	 * 鎻忚堪
-	 */
-	@ApiModelProperty(value = "鎻忚堪")
-	private String description;
-
-	/**
-	 * 鏄惁涓虹┖
-	 */
-	@ApiModelProperty("鏄惁涓虹┖")
-	private String nullable;
-
-	/**
-	 * 鏈�澶ч暱搴�
-	 */
-	@ApiModelProperty("鏈�澶ч暱搴�")
-	private Integer maxLength;
-
-	/**
-	 * 绮惧害
-	 */
-	@ApiModelProperty("绮惧害")
-	private Integer precision;
-
-	/**
-	 * 鍙傜収鐨勭被鍨�
-	 */
-	@ApiModelProperty("鍙傜収绫诲瀷瀛楀吀鐮�")
-	private String referTypeCode;
-
-	/**
-	 * 鍙傜収绫诲瀷瀛楀吀鍊�
-	 */
-	@ApiModelProperty("鍙傜収绫诲瀷瀛楀吀鍊�")
-	private String referTypeKey;
-
-	/**
-	 * 鍙傜収绫诲瀷瀛楀吀鏄剧ず鍚嶇О
-	 */
-	@Transient
-	@TableField(exist = false)
-	private String referTypeValue;
-
-	/**
-	 * 鍙傜収瀵硅薄
-	 */
-	@ApiModelProperty("鍙傜収鐨勪富閿�")
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long referToId;
-
-	/**
-	 * 鍙傜収瀵硅薄鐨勫悕绉�
-	 */
-	@ApiModelProperty("鍙傜収瀵硅薄鍚嶇О")
-	private String referToName;
-
-	/**
-	 * 浣跨敤瀛楀吀
-	 */
-	@ApiModelProperty("浣跨敤瀛楀吀")
-	private String usingDict;
-
-	/**
-	 * 瀛楀吀鐮�
-	 */
-	@ApiModelProperty("瀛楀吀鐮�")
-	private String dictCode;
-
-	/**
-	 * 瀛楀吀閿��
-	 */
-	@ApiModelProperty("瀛楀吀閿��")
-	private String dictKey;
-
-	/**
-	 * 瀛楀吀鏄剧ず鍊�
-	 */
-	@Transient
-	@TableField(exist = false)
-	private String dictValue;
-
-	/**
-	 * 榛樿鍊�
-	 */
-	@ApiModelProperty("榛樿鍊�")
-	private String defaultValue;
-	/**
-	 * 姣旇緝鏂瑰紡
-	 */
-	@Transient
-	@TableField(exist = false)
-	private String calculateType;
-
-	/**
-	 * 姣旇緝鍊�
-	 */
-	@Transient
-	@TableField(exist = false)
-	private String calculateValue;
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdFieldRange.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdFieldRange.java
deleted file mode 100644
index 80eea5f..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdFieldRange.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.vci.ubcs.omd.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.springblade.core.mp.base.BaseEntity;
-
-
-/**
- * Description: 瀛楁鑼冨洿
- *
- * @author LiHang
- * @date 2023/4/3
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-@TableName("pl_omd_field_range")
-@ApiModel(value = "瀛楁鑼冨洿",description = "瀛楁鑼冨洿")
-public class OmdFieldRange extends BaseEntity {
-	/**
-	 * 搴忓垪鍖�
-	 */
-	private static final long serialVersionUID = 7849276277821126507L;
-	/**
-	 * 姣旇緝鏂瑰紡
-	 */
-	@ApiModelProperty("姣旇緝鏂瑰紡")
-	private String calculateType;
-
-	/**
-	 * 姣旇緝鍊�
-	 */
-	@ApiModelProperty("姣旇緝鍊�")
-	private String calculateValue;
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeClient.java
new file mode 100644
index 0000000..a002604
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeClient.java
@@ -0,0 +1,60 @@
+/*
+ *      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.omd.feign;
+
+
+import com.vci.ubcs.omd.entity.Attribute;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * Feign鎺ュ彛绫�
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_NAME_OMD,
+	fallback = IAttributeFallback.class
+)
+public interface IAttributeClient {
+
+	String API_PREFIX = "/client";
+	String GET_BY_ID = API_PREFIX + "/attribute/get-by-id";
+	String GET_LIST = API_PREFIX + "/attribute/get-list";
+
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹璞�
+	 * @param id 涓婚敭
+	 * @return 鍏冩暟鎹璞�
+	 */
+	@GetMapping(GET_BY_ID)
+	R<Attribute> getById(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹垪琛�
+	 * @param key 鏌ヨ灞炴�у悕
+	 * @return 鍏冩暟鎹垪琛�
+	 */
+	@GetMapping(GET_LIST)
+	R<List<Attribute>> getList(@RequestParam("key") String key);
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeFallback.java
new file mode 100644
index 0000000..f358100
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeFallback.java
@@ -0,0 +1,43 @@
+/*
+ *      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.omd.feign;
+
+import com.vci.ubcs.omd.entity.Attribute;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Feign澶辫触閰嶇疆
+ *
+ * @author Chill
+ */
+@Component
+public class IAttributeFallback implements IAttributeClient {
+	@Override
+	public R<Attribute> getById(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<Attribute>> getList(String code) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java
new file mode 100644
index 0000000..01bf78a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java
@@ -0,0 +1,96 @@
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+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 = IBtmTypeFallback.class
+)
+public interface IBtmTypeClient {
+
+	/**
+	 * 鍓嶇紑
+	 */
+	String API_PREFIX = "/client";
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 */
+	String GET_REF_PAGE = API_PREFIX + "/btm-type/get-ref-page";
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ鏃犲垎椤�
+	 */
+	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<BtmTypeVO> getDetail(@RequestParam("oid") String oid);
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉鏉′欢
+	 * @param domain 棰嗗煙鍊�
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping(GET_REF_PAGE)
+	R<IPage<BtmTypeVO>> getRefPage(@RequestParam("condition")Map<String,Object> condition, @RequestParam("query")Query query, @RequestParam("domain") String domain);
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param domain 棰嗗煙鍊�
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping(GET_REF)
+	R<List<BtmTypeVO>> getRef(@RequestParam("condition")Map<String,Object> condition, @RequestParam("domain") String domain);
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+	 * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@GetMapping(GET_BY_IDS)
+	R<List<BtmTypeVO>> selectByIdCollection(List<String> ids);
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+	 * @param pkBtmTypeCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 */
+	@GetMapping(GET_BY_OIDS)
+	R<List<BtmTypeVO>> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection);
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeFallback.java
new file mode 100644
index 0000000..d1d54a0
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeFallback.java
@@ -0,0 +1,94 @@
+/*
+ *      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.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.omd.entity.Attribute;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Feign澶辫触閰嶇疆
+ *
+ * @author Chill
+ */
+@Component
+public class IBtmTypeFallback implements IBtmTypeClient {
+	/**
+	 * 鑾峰彇涓氬姟绫诲瀷璇︽儏淇℃伅
+	 *
+	 * @param oid 涓婚敭
+	 * @return 涓氬姟绫诲瀷璇︽儏淇℃伅
+	 */
+	@Override
+	public R<BtmTypeVO> getDetail(String oid) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param query     鍒嗛〉鏉′欢
+	 * @param domain    棰嗗煙鍊�
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public R<IPage<BtmTypeVO>> getRefPage(Map<String, Object> condition, Query query, String domain) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param domain    棰嗗煙鍊�
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public R<List<BtmTypeVO>> getRef(Map<String, Object> condition, String domain) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+	 *
+	 * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@Override
+	public R<List<BtmTypeVO>> selectByIdCollection(List<String> ids) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param pkBtmTypeCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 */
+	@Override
+	public R<List<BtmTypeVO>> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java
index d5879fb..36e1569 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java
@@ -27,7 +27,7 @@
  *
  * @author Chill
  */
-@Component
+@Component("Dictclient2")
 public class IDictClientFallback implements IDictClient {
 	@Override
 	public R<Dict> getById(Long id) {
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeClient.java
deleted file mode 100644
index f3f0042..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeClient.java
+++ /dev/null
@@ -1,60 +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.omd.feign;
-
-
-import com.vci.ubcs.omd.entity.OmdAttribute;
-import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.tool.api.R;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.List;
-
-/**
- * Feign鎺ュ彛绫�
- *
- * @author Chill
- */
-@FeignClient(
-	value = AppConstant.APPLICATION_NAME_OMD,
-	fallback = IOmdAttributeFallback.class
-)
-public interface IOmdAttributeClient {
-
-	String API_PREFIX = "/client";
-	String GET_BY_ID = API_PREFIX + "/attribute/get-by-id";
-	String GET_LIST = API_PREFIX + "/attribute/get-list";
-
-
-	/**
-	 * 鑾峰彇鍏冩暟鎹璞�
-	 * @param id 涓婚敭
-	 * @return 鍏冩暟鎹璞�
-	 */
-	@GetMapping(GET_BY_ID)
-	R<OmdAttribute> getById(@RequestParam("id") Long id);
-
-	/**
-	 * 鑾峰彇鍏冩暟鎹垪琛�
-	 * @param key 鏌ヨ灞炴�у悕
-	 * @return 鍏冩暟鎹垪琛�
-	 */
-	@GetMapping(GET_LIST)
-	R<List<OmdAttribute>> getList(@RequestParam("key") String key);
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeFallback.java
deleted file mode 100644
index 40dc9ea..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeFallback.java
+++ /dev/null
@@ -1,43 +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.omd.feign;
-
-import com.vci.ubcs.omd.entity.OmdAttribute;
-import org.springblade.core.tool.api.R;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * Feign澶辫触閰嶇疆
- *
- * @author Chill
- */
-@Component
-public class IOmdAttributeFallback implements IOmdAttributeClient {
-	@Override
-	public R<OmdAttribute> getById(Long id) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-	@Override
-	public R<List<OmdAttribute>> getList(String code) {
-		return R.fail("鑾峰彇鏁版嵁澶辫触");
-	}
-
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/AttributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/AttributeVO.java
new file mode 100644
index 0000000..23b710e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/AttributeVO.java
@@ -0,0 +1,40 @@
+package com.vci.ubcs.omd.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.vci.ubcs.omd.entity.Attribute;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+
+/**
+ * Description: 鍏冩暟鎹樉绀哄璞�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "鍏冩暟鎹樉绀哄璞�", description = "鍏冩暟鎹樉绀哄璞�")
+public class AttributeVO extends Attribute {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 279638479374768539L;
+
+	/**
+	 * 涓婚敭ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	@ApiModelProperty("瀛楁鑼冨洿")
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	List<FieldRangeVO> fieldRanges;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTypeAttributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTypeAttributeVO.java
new file mode 100644
index 0000000..67d98cb
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTypeAttributeVO.java
@@ -0,0 +1,161 @@
+package com.vci.ubcs.omd.vo;
+
+import com.vci.ubcs.omd.entity.BtmTypeAttribute;
+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 BtmTypeAttributeVO extends BtmTypeAttribute {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    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/BtmTypeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTypeVO.java
new file mode 100644
index 0000000..4c4f54e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTypeVO.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 BtmTypeVO 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 RevisionRuleVO 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<BtmTypeAttributeVO> attributes;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/FieldRangeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/FieldRangeVO.java
new file mode 100644
index 0000000..2d086e7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/FieldRangeVO.java
@@ -0,0 +1,23 @@
+package com.vci.ubcs.omd.vo;
+
+import com.vci.ubcs.omd.entity.FieldRange;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+ * Description: 瀛楁鑼冨洿鏄剧ず瀵硅薄
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "瀛楁鑼冨洿鏄剧ず瀵硅薄", description = "瀛楁鑼冨洿鏄剧ず瀵硅薄")
+public class FieldRangeVO extends FieldRange {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 1770817945737478318L;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleEventVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleEventVO.java
new file mode 100644
index 0000000..f3600ee
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleEventVO.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 LifeCycleEventVO 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/LifeCycleLineEventVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineEventVO.java
new file mode 100644
index 0000000..6770a11
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineEventVO.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 LifeCycleLineEventVO 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/LifeCycleLineVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineVO.java
new file mode 100644
index 0000000..3cb2461
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleLineVO.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 LifeCycleLineVO 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<LifeCycleLineEventVO> events;
+
+    public String getPkLifeCycle() {
+        return pkLifeCycle;
+    }
+
+    public void setPkLifeCycle(String pkLifeCycle) {
+        this.pkLifeCycle = pkLifeCycle;
+    }
+
+    public String getSourceLifeStatus() {
+        return sourceLifeStatus;
+    }
+
+    public void setSourceLifeStatus(String sourceLifeStatus) {
+        this.sourceLifeStatus = sourceLifeStatus;
+    }
+
+    public String getSourceLifeStatusName() {
+        return sourceLifeStatusName;
+    }
+
+    public void setSourceLifeStatusName(String sourceLifeStatusName) {
+        this.sourceLifeStatusName = sourceLifeStatusName;
+    }
+
+    public String getTargetLifeStatus() {
+        return targetLifeStatus;
+    }
+
+    public void setTargetLifeStatus(String targetLifeStatus) {
+        this.targetLifeStatus = targetLifeStatus;
+    }
+
+    public String getTargetLifeStatusName() {
+        return targetLifeStatusName;
+    }
+
+    public void setTargetLifeStatusName(String targetLifeStatusName) {
+        this.targetLifeStatusName = targetLifeStatusName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getTransLineSiteInfo() {
+        return transLineSiteInfo;
+    }
+
+    public void setTransLineSiteInfo(String transLineSiteInfo) {
+        this.transLineSiteInfo = transLineSiteInfo;
+    }
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getLastModifier() {
+        return lastModifier;
+    }
+
+    public void setLastModifier(String lastModifier) {
+        this.lastModifier = lastModifier;
+    }
+
+    public Date getLastModifyTime() {
+        return lastModifyTime;
+    }
+
+    public void setLastModifyTime(Date lastModifyTime) {
+        this.lastModifyTime = lastModifyTime;
+    }
+
+    public Date getTs() {
+        return ts;
+    }
+
+    public void setTs(Date ts) {
+        this.ts = ts;
+    }
+
+    public List<LifeCycleLineEventVO> getEvents() {
+        return events;
+    }
+
+    public void setEvents(List<LifeCycleLineEventVO> events) {
+        this.events = events;
+    }
+
+
+    public String getBtmname() {
+        return btmname;
+    }
+
+    public void setBtmname(String btmname) {
+        this.btmname = btmname;
+    }
+
+    public String getOwner() {
+        return owner;
+    }
+
+    public void setOwner(String owner) {
+        this.owner = owner;
+    }
+
+    @Override
+    public String toString() {
+        return "OsLifeCycleLineVO{" +
+                "pkLifeCycle='" + pkLifeCycle + '\'' +
+                ", sourceLifeStatus='" + sourceLifeStatus + '\'' +
+                ", sourceLifeStatusName='" + sourceLifeStatusName + '\'' +
+                ", targetLifeStatus='" + targetLifeStatus + '\'' +
+                ", targetLifeStatusName='" + targetLifeStatusName + '\'' +
+                ", name='" + name + '\'' +
+                ", transLineSiteInfo='" + transLineSiteInfo + '\'' +
+                ", oid='" + oid + '\'' +
+                ", btmname='" + btmname + '\'' +
+                ", owner='" + owner + '\'' +
+                ", creator='" + creator + '\'' +
+                ", createTime=" + createTime +
+                ", lastModifier='" + lastModifier + '\'' +
+                ", lastModifyTime=" + lastModifyTime +
+                ", ts=" + ts +
+                ", events=" + events +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleVO.java
new file mode 100644
index 0000000..b6b0bdb
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LifeCycleVO.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 LifeCycleVO 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<LifeCycleLineVO> lines ;
+
+    public String getClassFullName() {
+        return classFullName;
+    }
+
+    public void setClassFullName(String classFullName) {
+        this.classFullName = classFullName;
+    }
+
+    public String getBtmname() {
+        return btmname;
+    }
+
+    public void setBtmname(String btmname) {
+        this.btmname = btmname;
+    }
+
+    public String getOwner() {
+        return owner;
+    }
+
+    public void setOwner(String owner) {
+        this.owner = owner;
+    }
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getStartStatus() {
+        return startStatus;
+    }
+
+    public void setStartStatus(String startStatus) {
+        this.startStatus = startStatus;
+    }
+
+    public String getStartStatusName() {
+        return startStatusName;
+    }
+
+    public void setStartStatusName(String startStatusName) {
+        this.startStatusName = startStatusName;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getLastModifier() {
+        return lastModifier;
+    }
+
+    public void setLastModifier(String lastModifier) {
+        this.lastModifier = lastModifier;
+    }
+
+    public Date getLastModifyTime() {
+        return lastModifyTime;
+    }
+
+    public void setLastModifyTime(Date lastModifyTime) {
+        this.lastModifyTime = lastModifyTime;
+    }
+
+    public Date getTs() {
+        return ts;
+    }
+
+    public void setTs(Date ts) {
+        this.ts = ts;
+    }
+
+    public List<LifeCycleLineVO> getLines() {
+        return lines;
+    }
+
+    public void setLines(List<LifeCycleLineVO> lines) {
+        this.lines = lines;
+    }
+
+    @Override
+    public String toString() {
+        return "OsLifeCycleVO{" +
+                "oid='" + oid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                ", classFullName='" + classFullName + '\'' +
+                ", startStatus='" + startStatus + '\'' +
+                ", startStatusName='" + startStatusName + '\'' +
+                ", btmname='" + btmname + '\'' +
+                ", owner='" + owner + '\'' +
+                ", creator='" + creator + '\'' +
+                ", createTime=" + createTime +
+                ", lastModifier='" + lastModifier + '\'' +
+                ", lastModifyTime=" + lastModifyTime +
+                ", ts=" + ts +
+                ", lines=" + lines +
+                '}';
+    }
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java
new file mode 100644
index 0000000..7f71297
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.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 LinkTypeAttributeVO 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/LinkTypeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
new file mode 100644
index 0000000..1c43b92
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
@@ -0,0 +1,126 @@
+package com.vci.ubcs.omd.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 閾炬帴绫诲瀷鏄剧ず瀵硅薄
+ * @author weidy
+ * @date 2019/10/11 6:04 PM
+ */
+@Data
+public class LinkTypeVO implements java.io.Serializable {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 2289872385854194102L;
+
+    /**
+     * 涓婚敭
+     */
+    private String oid;
+
+    /**
+     * 閾炬帴绫诲瀷鑻辨枃鍚嶇О
+     */
+    private String id;
+
+    /**
+     * 閾炬帴绫诲瀷涓枃鍚嶇О
+     */
+    private String name;
+
+	/**
+	 * 鏁版嵁搴撹〃
+	 */
+	private String tableName;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    /**
+     * c#
+     */
+    private String shape;
+
+    /**
+     * 瀹炵幇绫�
+     */
+    private String implClass;
+
+    /**
+     * from绔笟鍔$被鍨�
+     */
+    private String fromBtmType;
+
+    /**
+     * from绔笟鍔$被鍨嬫樉绀哄璞�
+     */
+    private List<BtmTypeVO> fromBtmTypes;
+
+    /**
+     * from绔笟鍔$被鍨嬪悕绉�
+     */
+    private String fromBtmTypeName;
+
+    /**
+     * to绔笟鍔$被鍨�
+     */
+    private String toBtmType;
+
+    /**
+     * to绔笟鍔$被鍨嬪悕绉�
+     */
+    private String toBtmTypeName;
+
+    /**
+     * to绔笟鍔$被鍨嬫樉绀哄璞�
+     */
+    private List<BtmTypeVO> toBtmTypes;
+
+    /**
+     * 涓氬姟绫诲瀷鍚嶇О
+     */
+    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<LinkTypeAttributeVO> attributes;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/ModifyAttributeInfoVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/ModifyAttributeInfoVO.java
new file mode 100644
index 0000000..a19b3f0
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/ModifyAttributeInfoVO.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 ModifyAttributeInfoVO 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/OmdAttributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdAttributeVO.java
deleted file mode 100644
index 33edc96..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdAttributeVO.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vci.ubcs.omd.vo;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.vci.ubcs.omd.entity.OmdAttribute;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.util.List;
-
-
-/**
- * Description: 鍏冩暟鎹樉绀哄璞�
- *
- * @author LiHang
- * @date 2023/4/3
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "鍏冩暟鎹樉绀哄璞�", description = "鍏冩暟鎹樉绀哄璞�")
-public class OmdAttributeVO extends OmdAttribute {
-	/**
-	 * 搴忓垪鍖�
-	 */
-	private static final long serialVersionUID = 279638479374768539L;
-
-	/**
-	 * 涓婚敭ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long id;
-
-	@ApiModelProperty("瀛楁鑼冨洿")
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	List<OmdFieldRangeVO> fieldRanges;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdFieldRangeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdFieldRangeVO.java
deleted file mode 100644
index 87edbe1..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdFieldRangeVO.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.vci.ubcs.omd.vo;
-
-import com.vci.ubcs.omd.entity.OmdFieldRange;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-
-/**
- * Description: 瀛楁鑼冨洿鏄剧ず瀵硅薄
- *
- * @author LiHang
- * @date 2023/4/3
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "瀛楁鑼冨洿鏄剧ず瀵硅薄", description = "瀛楁鑼冨洿鏄剧ず瀵硅薄")
-public class OmdFieldRangeVO extends OmdFieldRange {
-	/**
-	 * 搴忓垪鍖�
-	 */
-	private static final long serialVersionUID = 1770817945737478318L;
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/RevisionRuleVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/RevisionRuleVO.java
new file mode 100644
index 0000000..ad5f3b2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/RevisionRuleVO.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 RevisionRuleVO 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/StatusVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/StatusVO.java
new file mode 100644
index 0000000..fd8a951
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/StatusVO.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 StatusVO 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-util-api/src/main/java/com/vci/ubcs/starter/annotation/Transient.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/Transient.java
new file mode 100644
index 0000000..d889950
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/Transient.java
@@ -0,0 +1,16 @@
+package com.vci.ubcs.starter.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Transient {
+	boolean value() default true;
+
+	String referColumn() default "";
+
+	String valueField() default "oid";
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/VciEnum.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/VciEnum.java
new file mode 100644
index 0000000..9489525
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/annotation/VciEnum.java
@@ -0,0 +1,24 @@
+package com.vci.ubcs.starter.annotation;
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.web.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface VciEnum {
+	String name() default "";
+
+	Class valueType() default String.class;
+
+	String text() default "";
+
+	String description() default "";
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/bo/WriteExcelData.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/bo/WriteExcelData.java
new file mode 100644
index 0000000..ca21b2b
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/bo/WriteExcelData.java
@@ -0,0 +1,244 @@
+package com.vci.ubcs.starter.bo;
+
+import java.util.List;
+
+public class WriteExcelData {
+	private int row;
+	private int col;
+	private Object obj;
+	private boolean merged = false;
+	private int rowTo;
+	private int colTo;
+	private boolean copyStyle = false;
+	private int copyStyleRow;
+	private int copyStyleCol;
+	private boolean center;
+	private boolean formula = false;
+	private boolean nameRefer = false;
+	private boolean validation = false;
+	private List<String> validationDataList;
+	private String validationErrorMsg;
+	private String fontColor;
+	private String align;
+	private String dateFormat;
+	private boolean readOnly;
+	private Integer width;
+
+	public String getFontColor() {
+		return this.fontColor;
+	}
+
+	public void setFontColor(String fontColor) {
+		this.fontColor = fontColor;
+	}
+
+	public String getAlign() {
+		return this.align;
+	}
+
+	public void setAlign(String align) {
+		this.align = align;
+	}
+
+	public List<String> getValidationDataList() {
+		return this.validationDataList;
+	}
+
+	public void setValidationDataList(List<String> validationDataList) {
+		this.validationDataList = validationDataList;
+	}
+
+	public WriteExcelData() {
+	}
+
+	public WriteExcelData(int row, int col, Object obj) {
+		this.row = row;
+		this.col = col;
+		this.obj = obj;
+	}
+
+	public void writeFormula(int row, int col, String foumula) {
+		this.row = row;
+		this.col = col;
+		this.obj = foumula;
+		this.formula = true;
+	}
+
+	public void writeNameRefer(int row, int col, int rowTo, int colTo, String name) {
+		this.row = row;
+		this.col = col;
+		this.obj = name;
+		this.nameRefer = true;
+		this.rowTo = rowTo;
+		this.colTo = colTo;
+	}
+
+	public void writeComboBox(List<String> comboBoxData, int row, int col, int rowTo, int colTo) {
+		this.writeComboBox(comboBoxData, (String)null, row, col, rowTo, colTo);
+	}
+
+	public void writeComboBox(List<String> comboBoxData, String errorMsg, int row, int col, int rowTo, int colTo) {
+		this.validationDataList = comboBoxData;
+		this.validation = true;
+		this.validationErrorMsg = errorMsg;
+		this.row = row;
+		this.col = col;
+		this.rowTo = rowTo;
+		this.colTo = colTo;
+	}
+
+	public void writeUseRefer(String referFormula, int row, int col, int rowTo, int colTo) {
+		this.writeUseRefer(referFormula, (String)null, row, col, rowTo, colTo);
+	}
+
+	public void writeUseRefer(String referFormula, String errorMsg, int row, int col, int rowTo, int colTo) {
+		this.validation = true;
+		this.obj = referFormula;
+		this.validationErrorMsg = errorMsg;
+		this.row = row;
+		this.col = col;
+		this.rowTo = rowTo;
+		this.colTo = colTo;
+	}
+
+	public boolean isReadOnly() {
+		return this.readOnly;
+	}
+
+	public void setReadOnly(boolean readOnly) {
+		this.readOnly = readOnly;
+	}
+
+	public int getRow() {
+		return this.row;
+	}
+
+	public void setRow(int row) {
+		this.row = row;
+	}
+
+	public int getCol() {
+		return this.col;
+	}
+
+	public void setCol(int col) {
+		this.col = col;
+	}
+
+	public Object getObj() {
+		return this.obj;
+	}
+
+	public void setObj(Object obj) {
+		this.obj = obj;
+	}
+
+	public boolean isMerged() {
+		return this.merged;
+	}
+
+	public void setMerged(boolean merged) {
+		this.merged = merged;
+	}
+
+	public int getRowTo() {
+		return this.rowTo;
+	}
+
+	public void setRowTo(int rowTo) {
+		this.rowTo = rowTo;
+	}
+
+	public int getColTo() {
+		return this.colTo;
+	}
+
+	public void setColTo(int colTo) {
+		this.colTo = colTo;
+	}
+
+	public boolean isCopyStyle() {
+		return this.copyStyle;
+	}
+
+	public void setCopyStyle(boolean copyStyle) {
+		this.copyStyle = copyStyle;
+	}
+
+	public int getCopyStyleRow() {
+		return this.copyStyleRow;
+	}
+
+	public void setCopyStyleRow(int copyStyleRow) {
+		this.copyStyleRow = copyStyleRow;
+	}
+
+	public int getCopyStyleCol() {
+		return this.copyStyleCol;
+	}
+
+	public void setCopyStyleCol(int copyStyleCol) {
+		this.copyStyleCol = copyStyleCol;
+	}
+
+	public boolean isCenter() {
+		return this.center;
+	}
+
+	public void setCenter(boolean center) {
+		this.center = center;
+	}
+
+	public boolean isFormula() {
+		return this.formula;
+	}
+
+	public void setFormula(boolean formula) {
+		this.formula = formula;
+	}
+
+	public boolean isNameRefer() {
+		return this.nameRefer;
+	}
+
+	public void setNameRefer(boolean nameRefer) {
+		this.nameRefer = nameRefer;
+	}
+
+	public boolean isValidation() {
+		return this.validation;
+	}
+
+	public void setValidation(boolean validation) {
+		this.validation = validation;
+	}
+
+	public String getValidationErrorMsg() {
+		return this.validationErrorMsg;
+	}
+
+	public void setValidationErrorMsg(String validationErrorMsg) {
+		this.validationErrorMsg = validationErrorMsg;
+	}
+
+	public String getDateFormat() {
+		return this.dateFormat;
+	}
+
+	public void setDateFormat(String dateFormat) {
+		this.dateFormat = dateFormat;
+	}
+
+	public Integer getWidth() {
+		return this.width;
+	}
+
+	public void setWidth(Integer width) {
+		this.width = width;
+	}
+
+	public String toString() {
+		return "WriteExcelData{row=" + this.row + ", col=" + this.col + ", obj=" + this.obj + ", merged=" + this.merged + ", rowTo=" + this.rowTo + ", colTo=" + this.colTo + ", copyStyle=" + this.copyStyle + ", copyStyleRow=" + this.copyStyleRow + ", copyStyleCol=" + this.copyStyleCol + ", center=" + this.center + ", formula=" + this.formula + ", nameRefer=" + this.nameRefer + ", validation=" + this.validation + ", validationDataList=" + this.validationDataList + ", validationErrorMsg='" + this.validationErrorMsg + '\'' + ", fontColor='" + this.fontColor + '\'' + ", align='" + this.align + '\'' + ", dateFormat='" + this.dateFormat + '\'' + ", readOnly=" + this.readOnly + '}';
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/exception/VciBaseException.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/exception/VciBaseException.java
new file mode 100644
index 0000000..eadbff9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/exception/VciBaseException.java
@@ -0,0 +1,80 @@
+package com.vci.ubcs.starter.exception;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.vci.ubcs.starter.web.util.MessageUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.text.MessageFormat;
+
+public class VciBaseException extends RuntimeException {
+	private Logger log = LoggerFactory.getLogger(this.getClass());
+	public static final String paramNull = "com.vci.base.paramNull";
+	public static final String fieldValueRepeat = "com.vci.base.fieldValueRepeat";
+	public static final String objectNotFoundInDb = "com.vci.base.objectNotFoundInDb";
+	public static final String tsNotEqual = "com.vci.base.tsNotEqual";
+	public static final String dateValueFormatError = "com.vci.base.dateValueForamtError";
+	public static final String notLogin = "com.vci.base.notLogin";
+	public static final String notRight = "com.vci.base.notRight";
+	public static final String notDataRight = "com.vci.base.notDataRight";
+	public static final String notUIRight = "com.vci.base.notUIRight";
+	public static final String connectCorbaFail = "com.vci.base.connectCorbaFail";
+	public static final String corbaNotConfig = "com.vci.base.corbaNotConfig ";
+	private String code;
+	private Object[] objs = new Object[0];
+
+	public VciBaseException(String code) {
+		this.code = code;
+	}
+
+	public VciBaseException(String code, Object[] objs) {
+		this.code = code;
+		this.objs = objs;
+	}
+
+	public VciBaseException(String code, Object[] objs, Throwable e) {
+		super(e);
+		this.code = code;
+		this.objs = objs;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public Object[] getObjs() {
+		return this.objs;
+	}
+
+	public void setObjs(Object[] objs) {
+		this.objs = objs;
+	}
+
+	public String getErrorMsg() {
+		if (!(this instanceof VciBaseException) && !this.getClass().getSuperclass().equals(VciBaseException.class)) {
+			return this instanceof Exception ? this.getMessage() : this.code;
+		} else {
+			if (StringUtils.isNotBlank(this.code)) {
+				this.code = MessageUtils.get(this.code, this.objs);
+			}
+
+			this.code = MessageFormat.format(this.code, this.objs);
+			return this.code;
+		}
+	}
+
+	@Override
+	public String getMessage() {
+		return this.getCode() + "," + this.getErrorMsg();
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..93e207a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelColumn.java
@@ -0,0 +1,28 @@
+package com.vci.ubcs.starter.poi.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExcelColumn {
+	String value();
+
+	boolean nullable() default true;
+
+	String enumId() default "";
+
+	String regExg() default "";
+
+	String regExgTitle() default "";
+
+	String group() default "";
+
+	boolean rowIndexColumn() default false;
+
+	boolean readOnly() default false;
+
+	int width() default 0;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..4ae56b1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/annotation/ExcelTitle.java
@@ -0,0 +1,12 @@
+package com.vci.ubcs.starter.poi.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExcelTitle {
+	int rowIndexForTitle() default 1;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..31dc3a6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/AppendDataExcelOption.java
@@ -0,0 +1,60 @@
+package com.vci.ubcs.starter.poi.bo;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class AppendDataExcelOption implements Serializable {
+	private int titleRowIndex = 0;
+	private String sheetName;
+	private List<String> writeFields;
+	private List<String> readOnlyFields;
+	private boolean readOnlyFromField = false;
+
+	public AppendDataExcelOption() {
+	}
+
+	public int getTitleRowIndex() {
+		return this.titleRowIndex;
+	}
+
+	public void setTitleRowIndex(int titleRowIndex) {
+		this.titleRowIndex = titleRowIndex;
+	}
+
+	public String getSheetName() {
+		return this.sheetName;
+	}
+
+	public void setSheetName(String sheetName) {
+		this.sheetName = sheetName;
+	}
+
+	public List<String> getWriteFields() {
+		return this.writeFields;
+	}
+
+	public void setWriteFields(List<String> writeFields) {
+		this.writeFields = writeFields;
+	}
+
+	public List<String> getReadOnlyFields() {
+		return this.readOnlyFields;
+	}
+
+	public void setReadOnlyFields(List<String> readOnlyFields) {
+		this.readOnlyFields = readOnlyFields;
+	}
+
+	public boolean isReadOnlyFromField() {
+		return this.readOnlyFromField;
+	}
+
+	public void setReadOnlyFromField(boolean readOnlyFromField) {
+		this.readOnlyFromField = readOnlyFromField;
+	}
+
+	public String toString() {
+		return "AppendDataExcelOption{titleRowIndex=" + this.titleRowIndex + ", sheetName='" + this.sheetName + '\'' + ", writeFields=" + this.writeFields + ", readOnlyFields=" + this.readOnlyFields + ", readOnlyFromField=" + this.readOnlyFromField + '}';
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..62deb09
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/DownloadTempOption.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.starter.poi.bo;
+
+
+import java.io.Serializable;
+
+public class DownloadTempOption implements Serializable {
+	private Integer defaultRowSize = 1000;
+	private String excelName;
+	private String sheetName;
+
+	public DownloadTempOption(String excelName) {
+		this.excelName = excelName;
+	}
+
+	public String getExcelName() {
+		return this.excelName;
+	}
+
+	public void setExcelName(String excelName) {
+		this.excelName = excelName;
+	}
+
+	public Integer getDefaultRowSize() {
+		return this.defaultRowSize;
+	}
+
+	public void setDefaultRowSize(Integer defaultRowSize) {
+		this.defaultRowSize = defaultRowSize;
+	}
+
+	public String getSheetName() {
+		return this.sheetName;
+	}
+
+	public void setSheetName(String sheetName) {
+		this.sheetName = sheetName;
+	}
+
+	public String toString() {
+		return "DownloadTempOption{defaultRowSize=" + this.defaultRowSize + '}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..c4382ad
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ExcelColumnMap.java
@@ -0,0 +1,71 @@
+package com.vci.ubcs.starter.poi.bo;
+
+public class ExcelColumnMap {
+	private String title;
+	private String columnName;
+	private boolean nullable = true;
+	private String regExg;
+	private String regExgTitle;
+	private String group;
+
+	public ExcelColumnMap() {
+	}
+
+	public ExcelColumnMap(String title, String columnName) {
+		this.title = title;
+		this.columnName = columnName;
+	}
+
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getColumnName() {
+		return this.columnName;
+	}
+
+	public void setColumnName(String columnName) {
+		this.columnName = columnName;
+	}
+
+	public boolean isNullable() {
+		return this.nullable;
+	}
+
+	public void setNullable(boolean nullable) {
+		this.nullable = nullable;
+	}
+
+	public String getRegExg() {
+		return this.regExg;
+	}
+
+	public void setRegExg(String regExg) {
+		this.regExg = regExg;
+	}
+
+	public String getRegExgTitle() {
+		return this.regExgTitle;
+	}
+
+	public void setRegExgTitle(String regExgTitle) {
+		this.regExgTitle = regExgTitle;
+	}
+
+	public String getGroup() {
+		return this.group;
+	}
+
+	public void setGroup(String group) {
+		this.group = group;
+	}
+
+	public String toString() {
+		return "ExcelColumnMap{title='" + this.title + '\'' + ", columnName='" + this.columnName + '\'' + ", nullable=" + this.nullable + ", regExg='" + this.regExg + '\'' + ", regExgTitle='" + this.regExgTitle + '\'' + ", group='" + this.group + '\'' + '}';
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..3300904
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/ReadExcelOption.java
@@ -0,0 +1,69 @@
+package com.vci.ubcs.starter.poi.bo;
+
+
+import java.util.List;
+import java.util.Map;
+
+public class ReadExcelOption {
+	private int fristRow = 1;
+	private int sheetIndex = 0;
+	private String sheetName;
+	private boolean readAllSheet = false;
+	private Map<String, List<ExcelColumnMap>> extendAttrMap;
+
+	public String getSheetName() {
+		return this.sheetName;
+	}
+
+	public void setSheetName(String sheetName) {
+		this.sheetName = sheetName;
+	}
+
+	public ReadExcelOption() {
+	}
+
+	public ReadExcelOption(int fristRow) {
+		this.fristRow = fristRow;
+	}
+
+	public ReadExcelOption(int fristRow, boolean readAllSheet) {
+		this.fristRow = fristRow;
+		this.readAllSheet = readAllSheet;
+	}
+
+	public int getFristRow() {
+		return this.fristRow;
+	}
+
+	public void setFristRow(int fristRow) {
+		this.fristRow = fristRow;
+	}
+
+	public int getSheetIndex() {
+		return this.sheetIndex;
+	}
+
+	public void setSheetIndex(int sheetIndex) {
+		this.sheetIndex = sheetIndex;
+	}
+
+	public boolean isReadAllSheet() {
+		return this.readAllSheet;
+	}
+
+	public void setReadAllSheet(boolean readAllSheet) {
+		this.readAllSheet = readAllSheet;
+	}
+
+	public Map<String, List<ExcelColumnMap>> getExtendAttrMap() {
+		return this.extendAttrMap;
+	}
+
+	public void setExtendAttrMap(Map<String, List<ExcelColumnMap>> extendAttrMap) {
+		this.extendAttrMap = extendAttrMap;
+	}
+
+	public String toString() {
+		return "ReadExcelOption{fristRow=" + this.fristRow + ", sheetIndex=" + this.sheetIndex + ", sheetName='" + this.sheetName + '\'' + ", readAllSheet=" + this.readAllSheet + ", extendAttrMap=" + this.extendAttrMap + '}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..7a20065
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetDataSet.java
@@ -0,0 +1,44 @@
+package com.vci.ubcs.starter.poi.bo;
+
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SheetDataSet {
+	private String sheetName;
+	private List<String> colName = new ArrayList();
+	private List<SheetRowData> rowData = new ArrayList();
+
+	public SheetDataSet() {
+	}
+
+	public String getSheetName() {
+		return this.sheetName;
+	}
+
+	public void setSheetName(String sheetName) {
+		this.sheetName = sheetName;
+	}
+
+	public List<SheetRowData> getRowData() {
+		return this.rowData;
+	}
+
+	public void setRowData(List<SheetRowData> rowData) {
+		this.rowData = rowData;
+	}
+
+	public List<String> getColName() {
+		return this.colName;
+	}
+
+	public void setColName(List<String> colName) {
+		this.colName = colName;
+	}
+
+	public String toString() {
+		return "SheetDataSet{sheetName='" + this.sheetName + '\'' + ", colName=" + this.colName + ", rowData=" + this.rowData + '}';
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..fe8bd0b
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/SheetRowData.java
@@ -0,0 +1,33 @@
+package com.vci.ubcs.starter.poi.bo;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class SheetRowData {
+	private String rowIndex;
+	private Map<Integer, String> data = new HashMap();
+
+	public SheetRowData() {
+	}
+
+	public String getRowIndex() {
+		return this.rowIndex;
+	}
+
+	public void setRowIndex(String rowIndex) {
+		this.rowIndex = rowIndex;
+	}
+
+	public Map<Integer, String> getData() {
+		return this.data;
+	}
+
+	public void setData(Map<Integer, String> data) {
+		this.data = data;
+	}
+
+	public String toString() {
+		return "SheetRowData{rowIndex='" + this.rowIndex + '\'' + ", data=" + this.data + '}';
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..94ebd20
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/bo/WriteExcelOption.java
@@ -0,0 +1,85 @@
+package com.vci.ubcs.starter.poi.bo;
+
+
+import com.vci.ubcs.starter.bo.WriteExcelData;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class WriteExcelOption {
+	private Map<String, List<WriteExcelData>> writeDataMap;
+	private List<String> hideSheetList;
+	private boolean append = false;
+	private boolean revision07 = false;
+	private Map<String, List<ExcelColumnMap>> extendAttrMap;
+
+	public WriteExcelOption() {
+	}
+
+	public WriteExcelOption(List<WriteExcelData> excelDataList) {
+		this.writeDataMap = new HashMap();
+		this.writeDataMap.put("Sheet1", excelDataList);
+	}
+
+	public void addSheetDataList(String sheetName, List<WriteExcelData> excelDataList) {
+		if (this.writeDataMap == null) {
+			this.writeDataMap = new HashMap();
+		}
+
+		this.writeDataMap.put(sheetName, excelDataList);
+	}
+
+	public void addHideSheet(String sheetName) {
+		if (this.hideSheetList == null) {
+			this.hideSheetList = new ArrayList();
+		}
+
+		this.hideSheetList.add(sheetName);
+	}
+
+	public Map<String, List<WriteExcelData>> getWriteDataMap() {
+		return this.writeDataMap;
+	}
+
+	public void setWriteDataMap(Map<String, List<WriteExcelData>> writeDataMap) {
+		this.writeDataMap = writeDataMap;
+	}
+
+	public List<String> getHideSheetList() {
+		return this.hideSheetList;
+	}
+
+	public void setHideSheetList(List<String> hideSheetList) {
+		this.hideSheetList = hideSheetList;
+	}
+
+	public boolean isAppend() {
+		return this.append;
+	}
+
+	public void setAppend(boolean append) {
+		this.append = append;
+	}
+
+	public boolean isRevision07() {
+		return this.revision07;
+	}
+
+	public void setRevision07(boolean revision07) {
+		this.revision07 = revision07;
+	}
+
+	public Map<String, List<ExcelColumnMap>> getExtendAttrMap() {
+		return this.extendAttrMap;
+	}
+
+	public void setExtendAttrMap(Map<String, List<ExcelColumnMap>> extendAttrMap) {
+		this.extendAttrMap = extendAttrMap;
+	}
+
+	public String toString() {
+		return "WriteExcelOption{writeDataMap=" + this.writeDataMap + ", hideSheetList=" + this.hideSheetList + ", append=" + this.append + ", revision07=" + this.revision07 + ", extendAttrMap=" + this.extendAttrMap + '}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..31b56a3
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/constant/ExcelLangCodeConstant.java
@@ -0,0 +1,23 @@
+package com.vci.ubcs.starter.poi.constant;
+
+public class ExcelLangCodeConstant {
+	public static final String READ_IMPORT_FILE_FAIL = "readImportFileFail";
+	public static final String IMPORT_CONTENT_NULL = "importContentNull";
+	public static final String FILE_NOT_FOUND = "fileNotFound";
+	public static final String FILE_IO_EXCEPTION = "fileIoException";
+	public static final String FILE_CREATE_EXCEPTION = "fileCreateException";
+	public static final String INPUT_STREAM_IS_NULL = "inputStreamIsNull";
+	public static final String OUTPUT_STREAM_IS_NULL = "outputStreamIsNull";
+	public static final String WORKBOOK_INIT_FAIL = "workBookInitFail";
+	public static final String CELL_VALUE_CAN_NOT_NULL = "cellValueCanNotNull";
+	public static final String CELL_VALUE_CAN_NOT_NULL_FOR_REG = "cellValueCanNotNullForReg";
+	public static final String CELL_VALUE_NOT_EQUAL_REG = "cellValueNotEqualReg";
+	public static final String CELL_NOT_DATE_FORMATE = "cellNotDateFormate";
+
+	public ExcelLangCodeConstant() {
+	}
+}
+
+
+
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..4d48b36
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/ExcelUtil.java
@@ -0,0 +1,1517 @@
+package com.vci.ubcs.starter.poi.util;
+
+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;
+import org.apache.poi.hssf.usermodel.HSSFDataValidation;
+import org.apache.poi.hssf.usermodel.HSSFDataValidationHelper;
+import org.apache.poi.hssf.usermodel.HSSFRichTextString;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.CellValue;
+import org.apache.poi.ss.usermodel.DataValidation;
+import org.apache.poi.ss.usermodel.DataValidationConstraint;
+import org.apache.poi.ss.usermodel.DateUtil;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.FormulaEvaluator;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.Name;
+import org.apache.poi.ss.usermodel.RichTextString;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.CellRangeAddressList;
+import org.apache.poi.xssf.usermodel.XSSFDataValidation;
+import org.apache.poi.xssf.usermodel.XSSFDataValidationConstraint;
+import org.apache.poi.xssf.usermodel.XSSFDataValidationHelper;
+import org.apache.poi.xssf.usermodel.XSSFRichTextString;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.util.CollectionUtils;
+
+import java.io.*;
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.nio.channels.FileChannel;
+import java.util.*;
+import java.util.stream.Collectors;
+
+public class ExcelUtil {
+	private static Logger logger = LoggerFactory.getLogger(ExcelUtil.class);
+	public static final String KEY_ATTR_CHAR = "鈽�";
+	public static final String REQUIRED_CHAR = "*";
+
+	public ExcelUtil() {
+	}
+
+	public static void copyFile(File source, File target) throws VciBaseException {
+		VciBaseUtil.alertNotNull(new Object[]{source, "鏉ユ簮鏂囦欢", target, "鐩爣鏂囦欢"});
+		if (!source.exists()) {
+			throw new VciBaseException("fileNotFound", new String[]{source.getName()});
+		} else {
+			File is;
+			if (!target.exists()) {
+				is = target.getParentFile();
+				is.mkdirs();
+
+				try {
+					target.createNewFile();
+				} catch (IOException var17) {
+					throw new VciBaseException("fileIoException", new String[]{target.getName()});
+				}
+			}
+
+			is = null;
+			FileOutputStream os = null;
+
+			FileInputStream isF;
+			try {
+				isF = new FileInputStream(source);
+			} catch (FileNotFoundException var16) {
+				throw new VciBaseException("fileNotFound", new String[]{source.getName()});
+			}
+
+			try {
+				os = new FileOutputStream(target);
+			} catch (FileNotFoundException var15) {
+				IOUtils.closeQuietly(isF);
+				throw new VciBaseException("fileNotFound", new String[]{target.getName()});
+			}
+
+			try {
+				copyFile(isF, os);
+			} catch (VciBaseException var12) {
+				throw var12;
+			} catch (Throwable var13) {
+				throw new VciBaseException(LangBaseUtil.getErrorMsg(var13), new String[]{source.getName(), target.getName()}, var13);
+			} finally {
+				IOUtils.closeQuietly(isF);
+				IOUtils.closeQuietly(os);
+			}
+
+		}
+	}
+
+	public static void copyFile(FileInputStream in, FileOutputStream os) throws VciBaseException {
+		try {
+			FileChannel sourceChannel = in.getChannel();
+			FileChannel targetChannel = os.getChannel();
+			int i = 0;
+			int length = 2097152;
+
+			while(true) {
+				if (sourceChannel.position() == sourceChannel.size()) {
+					sourceChannel.close();
+					targetChannel.close();
+				}
+
+				if (sourceChannel.size() - sourceChannel.position() < 20971520L) {
+					length = (int)(sourceChannel.size() - sourceChannel.position());
+				} else {
+					length = 20971520;
+				}
+
+				sourceChannel.transferTo(sourceChannel.position(), (long)length, targetChannel);
+				sourceChannel.position(sourceChannel.position() + (long)length);
+				++i;
+			}
+		} catch (IOException var10) {
+			if (logger.isErrorEnabled()) {
+				logger.error("鎷疯礉婧愭枃浠跺埌鐩爣鏂囦欢鍑虹幇浜嗛敊璇�", var10);
+			}
+
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(var10), new String[0], var10);
+		} catch (Throwable var11) {
+			if (logger.isErrorEnabled()) {
+				logger.error("鎷疯礉婧愭枃浠跺埌鐩爣鏂囦欢鍑虹幇浜嗛敊璇�", var11);
+			}
+
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(var11), new String[0], var11);
+		} finally {
+			IOUtils.closeQuietly(in);
+			IOUtils.closeQuietly(os);
+		}
+	}
+
+	public static void copyFileFromJar(String filePathInJar, File targetFile) throws VciBaseException {
+		VciBaseUtil.alertNotNull(new Object[]{filePathInJar, "鏉ユ簮鏂囦欢", targetFile, "鐩爣鏂囦欢"});
+		File os;
+		if (!targetFile.exists()) {
+			os = targetFile.getParentFile();
+			os.mkdirs();
+
+			try {
+				targetFile.createNewFile();
+			} catch (IOException var12) {
+				throw new VciBaseException("fileIoException", new String[]{targetFile.getName()});
+			}
+		}
+
+		os = null;
+		InputStream ins = null;
+
+		FileOutputStream osF;
+		try {
+			osF = new FileOutputStream(targetFile);
+		} catch (FileNotFoundException var11) {
+			throw new VciBaseException("fileNotFound", new String[]{targetFile.getName()});
+		}
+
+		try {
+			ins = ExcelUtil.class.getResourceAsStream(filePathInJar);
+			IOUtils.copy(ins, osF);
+		} catch (IOException var13) {
+			if (logger.isErrorEnabled()) {
+				logger.error("鎷疯礉婧愭枃浠跺埌鐩爣鏂囦欢鍑虹幇浜嗛敊璇�", var13);
+			}
+
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(var13), new String[0], var13);
+		} catch (Throwable var14) {
+			if (logger.isErrorEnabled()) {
+				logger.error("鎷疯礉婧愭枃浠跺埌鐩爣鏂囦欢鍑虹幇浜嗛敊璇�", var14);
+			}
+
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(var14), new String[0], var14);
+		} finally {
+			IOUtils.closeQuietly(ins);
+			IOUtils.closeQuietly(osF);
+		}
+
+	}
+
+	public static void writeDataToFile(String fileName, WriteExcelOption writeExcelOption) throws VciBaseException {
+		writeDataToFile(new File(fileName), writeExcelOption);
+	}
+
+	public static void writeDataToFile(File file, WriteExcelOption writeExcelOption) throws VciBaseException {
+		if (file == null) {
+			throw new VciBaseException("鏂囦欢涓虹┖锛屾棤娉曟壘鍒版枃浠�");
+		} else {
+			if (!file.exists()) {
+				File folder = file.getParentFile();
+				if (!folder.exists()) {
+					folder.mkdirs();
+				}
+
+				try {
+					file.createNewFile();
+				} catch (IOException var14) {
+					throw new VciBaseException("fileNotFound", new String[]{file.getName()});
+				}
+			}
+
+			Workbook workbook = null;
+			if (writeExcelOption != null && writeExcelOption.isAppend()) {
+				try {
+					if (file.length() == 0L) {
+						workbook = createWorkbook(false);
+					} else {
+						workbook = getWorkbookByInputStream(new FileInputStream(file));
+					}
+				} catch (FileNotFoundException var13) {
+					throw new VciBaseException("fileNotExist", new String[]{file.getName()}, var13);
+				}
+			}
+
+			OutputStream os = null;
+
+			try {
+				os = new FileOutputStream(file);
+			} catch (FileNotFoundException var12) {
+				throw new VciBaseException("fileNotFound", new String[]{var12.getMessage()}, var12);
+			}
+
+			try {
+				writeDataToFile(os, writeExcelOption, workbook);
+			} catch (VciBaseException var15) {
+				if (logger.isErrorEnabled()) {
+					logger.error("鍐欏叆鏁版嵁鍒癳xcel鍑洪敊", var15);
+				}
+
+				throw var15;
+			} catch (Throwable var16) {
+				if (logger.isErrorEnabled()) {
+					logger.error("鍐欏叆鏁版嵁鍒癳xcel鍑洪敊", var16);
+				}
+
+				throw new VciBaseException(LangBaseUtil.getErrorMsg(var16), new String[0], var16);
+			} finally {
+				IOUtils.closeQuietly(os);
+			}
+
+		}
+	}
+
+	public static void writeDataToFile(OutputStream os, WriteExcelOption writeExcelOption) throws VciBaseException {
+		writeDataToFile(os, writeExcelOption, (Workbook)null);
+	}
+
+	public static void writeDataToFile(OutputStream os, WriteExcelOption writeExcelOption, Workbook workbook) throws VciBaseException {
+		if (os == null) {
+			throw new VciBaseException("outputStreamIsNull");
+		} else {
+			if (writeExcelOption == null) {
+				IOUtils.closeQuietly(os);
+			} else {
+				Workbook wb = null;
+				if (writeExcelOption.isAppend() && workbook != null) {
+					wb = workbook;
+				} else {
+					wb = createWorkbook(writeExcelOption.isRevision07());
+				}
+
+				Workbook finalWb = wb;
+				writeExcelOption.getWriteDataMap().forEach((sheetName, excelDataList) -> {
+					Sheet sheet = getSheetByWorkbook(finalWb, sheetName);
+
+					try {
+						writeDataToCell(sheet, excelDataList);
+					} catch (VciBaseException var6) {
+						IOUtils.closeQuietly(os);
+						throw var6;
+					} catch (Throwable var7) {
+						if (logger.isErrorEnabled()) {
+							logger.error("鍐欏叆鏁版嵁鍒板伐浣滅翱鍑洪敊", var7);
+						}
+
+						IOUtils.closeQuietly(os);
+						throw new VciBaseException(LangBaseUtil.getErrorMsg(var7), new String[0], var7);
+					}
+				});
+				if (!CollectionUtils.isEmpty(writeExcelOption.getHideSheetList())) {
+					Workbook finalWb1 = wb;
+					writeExcelOption.getHideSheetList().stream().forEach((sheetName) -> {
+						Sheet sheet = getSheetByWorkbook(finalWb1, sheetName);
+						finalWb1.setSheetHidden(finalWb1.getSheetIndex(sheet), true);
+					});
+				}
+
+				try {
+					wb.write(os);
+				} catch (IOException var13) {
+					if (logger.isErrorEnabled()) {
+						logger.error("鎶婂伐浣滅翱涓婄殑鏁版嵁鍐欏叆鍒版枃浠跺嚭閿�", var13);
+					}
+
+					throw new VciBaseException(LangBaseUtil.getErrorMsg(var13), new String[0], var13);
+				} finally {
+					IOUtils.closeQuietly(os);
+
+					try {
+						wb.close();
+					} catch (Throwable var12) {
+						if (logger.isErrorEnabled()) {
+							logger.error("鍏抽棴宸ヤ綔绨�", var12);
+						}
+					}
+
+				}
+			}
+
+		}
+	}
+
+	public static int getCellIndexForPoField(String excelFileName, String sheetName, Class<?> poClass, String poFieldName) throws VciBaseException {
+		return getCellIndexForPoField(new File(excelFileName), sheetName, poClass, poFieldName);
+	}
+
+	public static int getCellIndexForPoField(File excelFile, String sheetName, Class<?> poClass, String poFieldName) throws VciBaseException {
+		VciBaseUtil.alertNotNull(new Object[]{excelFile, "excel鐨勬枃浠�", poClass, "poi瀵煎叆瀵煎嚭瀵硅薄鎵�灞炵殑绫�", poFieldName, "灞炴�х殑鍚嶇О"});
+		if (!excelFile.exists()) {
+			throw new VciBaseException("fileNotExist", new String[]{excelFile.getAbsolutePath()});
+		} else {
+			if (StringUtil.isBlank(sheetName)) {
+				sheetName = "Sheet1";
+			}
+
+			Field field = VciBaseUtil.getFieldForObject(poFieldName, poClass);
+			if (field == null) {
+				throw new VciBaseException("瀵硅薄涓笉瀛樺湪姝ゅ睘鎬э紝{0}锛寋1}", new String[]{poFieldName, poClass.getName()});
+			} else {
+				if (field.isAnnotationPresent(ExcelColumn.class)) {
+					ExcelColumn ec = getExcelColumnAnnotation(field);
+					String columnName = ec.value();
+					Workbook workbook = null;
+
+					try {
+						workbook = getWorkbookByInputStream(new FileInputStream(excelFile));
+					} catch (FileNotFoundException var15) {
+						throw new VciBaseException("fileNotExist", new String[]{excelFile.getAbsolutePath()});
+					}
+
+					if (workbook != null) {
+						Sheet sheet = workbook.getSheet(sheetName);
+						if (sheet != null) {
+							Row row = sheet.getRow(getRowIndexForTitle(poClass));
+							if (row != null) {
+								short lastCellNum = row.getLastCellNum();
+
+								for(short i = 0; i < lastCellNum; ++i) {
+									Cell cell = row.getCell(i);
+									if (columnName.equals(cell.getStringCellValue())) {
+										try {
+											workbook.close();
+										} catch (IOException var14) {
+											logger.error("鍏抽棴宸ヤ綔琛ㄥ嚭鐜伴敊璇�", var14);
+										}
+
+										return i;
+									}
+								}
+							}
+						}
+					}
+				}
+
+				return -1;
+			}
+		}
+	}
+
+	public static Map<String, Integer> listCellIndexForPO(File excelFile, String sheetName, Class<?> poClass) throws VciBaseException {
+		VciBaseUtil.alertNotNull(new Object[]{excelFile, "excel鐨勬枃浠�", poClass, "poi瀵煎叆瀵煎嚭瀵硅薄鎵�灞炵殑绫�"});
+		if (!excelFile.exists()) {
+			throw new VciBaseException("fileNotExist", new String[]{excelFile.getAbsolutePath()});
+		} else {
+			if (StringUtil.isBlank(sheetName)) {
+				sheetName = "Sheet1";
+			}
+
+			List<Field> fields = VciBaseUtil.getAllFieldForObj(poClass);
+			Map<String, Integer> cellIndexMap = new HashMap();
+			if (!CollectionUtils.isEmpty(fields)) {
+				Workbook workbook = null;
+
+				try {
+					workbook = getWorkbookByInputStream(new FileInputStream(excelFile));
+				} catch (FileNotFoundException var14) {
+					throw new VciBaseException("fileNotExist", new String[]{excelFile.getAbsolutePath()});
+				}
+
+				if (workbook != null) {
+					Sheet sheet = workbook.getSheet(sheetName);
+					if (sheet != null) {
+						Row row = sheet.getRow(getRowIndexForTitle(poClass));
+						if (row != null) {
+							Map<String, String> columnNamesMap = new HashMap();
+							fields.stream().forEach((field) -> {
+								if (field.isAnnotationPresent(ExcelColumn.class)) {
+									ExcelColumn ec = getExcelColumnAnnotation(field);
+									String columnName = ec.value();
+									columnNamesMap.put(columnName, field.getName());
+								}
+
+							});
+							short lastCellNum = row.getLastCellNum();
+
+							for(short i = 0; i < lastCellNum; ++i) {
+								Cell cell = row.getCell(i);
+								String cellName = cell.getStringCellValue();
+								if (columnNamesMap.containsKey(cellName)) {
+									cellIndexMap.put(columnNamesMap.get(cellName), Integer.valueOf(i));
+								}
+							}
+						}
+					}
+
+					try {
+						workbook.close();
+					} catch (IOException var13) {
+						logger.error("鍏抽棴宸ヤ綔琛ㄥ嚭鐜伴敊璇�", var13);
+					}
+				}
+			}
+
+			return cellIndexMap;
+		}
+	}
+
+	public static int getRowIndexForTitle(Class<?> poClass) {
+		if (poClass.isAnnotationPresent(ExcelTitle.class)) {
+			ExcelTitle ec = (ExcelTitle)poClass.getAnnotation(ExcelTitle.class);
+			if (ec == null) {
+				ec = (ExcelTitle)poClass.getDeclaredAnnotation(ExcelTitle.class);
+			}
+
+			if (ec != null) {
+				return ec.rowIndexForTitle();
+			}
+		}
+
+		return 0;
+	}
+
+	public static String getCellNameByIndex(int colIndex) {
+		if (colIndex < 26) {
+			return String.valueOf((char)(65 + colIndex));
+		} else {
+			int balance = colIndex % 26;
+			int multiple = (colIndex - balance) / 26;
+			String prefix = String.valueOf((char)(65 + (multiple - 1)));
+			String suffix = String.valueOf((char)(65 + balance));
+			return prefix + suffix;
+		}
+	}
+
+	public static Workbook createWorkbook(boolean is07) {
+		Workbook wb = null;
+		if (is07) {
+			wb = new XSSFWorkbook();
+		} else {
+			wb = new HSSFWorkbook();
+		}
+
+		return (Workbook)wb;
+	}
+
+	public static Workbook getWorkbookByInputStream(InputStream ins) throws VciBaseException {
+		Workbook wb = null;
+
+		try {
+			wb = WorkbookFactory.create(ins);
+			return wb;
+		} catch (IOException var3) {
+			IOUtils.closeQuietly(ins);
+			throw new VciBaseException("workBookInitFail", new String[]{LangBaseUtil.getErrorMsg(var3)});
+		}
+	}
+
+	private static Sheet getSheetByWorkbook(Workbook wb, String sheetName) {
+		if (StringUtil.isBlank(sheetName)) {
+			sheetName = "Sheet1";
+		}
+
+		Sheet sheet = wb.getSheet(sheetName);
+		if (sheet == null) {
+			sheet = wb.createSheet(sheetName);
+		}
+
+		return sheet;
+	}
+
+	private static Row getRowBySheet(Sheet sheet, int rowIndex) {
+		Row row = sheet.getRow(rowIndex);
+		if (row == null) {
+			row = sheet.createRow(rowIndex);
+		}
+
+		return row;
+	}
+
+	private static Cell getCellByRow(Row row, int cellIndex) {
+		Cell cell = row.getCell(cellIndex);
+		if (cell == null) {
+			cell = row.createCell(cellIndex);
+		}
+
+		return cell;
+	}
+
+	private static void writeDataToCell(Sheet sheet, List<WriteExcelData> excelDataList) throws VciBaseException {
+		if (sheet != null && !CollectionUtils.isEmpty(excelDataList)) {
+			List<WriteExcelData> mergedDataList = new ArrayList();
+			excelDataList.stream().forEach((ed) -> {
+				Row row = getRowBySheet(sheet, ed.getRow());
+				Cell cell = getCellByRow(row, ed.getCol());
+				if (ed.isMerged() && (ed.getRowTo() > ed.getRow() || ed.getColTo() > ed.getCol())) {
+					mergedDataList.add(ed);
+				}
+
+				copyStyle(sheet, cell, ed);
+				if (ed.isReadOnly() && ed.getObj() != null && !(ed.getObj() instanceof RichTextString) && CollectionUtils.isEmpty(ed.getValidationDataList())) {
+					List<String> list = new ArrayList();
+					list.add(ed.getObj().toString());
+					ed.setValidationDataList(list);
+					setValidation(sheet, ed);
+				}
+
+				centerCell(cell, ed);
+				Object value = ed.getObj();
+				if (StringUtil.isNotBlank(ed.getFontColor())) {
+					String rtsValue = value == null ? "" : value.toString();
+					RichTextString ts = cell instanceof HSSFCell ? new HSSFRichTextString(rtsValue) : new XSSFRichTextString(rtsValue);
+					Font font = sheet.getWorkbook().createFont();
+					font.setColor(VciBaseUtil.getShort(ed.getFontColor()));
+					((RichTextString)ts).applyFont(font);
+					value = ts;
+				}
+
+				if (ed.isFormula()) {
+					setFormula(cell, ed);
+				} else if (ed.isNameRefer()) {
+					setNameRefer(sheet, ed);
+				} else if (ed.isValidation()) {
+					setValidation(sheet, ed);
+				} else {
+					setCellValue(cell, value);
+				}
+
+				if (ed.getWidth() != null && ed.getWidth() > 0) {
+					sheet.setColumnWidth(cell.getColumnIndex(), (int)((double)ed.getWidth() + 0.72) * 256);
+				}
+
+			});
+			mergedRegion(sheet, mergedDataList);
+		}
+
+	}
+
+	private static void setFormula(Cell cell, WriteExcelData ed) {
+		if (ed.getObj() != null) {
+			cell.setCellFormula(ed.getObj().toString());
+		}
+
+	}
+
+	private static void setNameRefer(Sheet sheet, WriteExcelData ed) {
+		if (ed.getObj() != null) {
+			Name name = sheet.getWorkbook().createName();
+			name.setNameName(ed.getObj().toString());
+			name.setRefersToFormula(sheet.getSheetName() + "!" + getRange(ed));
+		}
+
+	}
+
+	private static void setValidation(Sheet sheet, WriteExcelData ed) {
+		if (ed.getRowTo() < ed.getRow()) {
+			ed.setRowTo(ed.getRow());
+		}
+
+		if (ed.getColTo() < ed.getCol()) {
+			ed.setColTo(ed.getCol());
+		}
+
+		CellRangeAddressList regions = new CellRangeAddressList(ed.getRow(), ed.getRowTo(), ed.getCol(), ed.getColTo());
+		DataValidation validation = null;
+		XSSFDataValidationConstraint dvConstraint;
+		if (sheet instanceof XSSFSheet) {
+			XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)sheet);
+			dvConstraint = null;
+			if (!CollectionUtils.isEmpty(ed.getValidationDataList())) {
+				dvConstraint = (XSSFDataValidationConstraint)dvHelper.createExplicitListConstraint((String[])ed.getValidationDataList().toArray(new String[0]));
+			} else {
+				VciBaseUtil.alertNotNull(new Object[]{ed.getObj(), "鍐欏叆鏈夋晥鎬х殑鏃跺�欙紝娌℃湁璁剧疆鏈夋晥鎬х殑鍏紡琛ㄨ揪寮�"});
+				dvConstraint = (XSSFDataValidationConstraint)dvHelper.createFormulaListConstraint(ed.getObj().toString());
+			}
+
+			validation = (XSSFDataValidation)dvHelper.createValidation(dvConstraint, regions);
+		} else {
+			HSSFDataValidationHelper dvHelper = new HSSFDataValidationHelper((HSSFSheet)sheet);
+			dvConstraint = null;
+			DataValidationConstraint dvConstraintF;
+			if (!CollectionUtils.isEmpty(ed.getValidationDataList())) {
+				dvConstraintF = dvHelper.createExplicitListConstraint((String[])ed.getValidationDataList().toArray(new String[0]));
+			} else {
+				VciBaseUtil.alertNotNull(new Object[]{ed.getObj(), "鍐欏叆鏈夋晥鎬х殑鏃跺�欙紝娌℃湁璁剧疆鏈夋晥鎬х殑鍏紡琛ㄨ揪寮�"});
+				dvConstraintF = dvHelper.createFormulaListConstraint(ed.getObj().toString());
+			}
+
+			validation = new HSSFDataValidation(regions, dvConstraintF);
+		}
+
+		if (validation instanceof XSSFDataValidation) {
+			((DataValidation)validation).setSuppressDropDownArrow(true);
+			((DataValidation)validation).setShowErrorBox(true);
+		} else {
+			((DataValidation)validation).setSuppressDropDownArrow(false);
+		}
+
+		if (StringUtil.isNotBlank(ed.getValidationErrorMsg())) {
+			((DataValidation)validation).createErrorBox("error", ed.getValidationErrorMsg());
+		}
+
+		sheet.addValidationData((DataValidation)validation);
+	}
+
+	private static String getRange(WriteExcelData excelData) {
+		char start = (char)(65 + excelData.getCol());
+		int rowId = excelData.getRow() + 1;
+		int endRowId = excelData.getRowTo() + 1;
+		char endPrefix;
+		if (excelData.getColTo() <= 25) {
+			endPrefix = (char)(65 + excelData.getColTo());
+			return "$" + start + "$" + rowId + ":$" + endPrefix + "$" + endRowId;
+		} else {
+			endPrefix = 'A';
+//			boolean endSuffix = true;
+			char endSuffix;
+			if ((excelData.getColTo() - 25) / 26 != 0 && excelData.getColTo() != 51) {
+				if ((excelData.getColTo() - 25) % 26 == 0) {
+					endSuffix = 'Z';
+					endPrefix = (char)(endPrefix + (excelData.getColTo() - 25) / 26 - 1);
+				} else {
+					endSuffix = (char)(65 + (excelData.getColTo() - 25) % 26 - 1);
+					endPrefix = (char)(endPrefix + (excelData.getColTo() - 25) / 26);
+				}
+			} else if ((excelData.getColTo() - 25) % 26 == 0) {
+				endSuffix = 'Z';
+			} else {
+				endSuffix = (char)(65 + (excelData.getColTo() - 25) % 26 - 1);
+			}
+
+			return "$" + start + "$" + rowId + ":$" + endPrefix + endSuffix + "$" + endRowId;
+		}
+	}
+
+	private static void setCellValue(Cell cell, Object value) {
+		if (value != null) {
+			if (value instanceof Date) {
+				cell.setCellValue((Date)value);
+			} else if (value instanceof String) {
+				cell.setCellValue(value.toString());
+			} else if (value instanceof Boolean) {
+				cell.setCellValue((Boolean)value);
+			} else if (value instanceof Integer) {
+				cell.setCellValue((double)(Integer)value);
+			} else if (value instanceof Long) {
+				cell.setCellValue((double)(Long)value);
+			} else if (value instanceof BigDecimal) {
+				cell.setCellValue(((BigDecimal)value).doubleValue());
+			} else if (value instanceof Double) {
+				cell.setCellValue((Double)value);
+			} else if (value instanceof RichTextString) {
+				cell.setCellValue((RichTextString)value);
+			} else {
+				cell.setCellValue(value.toString());
+			}
+		}
+
+	}
+
+	private static void copyStyle(Sheet sheet, Cell cell, WriteExcelData excelData) {
+		if (excelData.isCopyStyle()) {
+			Row copyStyleRow = sheet.getRow(excelData.getCopyStyleRow());
+			if (copyStyleRow != null) {
+				Cell copyStyleCell = copyStyleRow.getCell(excelData.getCopyStyleCol());
+				copyStyleForCell(copyStyleCell, cell);
+				if (StringUtil.isNotBlank(excelData.getDateFormat())) {
+					HSSFDataFormat format = (HSSFDataFormat)sheet.getWorkbook().createDataFormat();
+					cell.getCellStyle().setDataFormat(format.getFormat(excelData.getDateFormat()));
+				}
+			}
+		}
+
+	}
+
+	private static void copyStyleForCell(Cell fromCell, Cell toCell) {
+		CellStyle cellStyle = toCell.getCellStyle();
+		CellStyle fromStyle = fromCell.getCellStyle();
+		cellStyle.cloneStyleFrom(fromStyle);
+		cellStyle.setAlignment(fromStyle.getAlignment());
+		cellStyle.setBorderBottom(fromStyle.getBorderBottom());
+		cellStyle.setBorderLeft(fromStyle.getBorderLeft());
+		cellStyle.setBorderRight(fromStyle.getBorderRight());
+		cellStyle.setBorderTop(fromStyle.getBorderTop());
+		cellStyle.setDataFormat(fromStyle.getDataFormat());
+		cellStyle.setFillBackgroundColor(fromStyle.getFillBackgroundColor());
+		cellStyle.setFillForegroundColor(fromStyle.getFillForegroundColor());
+		cellStyle.setFillPattern(fromStyle.getFillPattern());
+		cellStyle.setVerticalAlignment(fromStyle.getVerticalAlignment());
+		cellStyle.setWrapText(fromStyle.getWrapText());
+		cellStyle.setLocked(fromStyle.getLocked());
+		cellStyle.setBottomBorderColor(fromStyle.getBottomBorderColor());
+		cellStyle.setLeftBorderColor(fromStyle.getLeftBorderColor());
+		cellStyle.setTopBorderColor(fromStyle.getTopBorderColor());
+		cellStyle.setRightBorderColor(fromStyle.getRightBorderColor());
+	}
+
+	private static void centerCell(Cell cell, WriteExcelData excelData) {
+		if (excelData.isCenter()) {
+			CellStyle cellStyle = cell.getCellStyle();
+			cellStyle.setAlignment(HorizontalAlignment.CENTER);
+			cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+		}
+
+	}
+
+	private static void mergedRegion(Sheet sheet, Collection<WriteExcelData> mergedDataList) {
+		if (!CollectionUtils.isEmpty(mergedDataList)) {
+			mergedDataList.stream().forEach((ed) -> {
+				if (ed.getRowTo() < ed.getRow()) {
+					ed.setRowTo(ed.getRow());
+				}
+
+				if (ed.getColTo() < ed.getCol()) {
+					ed.setColTo(ed.getCol());
+				}
+
+				sheet.addMergedRegion(new CellRangeAddress(ed.getRow(), ed.getRowTo(), ed.getCol(), ed.getColTo()));
+			});
+		}
+
+	}
+
+	public static List<SheetDataSet> readDataObjectFromExcel(File file) throws VciBaseException {
+		return readDataObjectFromExcel(file, SheetDataSet.class);
+	}
+
+	public static <T> List<T> readDataObjectFromExcel(File file, Class<T> doClass) throws VciBaseException {
+		return readDataObjectFromExcel(file, doClass, (ReadExcelOption)null);
+	}
+
+	public static <T> List<T> readDataObjectFromExcel(File file, Class<T> doClass, ReadExcelOption excelOption) throws VciBaseException {
+		return readDataObjectFromExcel((File)file, doClass, excelOption, (PoiImportProcesser)null);
+	}
+
+	public static <T> List<T> readDataObjectFromExcel(File file, Class<T> doClass, ReadExcelOption excelOption, PoiImportProcesser<T> processer) throws VciBaseException {
+		InputStream ins = null;
+
+		try {
+			ins = new FileInputStream(file);
+		} catch (Throwable var15) {
+			String msg = "readImportFileFail";
+			if (logger.isErrorEnabled()) {
+				logger.error(msg, var15);
+			}
+
+			throw new VciBaseException(msg + LangBaseUtil.getErrorMsg(var15), new String[0], var15);
+		}
+
+		List var5;
+		try {
+			var5 = readDataObjectFromExcel((InputStream)ins, doClass, excelOption, processer);
+		} catch (VciBaseException var12) {
+			throw var12;
+		} catch (Throwable var13) {
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(var13), new String[0], var13);
+		} finally {
+			IOUtils.closeQuietly(ins);
+		}
+
+		return var5;
+	}
+
+	public static <T> List<T> readDataObjectFromExcel(InputStream ins, Class<T> doClass, ReadExcelOption excelOption, PoiImportProcesser<T> processer) throws VciBaseException {
+		if (ins == null) {
+			throw new VciBaseException("inputStreamIsNull");
+		} else {
+			if (doClass == null) {
+				doClass = (Class<T>) SheetDataSet.class;
+			}
+
+			boolean isDataSet = false;
+			if (doClass.equals(SheetDataSet.class)) {
+				isDataSet = true;
+			}
+
+			Map<Field, ExcelColumn> excelColumnSet = getExcelColumnAnnotations(doClass);
+			Map<String, ExcelColumn> excelTitleMap = (Map)((Map)Optional.of(excelColumnSet).get()).values().stream().collect(Collectors.toMap((s) -> {
+//				return s.value();
+//				ExcelColumn s1 = (ExcelColumn) s;
+//				s1.value();
+//				((InvocationHandler) ((Proxy) s).).memberValues.get("value");
+				return ((ExcelColumn) s).value();
+//				return ((AnnotationInvocationHandler) ((Proxy) s).h).memberValues.get("value");
+			}, (t) -> {
+				return t;
+			}));
+			Map<String, Field> excelTitleFieldMap = new HashMap();
+			Map<String, ExcelColumnMap> extendAttrTitleMap = new HashMap();
+			Field[] rowIndexFields = new Field[]{null};
+			ReadExcelOption finalExcelOption = excelOption;
+			excelColumnSet.forEach((field, excelColumnx) -> {
+				excelTitleFieldMap.put(excelColumnx.value(), field);
+				if (excelColumnx.rowIndexColumn()) {
+					rowIndexFields[0] = field;
+				}
+
+				field.setAccessible(true);
+				if ((field.getType().equals(Map.class) || field.getType().getSuperclass().equals(Map.class)) && !CollectionUtils.isEmpty(finalExcelOption.getExtendAttrMap()) && finalExcelOption.getExtendAttrMap().containsKey(excelColumnx.value())) {
+					List<ExcelColumnMap> excelColumnMaps = (List) finalExcelOption.getExtendAttrMap().get(excelColumnx.value());
+					if (!CollectionUtils.isEmpty(excelColumnMaps)) {
+						excelColumnMaps.stream().forEach((ss) -> {
+							excelTitleFieldMap.put(ss.getTitle(), field);
+							extendAttrTitleMap.put(ss.getTitle(), ss);
+						});
+					}
+				}
+
+			});
+			Field rowIndexField = null;
+			if (rowIndexFields[0] != null) {
+				rowIndexField = rowIndexFields[0];
+			}
+
+			Workbook workbook = getWorkbookByInputStream(ins);
+			if (excelOption == null) {
+				excelOption = new ReadExcelOption();
+			}
+
+			FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+			List<T> dataSet = new ArrayList();
+
+			try {
+				for(int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); ++sheetIndex) {
+					Sheet sheet = workbook.getSheetAt(sheetIndex);
+					if (StringUtil.isNotBlank(excelOption.getSheetName())) {
+						if (!sheet.getSheetName().equalsIgnoreCase(excelOption.getSheetName())) {
+							continue;
+						}
+					} else if (!excelOption.isReadAllSheet() && sheetIndex != excelOption.getSheetIndex()) {
+						continue;
+					}
+
+					SheetDataSet sheetDataSet = new SheetDataSet();
+					sheetDataSet.setSheetName(sheet.getSheetName());
+					if (isDataSet) {
+						dataSet.add((T) sheetDataSet);
+					}
+
+					Map<Integer, String> colsNameIndexMap = new HashMap();
+					int rowIndex;
+					if (excelOption.getFristRow() > 0) {
+						try {
+							Row titleRow = sheet.getRow(excelOption.getFristRow() - 1);
+							rowIndex = titleRow.getLastCellNum();
+							List<String> titleList = new LinkedList();
+
+							for(int i = 0; i < rowIndex; ++i) {
+								String title = VciBaseUtil.getStringValueFromObject(getCellValue(titleRow.getCell(i), evaluator));
+								if (StringUtil.isNotBlank(title)) {
+									title = title.replace("*", "").replace("鈽�", "");
+									colsNameIndexMap.put(i, title);
+									titleList.add(title);
+								}
+							}
+
+							if (isDataSet) {
+								sheetDataSet.setColName(titleList);
+							}
+						} catch (Exception var52) {
+							if (logger.isErrorEnabled()) {
+								logger.error("璇诲彇excel鏂囦欢涓殑鏍囬淇℃伅鍑虹幇浜嗛敊璇�", var52);
+							}
+
+							throw var52;
+						}
+					}
+
+					List<SheetRowData> rowDataList = new LinkedList();
+					if (sheet.getLastRowNum() > 0) {
+						for(rowIndex = excelOption.getFristRow(); rowIndex <= sheet.getLastRowNum(); ++rowIndex) {
+							Row rowDataSet = sheet.getRow(rowIndex);
+							if (rowDataSet != null) {
+								boolean notValue = false;
+
+								for(int i = 0; i < rowDataSet.getLastCellNum(); ++i) {
+									Cell cellTemp = rowDataSet.getCell(i);
+									Object valueTemp = getCellValue(cellTemp, evaluator);
+									if (valueTemp != null && !(valueTemp instanceof String) || valueTemp instanceof String && valueTemp != null && StringUtil.isNotBlank(valueTemp.toString())) {
+										notValue = true;
+										break;
+									}
+								}
+
+								if (notValue) {
+									SheetRowData rd = isDataSet ? new SheetRowData() : null;
+									T obj = null;
+									if (!isDataSet) {
+										try {
+											obj = doClass.newInstance();
+										} catch (Throwable var49) {
+											if (logger.isErrorEnabled()) {
+												logger.error("瀹炰緥鍖栨暟鎹璞�", var49);
+											}
+
+											throw new VciBaseException("瀹炰緥鍖栨暟鎹璞�," + LangBaseUtil.getErrorMsg(var49));
+										}
+									}
+
+									if (isDataSet) {
+										rd.setRowIndex(String.valueOf(rowIndex));
+									}
+
+									if (!isDataSet && rowIndexField != null) {
+										VciBaseUtil.setValueForField(rowIndexField, obj, String.valueOf(rowIndex));
+									}
+
+									Map<Integer, String> rowDataMap = new HashMap();
+
+									for(int columnIndex = 0; columnIndex < rowDataSet.getLastCellNum(); ++columnIndex) {
+										Cell cell = rowDataSet.getCell(columnIndex);
+										Object value = getCellValue(cell, evaluator);
+										String title = colsNameIndexMap.containsKey(columnIndex) ? (String)colsNameIndexMap.get(columnIndex) : "";
+										boolean isMapField = false;
+										Field thisField = null;
+										if (StringUtil.isNotBlank(title) && excelTitleFieldMap.containsKey(title)) {
+											thisField = (Field)excelTitleFieldMap.get(title);
+										}
+
+										if (thisField != null) {
+											thisField.setAccessible(true);
+											if (thisField.getType().equals(Map.class) || thisField.getType().getSuperclass().equals(Map.class)) {
+												isMapField = true;
+											}
+										}
+
+										ExcelColumn excelColumn = null;
+										if (StringUtil.isNotBlank(title) && excelTitleMap.containsKey(title)) {
+											excelColumn = (ExcelColumn)excelTitleMap.get(title);
+										}
+
+										ExcelColumnMap columnMap = null;
+										if (isMapField) {
+											columnMap = (ExcelColumnMap)extendAttrTitleMap.get(title);
+										}
+
+										boolean isNull = false;
+										if (value == null || value instanceof String && StringUtil.isBlank(value.toString())) {
+											isNull = true;
+										}
+
+										if (!isNull) {
+											if (!isDataSet) {
+												if (thisField != null && (excelColumn != null || columnMap != null)) {
+													if (isMapField) {
+														Object fieldValue = thisField.get(obj);
+														Object data;
+														if (fieldValue == null) {
+															data = new HashMap();
+														} else {
+															data = (Map)fieldValue;
+														}
+
+														((Map)data).put(columnMap.getColumnName(), value == null ? "" : value.toString());
+
+														try {
+															thisField.set(obj, data);
+														} catch (IllegalAccessException var50) {
+															if (logger.isErrorEnabled()) {
+																logger.error("璁剧疆map绫诲瀷鐨勬暟鎹椂鍊欏嚭鐜颁簡閿欒", var50);
+															}
+														}
+													} else {
+														if (value.getClass().equals(thisField.getType())) {
+															try {
+																thisField.set(obj, value);
+															} catch (IllegalAccessException var51) {
+																if (logger.isErrorEnabled()) {
+																	logger.error("璇诲彇excel鐨勫崟鍏冩牸鐨勫�煎悗锛屼负瀵硅薄璧嬪�煎嚭鐜颁簡閿欒", var51);
+																}
+															}
+														} else {
+															VciBaseUtil.setValueForField(thisField, obj, VciBaseUtil.getStringValueFromObject(value));
+														}
+
+														if (thisField.getType().equals(Date.class) && thisField.get(obj) == null) {
+															throw new VciBaseException("cellNotDateFormate", new String[]{title, rowIndex + 1 + ""});
+														}
+
+														if (StringUtil.isNotBlank(excelColumn.regExg()) && !VciBaseUtil.getStringValueFromObject(value).matches(excelColumn.regExg())) {
+															throw new VciBaseException("cellValueNotEqualReg", new String[]{title, rowIndex + 1 + "", excelColumn.regExgTitle()});
+														}
+													}
+												}
+
+												if (processer != null && thisField != null) {
+													processer.process(value, obj, thisField);
+												}
+											} else {
+												rowDataMap.put(columnIndex, VciBaseUtil.getStringValueFromObject(value));
+											}
+										} else if (!isDataSet && thisField != null && excelColumn != null) {
+											if (!excelColumn.nullable()) {
+												throw new VciBaseException("cellValueCanNotNull", new String[]{title, rowIndex + 1 + ""});
+											}
+
+											if (StringUtil.isNotBlank(excelColumn.regExg())) {
+												throw new VciBaseException("cellValueCanNotNullForReg", new String[]{title, rowIndex + 1 + ""});
+											}
+										}
+									}
+
+									if (isDataSet) {
+										rd.setData(rowDataMap);
+										rowDataList.add(rd);
+									} else {
+										dataSet.add(obj);
+									}
+								}
+							}
+						}
+					}
+
+					if (isDataSet) {
+						sheetDataSet.setRowData(rowDataList);
+					}
+				}
+			} catch (Throwable var53) {
+				throw new VciBaseException(LangBaseUtil.getErrorMsg(var53), new String[0], var53);
+			} finally {
+				IOUtils.closeQuietly(ins);
+
+				try {
+					workbook.close();
+				} catch (IOException var48) {
+					if (logger.isErrorEnabled()) {
+						logger.error("鍏抽棴宸ヤ綔绨垮嚭鐜颁簡閿欒", var48);
+					}
+				}
+
+			}
+
+			return dataSet;
+		}
+	}
+
+	private static Object getCellValue(Cell cell, FormulaEvaluator evaluator) {
+		if (cell != null) {
+			Object cellValue = null;
+			CellType cellTypeEnum = cell.getCellTypeEnum();
+			switch (cellTypeEnum) {
+				case STRING:
+					String thisCellValue = cell.getStringCellValue();
+					cellValue = StringUtil.isEmpty(thisCellValue) ? "" : thisCellValue.trim();
+					break;
+				case BOOLEAN:
+					boolean boolValue = cell.getBooleanCellValue();
+					cellValue = boolValue;
+					break;
+				case FORMULA:
+					cellValue = getCellValue(evaluator.evaluate(cell));
+					break;
+				case NUMERIC:
+					if (DateUtil.isCellDateFormatted(cell)) {
+						cellValue = cell.getDateCellValue();
+					} else {
+						cellValue = cell.getNumericCellValue();
+					}
+					break;
+				default:
+					cellValue = "";
+			}
+
+			return cellValue;
+		} else {
+			return null;
+		}
+	}
+
+	private static Object getCellValue(CellValue cell) {
+		Object cellValue = null;
+		switch (cell.getCellTypeEnum()) {
+			case STRING:
+				String thisCellValue = cell.getStringValue();
+				cellValue = StringUtil.isEmpty(thisCellValue) ? "" : thisCellValue.trim();
+				break;
+			case NUMERIC:
+				cellValue = cell.getNumberValue();
+		}
+
+		return cellValue;
+	}
+
+	public static <T> Map<Field, ExcelColumn> getExcelColumnAnnotations(Class<T> doClass) {
+		Map<Field, ExcelColumn> excelColumnMap = new HashMap();
+		if (!doClass.equals(SheetDataSet.class)) {
+			List<Field> allFields = VciBaseUtil.getAllFieldForObj(doClass);
+			List<Field> hasExcelColumnFields = (List)allFields.stream().filter((field) -> {
+				return field.isAnnotationPresent(ExcelColumn.class);
+			}).collect(Collectors.toList());
+			if (!CollectionUtils.isEmpty(hasExcelColumnFields)) {
+				hasExcelColumnFields.stream().forEach((field) -> {
+					ExcelColumn ec = getExcelColumnAnnotation(field);
+					excelColumnMap.put(field, ec);
+				});
+			}
+		}
+
+		return excelColumnMap;
+	}
+
+	public static ExcelColumn getExcelColumnAnnotation(Field field) {
+		ExcelColumn ec = (ExcelColumn)field.getAnnotation(ExcelColumn.class);
+		if (ec == null) {
+			ec = (ExcelColumn)field.getDeclaredAnnotation(ExcelColumn.class);
+		}
+
+		return ec;
+	}
+
+	public static <T> String downloadImportTempByClass(Class<T> doClass, DownloadTempOption downloadTempOption, PoiTemplateProcesser<T> processer) {
+		if (downloadTempOption == null) {
+			downloadTempOption = new DownloadTempOption("");
+		}
+
+		String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + (StringUtil.isNotBlank(downloadTempOption.getExcelName()) ? downloadTempOption.getExcelName() : "瀵煎叆妯℃澘.xls");
+
+		try {
+			(new File(excelName)).createNewFile();
+		} catch (Throwable var22) {
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(var22), new String[]{excelName}, var22);
+		}
+
+		List<WriteExcelData> excelDataList = new ArrayList();
+		Map<Field, ExcelColumn> fieldExcelColumnMap = getExcelColumnAnnotations(doClass);
+		Map<String, ExcelColumn> fieldNameExcelColumnMap = new HashMap();
+		fieldExcelColumnMap.forEach((fieldx, ec) -> {
+			fieldx.setAccessible(true);
+			fieldNameExcelColumnMap.put(fieldx.getName(), ec);
+		});
+		Field[] fields = doClass.getDeclaredFields();
+		Set<String> finedFields = new HashSet();
+		new HSSFWorkbook();
+		int index = 0;
+
+		for(int i = 0; i < fields.length; ++i) {
+			Field field = fields[i];
+			field.setAccessible(true);
+			String fieldName = field.getName();
+			if (fieldNameExcelColumnMap.containsKey(fieldName)) {
+				finedFields.add(fieldName);
+				ExcelColumn column = (ExcelColumn)fieldNameExcelColumnMap.get(fieldName);
+				if (!column.rowIndexColumn()) {
+					WriteExcelData excelData = new WriteExcelData(0, index, StringUtil.isNotBlank(column.value()) ? column.value() : fieldName);
+					if (!column.nullable()) {
+						excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+						excelData.setObj(excelData.getObj() + "*");
+					}
+
+					excelData.setReadOnly(true);
+					excelData.setCenter(true);
+					if (column.width() > 0) {
+						excelData.setWidth(column.width());
+					}
+
+					List<WriteExcelData> thisRowNextDatas = new ArrayList();
+					if (downloadTempOption.getDefaultRowSize() == null || downloadTempOption.getDefaultRowSize() < 0) {
+						downloadTempOption.setDefaultRowSize(1);
+					}
+
+					Integer defaultRowSize = downloadTempOption.getDefaultRowSize();
+
+					for(int j = 0; j < defaultRowSize; ++j) {
+						thisRowNextDatas.add(new WriteExcelData(1 + j, index, ""));
+					}
+
+					if (StringUtil.isNotBlank(column.enumId()) && processer != null) {
+						Map<String, String> enumMap = processer.wrapperEnumMap(column.enumId(), doClass, field);
+						if (!CollectionUtils.isEmpty(enumMap)) {
+							WriteExcelData thisRowNext = (WriteExcelData)thisRowNextDatas.get(0);
+							thisRowNext.setValidation(true);
+							thisRowNext.setRowTo(defaultRowSize);
+							thisRowNext.setColTo(thisRowNext.getCol());
+							thisRowNext.setValidationDataList((List)enumMap.values().stream().collect(Collectors.toList()));
+						}
+					}
+
+					if (field.isAnnotationPresent(VciFieldType.class)) {
+						VciFieldType fieldType = (VciFieldType)field.getDeclaredAnnotation(VciFieldType.class);
+						if (fieldType == null) {
+							fieldType = (VciFieldType)field.getAnnotation(VciFieldType.class);
+						}
+
+						if (fieldType != null) {
+							String dateFormat;
+							if (VciFieldTypeEnum.VTDateTime.equals(fieldType.value())) {
+								dateFormat = "yyyy-MM-dd HH:mm:ss";
+							} else if (VciFieldTypeEnum.VTDate.equals(fieldType.value())) {
+								dateFormat = "yyyy-MM-dd";
+							} else if (VciFieldTypeEnum.VTTime.equals(fieldType.value())) {
+								dateFormat = "HH:mm:ss";
+							} else {
+								dateFormat = "";
+							}
+
+							if (StringUtil.isNotBlank(dateFormat)) {
+								thisRowNextDatas.stream().forEach((thisRowNextx) -> {
+									thisRowNextx.setDateFormat(dateFormat);
+								});
+							}
+
+							if (VciFieldTypeEnum.VTBoolean.equals(fieldType.value())) {
+								List<String> trueFlase = new ArrayList();
+								trueFlase.add("鏄�");
+								trueFlase.add("鍚�");
+								WriteExcelData thisRowNext = (WriteExcelData)thisRowNextDatas.get(0);
+								thisRowNext.setValidation(true);
+								thisRowNext.setRowTo(defaultRowSize);
+								thisRowNext.setColTo(thisRowNext.getCol());
+								thisRowNext.setValidationDataList(trueFlase);
+							}
+						}
+					}
+
+					excelDataList.addAll(thisRowNextDatas);
+					excelDataList.add(excelData);
+					++index;
+				}
+			}
+		}
+
+		WriteExcelOption excelOption = new WriteExcelOption();
+		excelOption.addSheetDataList(StringUtil.isNotBlank(downloadTempOption.getSheetName()) ? downloadTempOption.getSheetName() : "Sheet1", excelDataList);
+		writeDataToFile(excelName, excelOption);
+		return excelName;
+	}
+
+	public static void mergeExcel(List<String> files, String excelName) {
+		Workbook newExcelCreat = excelName.toLowerCase(Locale.ROOT).endsWith(".xlsx") ? new XSSFWorkbook() : new HSSFWorkbook();
+
+		for(int i = 0; i < files.size(); ++i) {
+			String fromExcelName = (String)files.get(i);
+
+			try {
+				InputStream in = new FileInputStream(fromExcelName);
+				Throwable var6 = null;
+
+				try {
+					Workbook fromExcel = null;
+					if (fromExcelName.toLowerCase(Locale.ROOT).endsWith(".xlsx")) {
+						fromExcel = new XSSFWorkbook(in);
+					} else {
+						fromExcel = new HSSFWorkbook(in);
+					}
+
+					int length = ((Workbook)fromExcel).getNumberOfSheets();
+					Sheet oldSheet;
+					if (length <= 1) {
+						oldSheet = ((Workbook)fromExcel).getSheetAt(0);
+						oldSheet = ((Workbook)newExcelCreat).getSheet(oldSheet.getSheetName());
+						String newSheetName = oldSheet.getSheetName();
+						if (oldSheet != null) {
+							newSheetName = newSheetName + "_" + i;
+						}
+
+						Sheet newSheet = ((Workbook)newExcelCreat).createSheet(newSheetName);
+						copySheet((Workbook)newExcelCreat, oldSheet, newSheet);
+					} else {
+						for(int j = 0; j < length; ++j) {
+							oldSheet = ((Workbook)fromExcel).getSheetAt(j);
+							Sheet existSheet = ((Workbook)newExcelCreat).getSheet(oldSheet.getSheetName());
+							String newSheetName = oldSheet.getSheetName();
+							if (existSheet != null) {
+								newSheetName = newSheetName + "_" + i + "_" + j;
+							}
+
+							Sheet newSheet = ((Workbook)newExcelCreat).createSheet(newSheetName);
+							copySheet((Workbook)newExcelCreat, oldSheet, newSheet);
+						}
+					}
+
+					List<? extends Name> allNames = ((Workbook)fromExcel).getAllNames();
+					if (!CollectionUtils.isEmpty(allNames)) {
+						allNames.stream().forEach((name) -> {
+							Name name1 = newExcelCreat.createName();
+							name1.setNameName(name.getNameName());
+							name1.setRefersToFormula(name.getRefersToFormula());
+						});
+					}
+				} catch (Throwable var64) {
+					var6 = var64;
+					throw var64;
+				} finally {
+					if (in != null) {
+						if (var6 != null) {
+							try {
+								in.close();
+							} catch (Throwable var58) {
+								var6.addSuppressed(var58);
+							}
+						} else {
+							in.close();
+						}
+					}
+
+				}
+			} catch (IOException var66) {
+				throw new VciBaseException("鍚堝苟excel鍑洪敊鐨勪簡", new String[0], var66);
+			}
+		}
+
+		String allFileName = excelName;
+
+		try {
+			FileOutputStream fileOut = new FileOutputStream(allFileName);
+			Throwable var69 = null;
+
+			try {
+				((Workbook)newExcelCreat).write(fileOut);
+				fileOut.flush();
+			} catch (Throwable var60) {
+				var69 = var60;
+				throw var60;
+			} finally {
+				if (fileOut != null) {
+					if (var69 != null) {
+						try {
+							fileOut.close();
+						} catch (Throwable var59) {
+							var69.addSuppressed(var59);
+						}
+					} else {
+						fileOut.close();
+					}
+				}
+
+			}
+		} catch (IOException var62) {
+			var62.printStackTrace();
+		} finally {
+			try {
+				((Workbook)newExcelCreat).close();
+			} catch (IOException var57) {
+				var57.printStackTrace();
+			}
+
+		}
+
+	}
+
+	private static void mergeSheetAllRegion(Sheet fromSheet, Sheet toSheet) {
+		int num = fromSheet.getNumMergedRegions();
+		CellRangeAddress cellR = null;
+
+		for(int i = 0; i < num; ++i) {
+			cellR = fromSheet.getMergedRegion(i);
+			toSheet.addMergedRegion(cellR);
+		}
+
+	}
+
+	private static void copyCell(Cell fromCell, Cell toCell) {
+		copyStyleForCell(fromCell, toCell);
+		if (fromCell.getCellComment() != null) {
+			toCell.setCellComment(fromCell.getCellComment());
+		}
+
+		CellType fromCellType = fromCell.getCellType();
+		toCell.setCellType(fromCellType);
+		if (fromCellType == CellType.NUMERIC) {
+			if (DateUtil.isCellDateFormatted(fromCell)) {
+				toCell.setCellValue(fromCell.getDateCellValue());
+			} else {
+				toCell.setCellValue(fromCell.getNumericCellValue());
+			}
+		} else if (fromCellType == CellType.STRING) {
+			RichTextString value = fromCell.getRichStringCellValue();
+			if (value != null && StringUtil.isNotBlank(value.toString())) {
+				Font fontAt = fromCell.getSheet().getWorkbook().getFontAt(fromCell.getCellStyle().getFontIndexAsInt());
+				value.applyFont(fontAt);
+			}
+
+			toCell.setCellValue(value);
+		} else if (fromCellType != CellType.BLANK) {
+			if (fromCellType == CellType.BOOLEAN) {
+				toCell.setCellValue(fromCell.getBooleanCellValue());
+			} else if (fromCellType == CellType.ERROR) {
+				toCell.setCellErrorValue(fromCell.getErrorCellValue());
+			} else if (fromCellType == CellType.FORMULA) {
+				toCell.setCellFormula(fromCell.getCellFormula());
+			}
+		}
+
+	}
+
+	private static void copyRow(Workbook wb, Row oldRow, Row toRow) {
+		toRow.setHeight(oldRow.getHeight());
+		Iterator cellIt = oldRow.cellIterator();
+
+		while(cellIt.hasNext()) {
+			Cell tmpCell = (Cell)cellIt.next();
+			Cell newCell = toRow.createCell(tmpCell.getColumnIndex());
+			copyCell(tmpCell, newCell);
+		}
+
+	}
+
+	private static void copySheet(Workbook wb, Sheet fromSheet, Sheet toSheet) {
+		mergeSheetAllRegion(fromSheet, toSheet);
+		int length = fromSheet.getRow(fromSheet.getFirstRowNum()).getLastCellNum();
+
+		for(int i = 0; i <= length; ++i) {
+			toSheet.setColumnWidth(i, fromSheet.getColumnWidth(i));
+		}
+
+		Iterator rowIt = fromSheet.rowIterator();
+
+		while(rowIt.hasNext()) {
+			Row oldRow = (Row)rowIt.next();
+			Row newRow = toSheet.createRow(oldRow.getRowNum());
+			copyRow(wb, oldRow, newRow);
+		}
+
+		List<? extends DataValidation> dataValidations = fromSheet.getDataValidations();
+		if (!CollectionUtils.isEmpty(dataValidations)) {
+			dataValidations.stream().forEach((dv) -> {
+				toSheet.addValidationData(dv);
+			});
+		}
+
+	}
+
+	public static <T> void appendDataToExcel(Collection<T> data, String excelName, AppendDataExcelOption excelOption) {
+		if (!CollectionUtils.isEmpty(data)) {
+			T t1 = data.stream().findFirst().get();
+			Map<Field, ExcelColumn> excelColumnSet = getExcelColumnAnnotations(t1.getClass());
+			Map<String, String> excelTitleFieldNameMap = new HashMap();
+			Set<String> readOnlyFields = new HashSet();
+			excelColumnSet.forEach((field, excelColumn) -> {
+				excelTitleFieldNameMap.put(excelColumn.value(), field.getName());
+				if (excelColumn.readOnly()) {
+					readOnlyFields.add(field.getName());
+				}
+
+			});
+			ReadExcelOption readExcelOption = new ReadExcelOption();
+			readExcelOption.setSheetName(excelOption.getSheetName());
+			readExcelOption.setFristRow(excelOption.getTitleRowIndex() + 1);
+			List<SheetDataSet> sheetDataSets = readDataObjectFromExcel(new File(excelName), SheetDataSet.class, readExcelOption);
+			if (!CollectionUtils.isEmpty(sheetDataSets)) {
+				SheetDataSet sheetDataSet = (SheetDataSet)sheetDataSets.get(0);
+				Map<String, Integer> fieldColumnMap = new HashMap();
+				List<String> colName = sheetDataSet.getColName();
+				if (!CollectionUtils.isEmpty(colName)) {
+					for(int i = 0; i < colName.size(); ++i) {
+						String col = ((String)colName.get(i)).replace("*", "").replace("鈽�", "");
+						if (excelTitleFieldNameMap.containsKey(col)) {
+							fieldColumnMap.put(excelTitleFieldNameMap.get(col), i);
+						}
+					}
+
+					List<WriteExcelData> writeExcelDataList = new ArrayList();
+					Integer[] index = new Integer[]{excelOption.getTitleRowIndex() + 1};
+					data.stream().forEach((d) -> {
+						Map<String, String> dataMap = VciBaseUtil.objectToMapString(d);
+						fieldColumnMap.forEach((field, col) -> {
+							if (CollectionUtils.isEmpty(excelOption.getWriteFields()) || excelOption.getWriteFields().contains(field)) {
+								WriteExcelData excelData = new WriteExcelData(index[0], col, dataMap.getOrDefault(field, ""));
+								excelData.setReadOnly(excelOption.isReadOnlyFromField() && readOnlyFields.contains(field) || !CollectionUtils.isEmpty(excelOption.getReadOnlyFields()) && excelOption.getReadOnlyFields().contains(field));
+								writeExcelDataList.add(excelData);
+							}
+
+						});
+						Integer var7 = index[0];
+						Integer var8 = index[0] = index[0] + 1;
+					});
+					WriteExcelOption writeExcelOption = new WriteExcelOption();
+					writeExcelOption.addSheetDataList(excelOption.getSheetName(), writeExcelDataList);
+					writeExcelOption.setAppend(true);
+					writeDataToFile(excelName, writeExcelOption);
+				}
+			}
+		}
+
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..b9054f6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiImportProcesser.java
@@ -0,0 +1,8 @@
+package com.vci.ubcs.starter.poi.util;
+
+import java.lang.reflect.Field;
+
+@FunctionalInterface
+public interface PoiImportProcesser<T> {
+	void process(Object var1, T var2, Field var3);
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..4feaee2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/PoiTemplateProcesser.java
@@ -0,0 +1,10 @@
+package com.vci.ubcs.starter.poi.util;
+
+import java.lang.reflect.Field;
+import java.util.Map;
+
+@FunctionalInterface
+public interface PoiTemplateProcesser<T> {
+	Map<String, String> wrapperEnumMap(String var1, Class<T> var2, Field var3);
+}
+
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-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..5108784
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/ReleasedObjDO.java
@@ -0,0 +1,58 @@
+package com.vci.ubcs.starter.revision.model;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.revision.model;
+
+import java.io.Serializable;
+
+public class ReleasedObjDO implements Serializable {
+	private static final long serialVersionUID = -7258896338253286905L;
+	private String oid;
+	private String revisionOid;
+	private String nameOid;
+	private String btmName;
+
+	public ReleasedObjDO() {
+	}
+
+	public String getOid() {
+		return this.oid;
+	}
+
+	public void setOid(String oid) {
+		this.oid = oid;
+	}
+
+	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;
+	}
+
+	@Override
+	public String toString() {
+		return "ReleasedObjDO{oid='" + this.oid + '\'' + ", revisionOid='" + this.revisionOid + '\'' + ", nameOid='" + this.nameOid + '\'' + ", btmName='" + this.btmName + '\'' + '}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..8af3891
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/RevisionInfo.java
@@ -0,0 +1,147 @@
+package com.vci.ubcs.starter.revision.model;
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.revision.model;
+
+import java.io.Serializable;
+
+public class RevisionInfo implements Serializable {
+	private static final long serialVersionUID = 7167255550437885283L;
+	private String oid;
+	private String nameOid;
+	private String revisionOid;
+	private String lastR;
+	private String firstR;
+	private String lastV;
+	private String firstV;
+	private String revisionRule;
+	private Integer revisionSeq;
+	private String revisionValue;
+	private String versionRule;
+	private Integer versionSeq;
+	private String versionValue;
+	private String btmname;
+
+	public RevisionInfo() {
+	}
+
+	public String getBtmname() {
+		return this.btmname;
+	}
+
+	public void setBtmname(String btmname) {
+		this.btmname = btmname;
+	}
+
+	public String getOid() {
+		return this.oid;
+	}
+
+	public void setOid(String oid) {
+		this.oid = oid;
+	}
+
+	public String getNameOid() {
+		return this.nameOid;
+	}
+
+	public void setNameOid(String nameOid) {
+		this.nameOid = nameOid;
+	}
+
+	public String getRevisionOid() {
+		return this.revisionOid;
+	}
+
+	public void setRevisionOid(String revisionOid) {
+		this.revisionOid = revisionOid;
+	}
+
+	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 getRevisionRule() {
+		return this.revisionRule;
+	}
+
+	public void setRevisionRule(String revisionRule) {
+		this.revisionRule = revisionRule;
+	}
+
+	public int 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 String getVersionRule() {
+		return this.versionRule;
+	}
+
+	public void setVersionRule(String versionRule) {
+		this.versionRule = versionRule;
+	}
+
+	public int 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;
+	}
+
+	@Override
+	public String toString() {
+		return "RevisionInfo{oid='" + this.oid + '\'' + ", nameOid='" + this.nameOid + '\'' + ", revisionOid='" + this.revisionOid + '\'' + ", lastR='" + this.lastR + '\'' + ", firstR='" + this.firstR + '\'' + ", lastV='" + this.lastV + '\'' + ", firstV='" + this.firstV + '\'' + ", revisionRule='" + this.revisionRule + '\'' + ", revisionSeq=" + this.revisionSeq + ", revisionValue='" + this.revisionValue + '\'' + ", versionRule='" + this.versionRule + '\'' + ", versionSeq=" + this.versionSeq + ", versionValue='" + this.versionValue + '\'' + ", btmname='" + this.btmname + '\'' + '}';
+	}
+}
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..2f161fd
--- /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,122 @@
+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;
+	}
+
+	@Override
+	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-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..40100cc
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java
@@ -0,0 +1,108 @@
+package com.vci.ubcs.starter.revision.service;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+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;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Component
+public class RevisionModelUtil implements VciSecretServiceI {
+
+	private Logger logger = LoggerFactory.getLogger(this.getClass());
+	public static volatile Map<String, Map<String, String>> modelColumnAnnotationMap = new ConcurrentHashMap();
+//	public static volatile Map<String, VciBtmType> modelAnnotationMap = new ConcurrentHashMap();
+	public static boolean CHECK_IDEMPOTENCE = false;
+
+	public void copyFromDTOIgnore(Object dto, BaseModel baseModel) {
+		VciBaseUtil.alertNotNull(new Object[]{dto, "鏁版嵁浼犺緭瀵硅薄", baseModel, "鏁版嵁搴撲腑鐨勬暟鎹璞�"});
+		BaseModel tempModel = new BaseModel();
+		BeanUtilForVCI.copyPropertiesIgnoreCase(baseModel, tempModel);
+		BeanUtilForVCI.copyPropertiesIgnoreCase(dto, baseModel);
+		BeanUtilForVCI.copyPropertiesIgnoreCase(tempModel, baseModel);
+		baseModel.setId(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("id", dto)));
+		baseModel.setName(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("name", dto)));
+		baseModel.setDescription(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("description", dto)));
+		tempModel = null;
+	}
+
+	public <T, R> List<Tree> doList2Trees(List<T> doList, TreeWrapperOptions wrapperOptions, Function<T, R> f) {
+		if (CollectionUtils.isEmpty(doList)) {
+			return new ArrayList();
+		} else {
+			List<Tree> allTree = new ArrayList();
+			List<Tree> children = new ArrayList();
+			Iterator var6 = doList.iterator();
+
+			while(true) {
+				while(var6.hasNext()) {
+					T doObject = (T) var6.next();
+					Tree tree = new Tree();
+					List<String> oidFieldNames = VciBaseUtil.str2List(wrapperOptions.getOidFieldName());
+					List<String> oidValues = new LinkedList();
+					oidFieldNames.stream().forEach((s) -> {
+						oidValues.add(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField(s, doObject)));
+					});
+					tree.setOid((String)oidValues.stream().collect(Collectors.joining(wrapperOptions.getOidValueSep())));
+					if (f != null) {
+						tree.setText((String)f.apply(doObject));
+					} else {
+						List<String> textFieldNames = VciBaseUtil.str2List(wrapperOptions.getTextFieldName());
+						List<String> textValues = new LinkedList();
+						textFieldNames.stream().forEach((s) -> {
+							textValues.add(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField(s, doObject)));
+						});
+						tree.setText((String)textValues.stream().collect(Collectors.joining(wrapperOptions.getTextValueSep())));
+					}
+
+					if (StringUtils.isNotBlank(wrapperOptions.getParentFieldName())) {
+						tree.setParentId(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField(wrapperOptions.getParentFieldName(), doObject)));
+					}
+
+					if (wrapperOptions.isAllAttributes()) {
+						try {
+							tree.setAttributes(VciBaseUtil.objectToMapString(doObject));
+						} catch (Exception var13) {
+							if (this.logger.isErrorEnabled()) {
+								this.logger.error("鎶婂璞¤浆鎹负map鏃跺嚭鐜颁簡閿欒锛屼絾鏄笉褰卞搷鏍戠殑灞曠ず锛屽涓氬姟鍙兘鏈夊奖鍝�");
+							}
+						}
+					}
+
+					if (wrapperOptions.isMultipleSelect() || wrapperOptions.isShowCheckBox()) {
+						tree.setShowCheckbox(true);
+					}
+
+					if (wrapperOptions.getParentOid() == null) {
+						wrapperOptions.setParentOid("");
+					}
+
+					if (!StringUtils.isBlank(tree.getParentId()) && (!StringUtils.isNotBlank(wrapperOptions.getParentOid()) || !wrapperOptions.getParentOid().equalsIgnoreCase(tree.getParentId()))) {
+						children.add(tree);
+					} else {
+						allTree.add(tree);
+					}
+				}
+
+				(new Tree()).findChild(allTree, children);
+				if (allTree.size() <= 0) {
+					allTree.addAll(children);
+				}
+
+				return allTree;
+			}
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..924d2a3
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/VciRevisionServiceI.java
@@ -0,0 +1,36 @@
+package com.vci.ubcs.starter.revision.service;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.revision.service;
+
+
+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);
+
+	RevisionInfo selectLastVersion(String var1, String var2, String var3);
+
+	RevisionInfo selectRelease(String var1, String var2, String var3);
+
+	int saveReleased(ReleasedObjDO var1);
+
+	int resetLastRevision(String var1, String var2);
+
+	int resetOldRevision(String var1, String var2);
+
+	RevisionInfo selectByOid(String var1, String var2);
+
+	int resetLastVersion(String var1, String var2, String var3);
+
+	int resetOldVersion(String var1, String var2);
+
+	int countByProperties(String var1, Object var2, String var3);
+
+	int countByPropertiesNotIncludeSelf(String var1, Object var2, String var3, String var4);
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/LocalFileUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/LocalFileUtil.java
new file mode 100644
index 0000000..c62ec77
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/LocalFileUtil.java
@@ -0,0 +1,318 @@
+package com.vci.ubcs.starter.util;
+
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.channels.FileChannel;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.UUID;
+
+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;
+
+public class LocalFileUtil {
+	public static Class mainClass = null;
+
+	public LocalFileUtil() {
+	}
+
+	public static void deleteFile(File file) {
+		if (file != null && file.exists()) {
+			if (file.isDirectory()) {
+				File[] files = file.listFiles();
+
+				for(int i = 0; i < files.length; ++i) {
+					deleteFile(files[i]);
+				}
+			}
+
+			file.delete();
+		}
+	}
+
+	public static void copyFile(File source, File target) {
+		FileInputStream is = null;
+		FileOutputStream os = null;
+
+		try {
+			is = new FileInputStream(source);
+			os = new FileOutputStream(target);
+			FileChannel sourceChannel = is.getChannel();
+			FileChannel targetChannel = os.getChannel();
+			int i = 0;
+
+			for(int length = 2097152; sourceChannel.position() != sourceChannel.size(); ++i) {
+				if (sourceChannel.size() - sourceChannel.position() < 20971520L) {
+					length = (int)(sourceChannel.size() - sourceChannel.position());
+				} else {
+					length = 20971520;
+				}
+
+				sourceChannel.transferTo(sourceChannel.position(), (long)length, targetChannel);
+				sourceChannel.position(sourceChannel.position() + (long)length);
+			}
+
+			sourceChannel.close();
+			targetChannel.close();
+		} catch (Throwable var11) {
+			throw new VciBaseException("鎷疯礉鏂囦欢鍑洪敊", new String[0], var11);
+		} finally {
+			IOUtils.closeQuietly(is);
+			IOUtils.closeQuietly(os);
+		}
+	}
+
+	public static String getDefaultTempFolder()  {
+		String path = getProjectFolder();
+		path = path + File.separator + "tempFolder" + File.separator + UUID.randomUUID().toString();
+		File folder = new File(path);
+		if (!folder.exists()) {
+			folder.mkdirs();
+		}
+
+		return path;
+	}
+
+	public static String getProjectFolder()  {
+		return getProjectFolder(LocalFileUtil.class);
+	}
+
+	public static String getProjectFolder(Class classObj) {
+		String path = "";
+
+		try {
+			ApplicationHome h = new ApplicationHome(classObj == null ? (mainClass == null ? LocalFileUtil.class : mainClass) : classObj);
+			File jarF = h.getSource();
+			if (jarF == null) {
+				jarF = h.getDir();
+			}
+
+			path = jarF.getParentFile().toString();
+			if (path.contains("!")) {
+				path = (new File(path)).getParentFile().getParent();
+			}
+		} catch (Throwable var4) {
+			var4.printStackTrace();
+			throw new VciBaseException("鑾峰彇褰撳墠鏈嶅姟鎵�鍦ㄧ殑鏂囦欢澶瑰嚭鐜颁簡閿欒", new String[0], var4);
+		}
+
+		if (path.startsWith("file:\\")) {
+			path = path.substring(6);
+		}
+
+		if (System.getProperty("os.name").toLowerCase().startsWith("win") && path.startsWith("/")) {
+			path = path.substring(path.indexOf("/") + 1);
+		}
+
+		System.out.println("椤圭洰鐨勮矾寰勬槸:" + path);
+		return path;
+	}
+
+	public static void deleteTempFile(File tempFile, boolean deleteRandomFolder) {
+		if (tempFile != null) {
+			tempFile.delete();
+			if (deleteRandomFolder) {
+				tempFile.getParentFile().delete();
+			}
+		}
+
+	}
+
+	public static void alertNotNull(Object... s)  {
+		if (s != null && s.length > 0) {
+			for(int i = 0; i < s.length; ++i) {
+				Object obj = s[i];
+				if (obj == null || StringUtil.isBlank(obj.toString())) {
+					String param = "";
+
+					try {
+						++i;
+						param = s[i].toString();
+					} catch (Exception var5) {
+					}
+
+					throw new VciBaseException("鍙傛暟[" + param + "]涓嶈兘涓虹┖");
+				}
+			}
+		}
+
+	}
+
+	public static String getFileExtension(File file) {
+		return file != null ? getFileExtensionByName(file.getName()) : "";
+	}
+
+	public static String getFileExtensionByName(String name) {
+		return StringUtil.isNotBlank(name) && name.contains(".") ? name.substring(name.lastIndexOf(".") + 1) : "";
+	}
+
+	public static String getFileNameForIE(String name) {
+		if (StringUtil.isBlank(name)) {
+			return name;
+		} else if (name.contains(File.separator)) {
+			return name.substring(name.lastIndexOf(File.separator) + 1);
+		} else {
+			return name.contains("\\") ? name.substring(name.lastIndexOf("\\") + 1) : name;
+		}
+	}
+
+	public static String readContentForFileInJar(String fileName)  {
+		if (StringUtil.isBlank(fileName)) {
+			throw new VciBaseException("鏂囦欢鍚嶄负绌�");
+		} else {
+			if (!fileName.startsWith("/")) {
+				fileName = "/" + fileName;
+			}
+
+			InputStream in = null;
+			ByteArrayOutputStream os = null;
+
+			String var3;
+			try {
+				in = LocalFileUtil.class.getResourceAsStream(fileName);
+				if (in == null) {
+					in = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
+				}
+
+				os = new ByteArrayOutputStream();
+				IOUtils.copy(in, os);
+				var3 = new String(os.toByteArray(), "UTF-8");
+			} catch (Throwable var7) {
+				throw new VciBaseException("璇诲彇鏂囦欢鐨勫唴瀹瑰嚭鐜颁簡閿欒", new String[0], var7);
+			} finally {
+				IOUtils.closeQuietly(in);
+				IOUtils.closeQuietly(os);
+			}
+
+			return var3;
+		}
+	}
+
+	public static String readContentForFile(String fileName)  {
+		File file = new File(fileName);
+		if (!file.exists()) {
+			throw new VciBaseException("鏂囦欢鏈壘鍒帮紝{0}", new String[]{fileName});
+		} else {
+			InputStream in = null;
+			ByteArrayOutputStream os = null;
+
+			String var4;
+			try {
+				in = new FileInputStream(file);
+				os = new ByteArrayOutputStream();
+				IOUtils.copy(in, os);
+				var4 = new String(os.toByteArray(), "UTF-8");
+			} catch (Throwable var8) {
+				throw new VciBaseException("璇诲彇鏂囦欢鐨勫唴瀹瑰嚭鐜颁簡閿欒", new String[0], var8);
+			} finally {
+				IOUtils.closeQuietly(in);
+				IOUtils.closeQuietly(os);
+			}
+
+			return var4;
+		}
+	}
+
+	public static void writeContentToFile(String content, String fileName)  {
+		File file = new File(fileName);
+		if (!file.exists()) {
+			File parentFile = file.getParentFile();
+			if (!parentFile.exists()) {
+				parentFile.mkdirs();
+			}
+
+			try {
+				file.createNewFile();
+			} catch (IOException var11) {
+				throw new VciBaseException("鍐欏叆鏂囦欢鐨勫唴瀹规椂鍊欏嚭鐜颁簡鍒涘缓鏂囦欢澶辫触鐨勯棶棰�,{}", new String[]{fileName}, var11);
+			}
+		}
+
+		if (content == null) {
+			content = "";
+		}
+
+		OutputStream os = null;
+
+		try {
+			os = new FileOutputStream(file);
+			os.write(content.getBytes(StandardCharsets.UTF_8));
+			os.flush();
+		} catch (Throwable var9) {
+			throw new VciBaseException("鍐欏叆鏂囦欢鐨勫唴瀹规椂鍊欏嚭鐜颁簡鍒涢敊璇�,{}", new String[]{fileName}, var9);
+		} finally {
+			IOUtils.closeQuietly(os);
+		}
+
+	}
+
+	public static void copyFileInJar(String fileInJar, String target)  {
+		VciBaseUtil.alertNotNull(new Object[]{fileInJar, "婧愭枃浠�", target, "鐩爣鏂囦欢"});
+		File targetFile = new File(target);
+		File folder = targetFile.getParentFile();
+		if (!folder.exists()) {
+			folder.mkdirs();
+		}
+
+		if (!targetFile.exists()) {
+			try {
+				targetFile.createNewFile();
+			} catch (IOException var11) {
+				throw new VciBaseException("鍒涘缓鐩爣鏂囦欢鐨勫嚭鐜颁簡閿欒", new String[0], var11);
+			}
+		}
+
+		if (!fileInJar.startsWith("/")) {
+			fileInJar = "/" + fileInJar;
+		}
+
+		InputStream in = null;
+		FileOutputStream os = null;
+
+		try {
+			in = LocalFileUtil.class.getResourceAsStream(fileInJar);
+			if (in == null) {
+				in = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileInJar);
+			}
+
+			os = new FileOutputStream(target);
+			IOUtils.copy(in, os);
+		} catch (Throwable var12) {
+			throw new VciBaseException("鎷疯礉鏂囦欢鐨勫唴瀹瑰嚭鐜颁簡閿欒.{0},{1}", new String[]{fileInJar, target}, var12);
+		} finally {
+			IOUtils.closeQuietly(in);
+			IOUtils.closeQuietly(os);
+		}
+
+	}
+
+	public static List<String> fileToPatch(Collection<File> fileList) {
+		VciBaseUtil.alertNotNull(new Object[]{"鏂囦欢鍒楄〃", fileList});
+		List<String> filePath = new ArrayList();
+		Iterator var2 = fileList.iterator();
+
+		while(var2.hasNext()) {
+			File file = (File)var2.next();
+			if (!file.exists()) {
+				throw new VciBaseException(file.getAbsolutePath() + "鏂囦欢娌℃湁鎵惧埌" + new String[0]);
+			}
+
+			filePath.add(file.getAbsolutePath());
+		}
+
+		return filePath;
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtils.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtils.java
new file mode 100644
index 0000000..c26997c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtils.java
@@ -0,0 +1,72 @@
+package com.vci.ubcs.starter.util;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import org.springframework.util.ObjectUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * in 鍙傛暟鎴彇锛岃繑鍥瀢rapper
+ *
+ * @author ludc
+ * @date 2023/5/5
+ */
+public class MybatisParameterUtils {
+
+	public static <T, F> LambdaQueryWrapper<T> cutInParameter(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> column, List<F> coll) throws VciBaseException {
+		List<List<F>> newList = splitList(coll, 900);
+		if (ObjectUtils.isEmpty(newList)) {
+			throw new VciBaseException("鍙傛暟閿欒");
+		} else if (newList.size() == 1) {
+			wrapper.in(column, newList.get(0));
+			return wrapper;
+		}
+		wrapper.and(i -> {
+			i.in(column, newList.get(0));
+			newList.remove(0);
+			for (List<F> objects : newList) {
+				i.or().in(column, objects);
+			}
+		});
+		return wrapper;
+	}
+
+	public static <T, F> LambdaQueryWrapper<T> cutNotInParameter(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> column, List<F> coll) throws VciBaseException {
+		List<List<F>> newList = splitList(coll, 900);
+		if (ObjectUtils.isEmpty(newList)) {
+			throw new VciBaseException("鍙傛暟閿欒");
+		} else if (newList.size() == 1) {
+			wrapper.notIn(column, newList.get(0));
+			return wrapper;
+		}
+		wrapper.and(i -> {
+			i.in(column, newList.get(0));
+			newList.remove(0);
+			for (List<F> objects : newList) {
+				i.or().notIn(column, objects);
+			}
+		});
+		return wrapper;
+	}
+
+	public static <F> List<List<F>> splitList(List<F> list, int groupSize) {
+		int length = list.size();
+		// 璁$畻鍙互鍒嗘垚澶氬皯缁�
+		int num = (length + groupSize - 1) / groupSize;
+		List<List<F>> newList = new ArrayList<>(num);
+		for (int i = 0; i < num; i++) {
+			// 寮�濮嬩綅缃�
+			int fromIndex = i * groupSize;
+			// 缁撴潫浣嶇疆
+			int toIndex = Math.min((i + 1) * groupSize, length);
+			newList.add(list.subList(fromIndex, toIndex));
+		}
+		return newList;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java
new file mode 100644
index 0000000..246345f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.starter.util;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/26
+ */
+@Component
+public class VciSpringUtil implements ApplicationContextAware {
+
+	private static ApplicationContext applicationContext;
+
+	@Override
+	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+		if (VciSpringUtil.applicationContext == null){
+			VciSpringUtil.applicationContext = applicationContext;
+		}
+	}
+
+	public static ApplicationContext getApplicationContext(){
+		return applicationContext;
+	}
+
+	public static Object getBean(String name){
+		return getApplicationContext().getBean(name);
+	}
+
+	public static <T> T getBean(Class<T> clazz){
+		return getApplicationContext().getBean(clazz);
+	}
+
+	public static <T> T getBean(String name,Class<T> clazz){
+		return getApplicationContext().getBean(name,clazz);
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..80ba1aa
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciFieldType.java
@@ -0,0 +1,15 @@
+package com.vci.ubcs.starter.web.annotation;
+
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface VciFieldType {
+	VciFieldTypeEnum value() default VciFieldTypeEnum.VTString;
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..01f84a4
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/annotation/VciUseEnum.java
@@ -0,0 +1,23 @@
+package com.vci.ubcs.starter.web.annotation;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface VciUseEnum {
+	String value();
+
+	String defaultValue() default "";
+
+	String showTextField();
+
+	boolean multiple() default false;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..2ba0ea7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/EnumIdConstant.java
@@ -0,0 +1,60 @@
+package com.vci.ubcs.starter.web.constant;
+
+/**
+ * 鏋氫妇鐨勪笟鍔$被鍨�
+ * @author weidy
+ * @dat2 2021-2-15
+ */
+public class EnumIdConstant {
+
+	/**
+	 * 鐢ㄦ埛鏋氫妇
+	 */
+	public static final String USERSECRET_ENUMNAME = "usersecurityenum";
+
+	/**
+	 * 鏁版嵁鏋氫妇
+	 */
+	public static final String DATASECRET_ENUMNAME="Enumsecretgrade";
+
+	/**
+	 * IP瀵嗙骇
+	 */
+	public static final String IPSECRET_ENUMNAME = "ipsecurityenum";
+
+	/**
+	 * ip鏋氫妇鐨勪笟鍔$被鍨�
+	 */
+	public static final String IPSECRET_BTMNAME = "ipsecurity";
+
+	/**
+	 * 鐢熷懡鍛ㄦ湡浣滀负鏋氫妇鐨勫悗缂�
+	 */
+	public static final String LC_STATUS_SUBFIX = "${lcstatus}";
+
+	/**
+	 * 浠g爜鐢熸垚鐨刄I闈㈡澘绫诲瀷
+	 */
+	public static final String OS_CODE_GEN_PANEL_TYPE = "codeGenPanelType" ;
+
+	/**
+	 * 缂栫爜鐢熸垚鏂瑰紡
+	 */
+	public static final String CODE_PRODUCT_TYPE = "codeProductType";
+
+	/**
+	 * 缂栫爜鐨勫厓绱犵被鍨�
+	 */
+	public static final String CODE_ELEMENT_TYPE = "codeElementType";
+
+	/**
+	 * 缂栫爜琛ヤ綅鏂瑰紡
+	 */
+	public static final String CODE_FILL_TYPE = "codeFillType";
+
+	/**
+	 * 缂栫爜鐨勬椂闂村彇鍊肩被鍨�
+	 */
+	public static final String CODE_DATE_VALUE_TYPE = "codeDateValueType";
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..8b56a63
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/MdmEnumIdConstant.java
@@ -0,0 +1,79 @@
+package com.vci.ubcs.starter.web.constant;
+
+/**
+ * 涓绘暟鎹殑鏋氫妇鍚嶇О
+ */
+public class MdmEnumIdConstant {
+
+	/**
+	 * 鎸夐挳鐨勪娇鐢ㄤ綅缃�
+	 */
+	public static final String CODE_BUTTON_POSITION = "codeButtonPosition" ;
+
+	/**
+	 * 鐮佹闀垮害绫诲瀷
+	 */
+	public static final String CODE_SEC_LENGTH = "codeSecLength";
+	/**
+	 * 鏃ユ湡鏍煎紡
+	 */
+	public static final String CODE_DATA_FORMAT = "codeDateFormatEnum";
+	/**
+	 * 灞傜骇鐮佹鐨勫眰绾х被鍨�
+	 */
+	public static final String CODE_LEVEL_TYPE = "codeLevelType";
+	/**
+	 * 瀛楃鎴彇绫诲瀷
+	 */
+	public static final String CODE_CUT_TYPE = "codeCutType";
+	/**
+	 * 缂栫爜鍙栧�肩被鍨�
+	 */
+	public static final String CODE_GET_VALUE_TYPE = "codeGetValueType";
+	/**
+	 * 涓婚搴撳垎绫荤殑娴佺▼鐢ㄩ��
+	 */
+	public static final String CODE_CLASSIFY_PROCESS_USE = "codeClassifyProcessUse";
+	/**
+	 * 缂栫爜鏄犲皠瑙勫垯绫诲瀷
+	 */
+	public static final String CODE_MAP_RULE_TYPE = "codeMapRuleType";
+	/**
+	 * 鐮佹绫诲瀷
+	 */
+	public static final String CODE_SEC_TYPE = "codeSecType";
+	/**
+	 * 鎸夐挳鐨勭敤閫�
+	 */
+	public static final String CODE_TEMPLATE_BUTTON_USE = "codeTemplateButtonUse";
+
+	/**
+	 * 绯荤粺闆嗘垚鎺ュ彛绫诲瀷
+	 */
+	public static final String SYS_INTEGRATION_REQUEST_TYPE = "sysIntegrationRequestType";
+
+	/**
+	 * 绯荤粺闆嗘垚鎺ュ彛璇锋眰鏂瑰紡绫诲瀷
+	 */
+	public static final String SYS_INTEGRATION_REQUEST_METHOD_TYPE = "sysIntegrationRequestMethodType";
+
+	/**
+	 * 绯荤粺闆嗘垚鎺ュ彛璇锋眰鏂瑰紡绫诲瀷
+	 */
+	public static final String SYS_INTEGRATION_PARAM_AND_RETURN_TYPE = "sysIntegrationParamAndReturnType";
+
+	/**
+	 * 绯荤粺闆嗘垚楠岃瘉鏂瑰紡
+	 */
+	public static final String SYS_INTEGRATION_AUTHORITY_TYPE = "sysIntegrationAuthorityType";
+
+	/**
+	 * 鏁版嵁娴佸悜鏂瑰紡
+	 */
+	public static final String SYS_INTEGRATION_DATA_FLOW_TYPE = "sysIntegrationDataFlowType";
+	/***
+	 * 绯荤粺鎺ュ彛鎺ㄩ�佹柟寮�
+	 */
+	public static  final  String SYS_INTEGRATION_PUSH_TYPE="sysIntegrationPushType";
+
+}
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-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..b376241
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/QueryOptionConstant.java
@@ -0,0 +1,21 @@
+package com.vci.ubcs.starter.web.constant;
+
+
+public class QueryOptionConstant {
+	public static final String IN = "\\IN";
+	public static final String NOTIN = "\\NOTIN";
+	public static final String NOTEQUAL = "!=";
+	public static final String MORE = ">";
+	public static final String MORETHAN = ">=";
+	public static final String LESS = "<";
+	public static final String LESSTHAN = "<=";
+	public static final String OR = "\\OR";
+	public static final String ISNULL = "=null";
+	public static final String ISNOTNULL = "!=null";
+	public static final String EQUAL = "=";
+	public static final String AND = "and";
+	public static final String NO_OR_AND = "${no_or_and}";
+
+	public 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-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..084c669
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BaseEnumInt.java
@@ -0,0 +1,14 @@
+package com.vci.ubcs.starter.web.enumpck;
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.web.enumpck;
+
+public interface BaseEnumInt {
+
+	int getValue();
+
+	String getText();
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BooleanEnum.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BooleanEnum.java
new file mode 100644
index 0000000..0efecd3
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BooleanEnum.java
@@ -0,0 +1,28 @@
+package com.vci.ubcs.starter.web.enumpck;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/27
+ */
+public enum BooleanEnum {
+	/**
+	 * true
+	 */
+	TRUE("true"),
+	/**
+	 * false
+	 */
+	FASLE("false");
+
+	private final String value;
+
+	private BooleanEnum(String value) {
+		this.value = value;
+	}
+
+	public String getValue() {
+		return this.value;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..83c35d7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/OsCodeFillTypeEnum.java
@@ -0,0 +1,133 @@
+package com.vci.ubcs.starter.web.enumpck;
+
+//package com.vci.web.enumpck;
+
+
+/**
+ * 缂栫爜鐨勮ˉ浣嶆柟寮�
+ * @author weidy
+ * @date 2020/3/28
+ */
+//@VciEnum(name = EnumIdConstant.CODE_FILL_TYPE,text = "缂栫爜琛ヤ綅鏂瑰紡",description = "涓嶈ˉ浣嶏紝锛屽彸琛ヤ綅")
+public enum OsCodeFillTypeEnum implements BaseEnum {
+
+	/**
+	 * 涓嶈ˉ浣�
+	 */
+	NONE("code_fill_none","涓嶈ˉ浣�"),
+
+	/**
+	 * 宸﹁ˉ浣�
+	 */
+	LEFT("code_fill_left","宸﹁ˉ浣�"),
+
+	/**
+	 * 鍙宠ˉ浣�
+	 */
+	RIGHT("code_fill_right","鍙宠ˉ浣�");
+
+	/**
+	 * 鏋氫妇鐨勫��
+	 */
+	private String value;
+
+	/**
+	 * 鏋氫妇鏄剧ず鏂囨湰
+	 */
+	private String text;
+
+	/**
+	 * 鑾峰彇鏋氫妇鍊�
+	 *
+	 * @return 鏋氫妇鍊�
+	 */
+	@Override
+	public String getValue() {
+		return value;
+	}
+
+	/**
+	 * 璁剧疆鏋氫妇鍊�
+	 *
+	 * @param value 鏋氫妇鍊�
+	 */
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	/**
+	 * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+	 *
+	 * @return 鏄剧ず鏂囨湰
+	 */
+	@Override
+	public String getText() {
+		return text;
+	}
+
+	/**
+	 * 璁剧疆鏄剧ず鏂囨湰
+	 *
+	 * @param text 鏄剧ず鏂囨湰
+	 */
+	public void setText(String text) {
+		this.text = text;
+	}
+
+	/**
+	 * 鏋勯�犲嚱鏁�
+	 *
+	 * @param value 鍊�
+	 * @param text  鏄剧ず鏂囨湰
+	 */
+	private OsCodeFillTypeEnum(String value, String text) {
+		this.value = value;
+		this.text = text;
+	}
+
+	/**
+	 * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+	 *
+	 * @param text 鍚嶇О
+	 * @return 鏋氫妇鍊�
+	 */
+	public static String getValueByText(String text) {
+		for (OsCodeFillTypeEnum wenum : OsCodeFillTypeEnum.values()) {
+			if (wenum.getText().equalsIgnoreCase(text)) {
+				return wenum.getValue();
+			}
+		}
+		return "";
+	}
+
+	/**
+	 * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+	 *
+	 * @param value 鏋氫妇鍊�
+	 * @return 鍚嶇О
+	 */
+	public static String getTextByValue(String value) {
+		for (OsCodeFillTypeEnum wenum : OsCodeFillTypeEnum.values()) {
+			if (wenum.getValue().equalsIgnoreCase(value)) {
+				return wenum.getText();
+			}
+		}
+		return "";
+	}
+
+	/**
+	 * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+	 *
+	 * @param value 鏋氫妇鍊�
+	 * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+	 */
+	public static OsCodeFillTypeEnum forValue(String value) {
+		for (OsCodeFillTypeEnum wenum : OsCodeFillTypeEnum.values()) {
+			if (wenum.getValue().equalsIgnoreCase(value)) {
+				return wenum;
+			}
+		}
+		return null;
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..57423cd
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/UserSecretEnum.java
@@ -0,0 +1,91 @@
+package com.vci.ubcs.starter.web.enumpck;
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.web.enumpck;
+
+//import com.vci.starter.web.annotation.VciEnum;
+
+
+import com.vci.ubcs.starter.annotation.VciEnum;
+
+@VciEnum(
+	name = "usersecurityenum",
+	text = "浜哄憳瀵嗙骇",
+	description = "鐢ㄦ埛锛屼汉鍛樼殑瀵嗙骇"
+)
+public enum UserSecretEnum implements BaseEnumInt {
+	NONE(10, "鍐呴儴"),
+	SECRET(20, "涓�鑸�"),
+	PRIVACY(30, "閲嶈");
+
+	private int value;
+	private String text;
+
+	@Override
+	public int getValue() {
+		return this.value;
+	}
+
+	public void setValue(int value) {
+		this.value = value;
+	}
+
+	@Override
+	public String getText() {
+		return this.text;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+
+	private UserSecretEnum(int secret, String secretText) {
+		this.value = secret;
+		this.text = secretText;
+	}
+
+	public static String getSecretText(int secret) {
+		UserSecretEnum[] var1 = values();
+		int var2 = var1.length;
+
+		for(int var3 = 0; var3 < var2; ++var3) {
+			UserSecretEnum eu = var1[var3];
+			if (eu.value == secret) {
+				return eu.text;
+			}
+		}
+
+		return NONE.text;
+	}
+
+	public static boolean isValid(int secret) {
+		UserSecretEnum[] var1 = values();
+		int var2 = var1.length;
+
+		for(int var3 = 0; var3 < var2; ++var3) {
+			UserSecretEnum eu = var1[var3];
+			if (eu.value == secret) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	public static int getSecretValueByText(String text) {
+		UserSecretEnum[] var1 = values();
+		int var2 = var1.length;
+
+		for(int var3 = 0; var3 < var2; ++var3) {
+			UserSecretEnum eu = var1[var3];
+			if (eu.text.equalsIgnoreCase(text)) {
+				return eu.value;
+			}
+		}
+
+		return NONE.value;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..98b4f24
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/VciFieldTypeEnum.java
@@ -0,0 +1,95 @@
+package com.vci.ubcs.starter.web.enumpck;
+
+
+import com.vci.ubcs.starter.annotation.VciEnum;
+
+@VciEnum(
+	name = "VciFieldType",
+	text = "灞炴�х被鍨�"
+)
+public enum VciFieldTypeEnum {
+	VTString,
+	VTInteger,
+	VTLong,
+	VTDouble,
+	VTBoolean,
+	VTDate,
+	VTDateTime,
+	VTTime,
+	VTFilePath,
+	VTClob;
+
+	private VciFieldTypeEnum() {
+	}
+
+	public static String getValueByText(String text) {
+		if (text != null && text.trim().length() != 0) {
+			if ("甯冨皵鍨�".equalsIgnoreCase(text)) {
+				return VTBoolean.name();
+			} else if ("闀挎枃鏈�".equalsIgnoreCase(text)) {
+				return VTClob.name();
+			} else if ("鏃ユ湡".equalsIgnoreCase(text)) {
+				return VTDate.name();
+			} else if ("鏃ユ湡鏃堕棿".equalsIgnoreCase(text)) {
+				return VTDateTime.name();
+			} else if ("鏃堕棿".equalsIgnoreCase(text)) {
+				return VTTime.name();
+			} else if ("闀挎暣鍨�".equalsIgnoreCase(text)) {
+				return VTLong.name();
+			} else if ("閲戦/鍙岀簿搴�".equalsIgnoreCase(text)) {
+				return VTDouble.name();
+			} else if ("鏁村舰".equalsIgnoreCase(text)) {
+				return VTInteger.name();
+			} else {
+				return "鏂囦欢".equalsIgnoreCase(text) ? VTFilePath.name() : VTString.name();
+			}
+		} else {
+			return "";
+		}
+	}
+
+	public static String getTextByValue(String value) {
+		VciFieldTypeEnum wenum = forValue(value);
+		if (wenum == null) {
+			return "";
+		} else {
+			switch (wenum) {
+				case VTBoolean:
+					return "甯冨皵鍨�";
+				case VTClob:
+					return "闀挎枃鏈�";
+				case VTDate:
+					return "鏃ユ湡";
+				case VTDateTime:
+					return "鏃ユ湡鏃堕棿";
+				case VTTime:
+					return "鏃堕棿";
+				case VTLong:
+					return "闀挎暣鍨�";
+				case VTDouble:
+					return "閲戦/鍙岀簿搴�";
+				case VTInteger:
+					return "鏁村舰";
+				case VTFilePath:
+					return "鏂囦欢";
+				default:
+					return "瀛楃涓�";
+			}
+		}
+	}
+
+	public static VciFieldTypeEnum forValue(String value) {
+		VciFieldTypeEnum[] var1 = values();
+		int var2 = var1.length;
+
+		for(int var3 = 0; var3 < var2; ++var3) {
+			VciFieldTypeEnum wenum = var1[var3];
+			if (wenum.name().equalsIgnoreCase(value)) {
+				return wenum;
+			}
+		}
+
+		return null;
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..780a0c2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/BaseQueryObject.java
@@ -0,0 +1,165 @@
+package com.vci.ubcs.starter.web.pagemodel;
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.web.pagemodel;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+public class BaseQueryObject implements Serializable {
+	@JSONField(
+		serialize = false,
+		deserialize = false
+	)
+	private static final long serialVersionUID = 5608634730007623041L;
+	@JSONField
+	private Map<String, String> conditionMap = new HashMap();
+	@JSONField
+	private int page = 1;
+	@JSONField
+	private String sort;
+	@JSONField
+	private String order;
+	@JSONField
+	private int limit = 25;
+
+	public BaseQueryObject() {
+	}
+
+	public BaseQueryObject(Map<String, String> conditionMap) {
+		this.setConditionMap(conditionMap);
+	}
+
+	public BaseQueryObject(int limit) {
+		this.setLimit(limit);
+	}
+
+	public BaseQueryObject(Map<String, String> conditionMap, int limit) {
+		this.setConditionMap(conditionMap);
+		this.setLimit(limit);
+	}
+
+	public Map<String, String> getConditionMap() {
+		return this.conditionMap;
+	}
+
+	public Map<String, String> getConditionMapByNick(String nick) {
+		if (this.conditionMap != null) {
+			Map<String, String> conditionMapHasNick = new HashMap();
+			this.conditionMap.forEach((k, v) -> {
+				if (!k.contains(".")) {
+					conditionMapHasNick.put(nick + "." + k, v);
+				} else {
+					conditionMapHasNick.put(k, v);
+				}
+
+			});
+			return conditionMapHasNick;
+		} else {
+			return null;
+		}
+	}
+
+	public void setConditionMap(Map<String, String> conditionMap) {
+		this.conditionMap = conditionMap;
+	}
+
+	public int getPage() {
+		return this.page;
+	}
+
+	public void setPage(int page) {
+		this.page = page;
+	}
+
+	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 int getLimit() {
+		return this.limit;
+	}
+
+	public void setLimit(int limit) {
+		this.limit = limit;
+	}
+
+	@JSONField(
+		serialize = false,
+		deserialize = false
+	)
+	public PageHelper getPageHelper() {
+		PageHelper pageHelper = new PageHelper(this.limit);
+		pageHelper.setPage(this.getPage());
+		pageHelper.setSort(this.getSort());
+		pageHelper.setOrder(this.getOrder());
+		return pageHelper;
+	}
+
+	public BaseQueryObject addSort(String sort, String order) {
+		this.setSort(StringUtils.isBlank(this.getSort()) ? sort : this.getSort() + "," + sort);
+		this.setOrder(StringUtils.isBlank(this.getOrder()) ? order : this.getOrder() + "," + order);
+		return this;
+	}
+
+	public BaseQueryObject addCondition(String key, String value) {
+		if (this.getConditionMap() == null) {
+			this.conditionMap = new HashMap();
+		}
+
+		this.conditionMap.put(key, value);
+		return this;
+	}
+
+	public BaseQueryObject page(PageHelper pageHelper) {
+		this.setSort(pageHelper.getSort());
+		this.setOrder(pageHelper.getOrder());
+		this.setPage(pageHelper.getPage());
+		this.setLimit(pageHelper.getLimit());
+		return this;
+	}
+
+	@JSONField(
+		serialize = false,
+		deserialize = false
+	)
+	public Map<String, String> getFeignRequestMap() {
+		Map<String, String> feignRequestMap = new HashMap();
+		if (this.conditionMap != null) {
+			this.getConditionMap().forEach((k, v) -> {
+				feignRequestMap.put("conditionMap[\"" + k + "\"]", v);
+			});
+		}
+
+		feignRequestMap.put("page", this.getPage() + "");
+		feignRequestMap.put("limit", this.getLimit() + "");
+		feignRequestMap.put("sort", this.getSort());
+		feignRequestMap.put("order", this.getOrder());
+		return feignRequestMap;
+	}
+
+	@Override
+	public String toString() {
+		return "BaseQueryObject{conditionMap=" + this.conditionMap + ", page=" + this.page + ", sort='" + this.sort + '\'' + ", order='" + this.order + '\'' + ", limit=" + this.limit + '}';
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..d042257
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/DataGrid.java
@@ -0,0 +1,112 @@
+package com.vci.ubcs.starter.web.pagemodel;
+
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DataGrid<T> implements Serializable {
+	private static final long serialVersionUID = -5909212697362510055L;
+	private long total = 0L;
+	private List<T> data = new ArrayList();
+	private int start;
+	private int limit;
+	private int page;
+	private String sort;
+	private String order;
+	private String msg;
+	private int code = 0;
+	private String traceId;
+
+	public DataGrid() {
+	}
+
+	public DataGrid(String msg) {
+		this.msg = msg;
+		this.code = 1;
+	}
+
+	public long getTotal() {
+		return this.total;
+	}
+
+	public void setTotal(long total) {
+		this.total = total;
+	}
+
+	public List<T> getData() {
+		return this.data;
+	}
+
+	public void setData(List<T> data) {
+		this.data = data;
+	}
+
+	public int getStart() {
+		return this.start;
+	}
+
+	public void setStart(int start) {
+		this.start = start;
+	}
+
+	public int getLimit() {
+		return this.limit;
+	}
+
+	public void setLimit(int limit) {
+		this.limit = limit;
+	}
+
+	public int getPage() {
+		return this.page;
+	}
+
+	public void setPage(int page) {
+		this.page = page;
+	}
+
+	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 getMsg() {
+		return this.msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	public int getCode() {
+		return this.code;
+	}
+
+	public void setCode(int code) {
+		this.code = code;
+	}
+
+	public String getTraceId() {
+		return this.traceId;
+	}
+
+	public void setTraceId(String traceId) {
+		this.traceId = traceId;
+	}
+
+	public String toString() {
+		return "DataGrid{total=" + this.total + ", data=" + this.data + ", start=" + this.start + ", limit=" + this.limit + ", page=" + this.page + ", sort='" + this.sort + '\'' + ", order='" + this.order + '\'' + ", msg='" + this.msg + '\'' + ", code=" + this.code + ", traceId='" + this.traceId + '\'' + '}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..7e980d0
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/KeyValue.java
@@ -0,0 +1,52 @@
+package com.vci.ubcs.starter.web.pagemodel;
+
+//package com.vci.starter.web.pagemodel;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+public class KeyValue implements Serializable {
+	private static final long serialVersionUID = 7708882804529442626L;
+	private String key;
+	private String value;
+	private Map<String, Object> attributes = new HashMap();
+
+	public KeyValue() {
+
+	}
+
+	public String getKey() {
+		return this.key;
+	}
+
+	public void setKey(String key) {
+		this.key = key;
+	}
+
+	public String getValue() {
+		return this.value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	public Map<String, Object> getAttributes() {
+		return this.attributes;
+	}
+
+	public void setAttributes(Map<String, Object> attributes) {
+		this.attributes = attributes;
+	}
+
+	public void addAttr(String attr, Object attrValue) {
+		this.attributes.put(attr, attrValue);
+	}
+
+	@Override
+	public String toString() {
+		return "KeyValue{key='" + this.key + '\'' + ", value='" + this.value + '\'' + ", attributes=" + this.attributes + '}';
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..a75144e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/PageHelper.java
@@ -0,0 +1,239 @@
+package com.vci.ubcs.starter.web.pagemodel;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.web.pagemodel;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+public class PageHelper implements Serializable {
+	private static final long serialVersionUID = -588765760880887850L;
+	private int page;
+	private String sort;
+	private String order;
+	private int start = 0;
+	private int limit = 25;
+	private boolean queryTotal = true;
+	private String ordersql;
+	private String nick;
+	public final String asc = "asc";
+	public final String desc = "desc";
+	private Set<String> unNickField = new HashSet();
+
+	public PageHelper() {
+	}
+
+	public PageHelper(int limit) {
+		this.limit = limit;
+		this.page = 1;
+	}
+
+	public PageHelper(int limit, boolean queryTotal) {
+		this.limit = limit;
+		this.queryTotal = queryTotal;
+	}
+
+	public PageHelper(String sort) {
+		this.sort = sort;
+		this.limit = -1;
+		this.order = "asc";
+	}
+
+	public PageHelper(String sort, String order) {
+		this.sort = sort;
+		this.limit = -1;
+		this.order = order;
+	}
+
+	public PageHelper(int limit, String sort, String order) {
+		this.limit = limit;
+		this.sort = sort;
+		this.order = order;
+	}
+
+	public PageHelper(int limit, int page, String sort, String order) {
+		this.limit = limit;
+		this.page = page;
+		this.sort = sort;
+		this.order = order;
+	}
+
+	public int getPage() {
+		return this.page;
+	}
+
+	public void setPage(int page) {
+		this.page = page;
+		if (page > 0 && this.limit > 0) {
+			this.start = (this.page - 1) * this.limit;
+		}
+
+	}
+
+	public void setSort(String sort) {
+		this.sort = sort;
+	}
+
+	public String getOrder() {
+		return this.order;
+	}
+
+	public void setOrder(String order) {
+		this.order = order;
+	}
+
+	public int getStart() {
+		return this.limit <= 0 ? 0 : (this.page - 1) * this.limit + 1;
+	}
+
+	public boolean isQueryTotal() {
+		return this.queryTotal;
+	}
+
+	public void setQueryTotal(boolean queryTotal) {
+		this.queryTotal = queryTotal;
+	}
+
+	public int getLimit() {
+		return this.limit;
+	}
+
+	public void setLimit(int limit) {
+		this.limit = limit;
+		if (this.page > 0 && this.limit > 0) {
+			this.start = (this.page - 1) * this.limit + 1;
+		}
+
+	}
+
+	public void addSort(String sort, String order) {
+		this.setSort(StringUtils.isBlank(this.getSort()) ? sort : this.getSort() + "," + sort);
+		this.setOrder(StringUtils.isBlank(this.getOrder()) ? order : this.getOrder() + "," + order);
+	}
+
+	public void addAsc(String field) {
+		this.addSort(field, "asc");
+	}
+
+	public void addDefaultAsc(String field) {
+		if (StringUtils.isBlank(this.getSort()) && StringUtils.isBlank(this.getOrder())) {
+			this.addAsc(field);
+		}
+
+	}
+
+	public void addDefaultDesc(String field) {
+		if (StringUtils.isBlank(this.getSort()) && StringUtils.isBlank(this.getOrder())) {
+			this.addDesc(field);
+		}
+
+	}
+
+	public void addDesc(String field) {
+		this.addSort(field, "desc");
+	}
+
+	public String getSort() {
+		return this.sort;
+	}
+
+	public void setStart(int start) {
+		this.start = start;
+	}
+
+	public String getOrdersql() {
+		if ((this.ordersql == null || this.ordersql.trim().length() == 0) && this.sort != null && this.sort.trim().length() > 0 && this.order != null && this.order.trim().length() > 0) {
+			if (this.sort.indexOf(",") > -1) {
+				String[] sortArray = this.sort.split(",");
+				String[] orderArray = this.order.split(",");
+				StringBuilder sb = new StringBuilder();
+
+				for(int i = 0; i < sortArray.length; ++i) {
+					if (StringUtils.isNotBlank(sortArray[i]) && orderArray.length > i && StringUtils.isNotBlank(orderArray[i])) {
+						if (sortArray[i].indexOf(".") < 0 && !this.unNickField.contains(sortArray[i].toLowerCase())) {
+							sb.append(StringUtils.isBlank(this.getNick()) ? "" : this.getNick() + ".");
+						}
+
+						sb.append(sortArray[i].toLowerCase());
+						sb.append(" ");
+						sb.append(orderArray[i]);
+						sb.append(",");
+					}
+				}
+
+				this.ordersql = " order by " + sb.toString();
+				if (this.ordersql.endsWith(",")) {
+					this.ordersql = this.ordersql.substring(0, this.ordersql.length() - 1);
+				}
+			} else {
+				this.ordersql = " order by " + this.sort + " " + this.order;
+			}
+		}
+
+		return this.ordersql;
+	}
+
+	public String getOrderSql(String nick) {
+		if ((this.ordersql == null || this.ordersql.trim().length() == 0) && this.sort != null && this.sort.trim().length() > 0 && this.order != null && this.order.trim().length() > 0) {
+			if (this.sort.indexOf(",") > -1) {
+				String[] sortArray = this.sort.split(",");
+				String[] orderArray = this.order.split(",");
+				StringBuilder sb = new StringBuilder();
+
+				for(int i = 0; i < sortArray.length; ++i) {
+					if (StringUtils.isNotBlank(sortArray[i]) && orderArray.length > i && StringUtils.isNotBlank(orderArray[i])) {
+						if (sortArray[i].indexOf(".") < 0) {
+							sb.append(StringUtils.isBlank(nick) ? "" : nick + ".");
+						}
+
+						sb.append(sortArray[i].toLowerCase());
+						sb.append(" ");
+						sb.append(orderArray[i]);
+						sb.append(",");
+					}
+				}
+
+				this.ordersql = " order by " + sb.toString();
+				if (this.ordersql.endsWith(",")) {
+					this.ordersql = this.ordersql.substring(0, this.ordersql.length() - 1);
+				}
+			} else {
+				this.ordersql = " order by " + nick + "." + this.sort + " " + this.order;
+			}
+		}
+
+		return this.ordersql;
+	}
+
+	public String getNick() {
+		return this.nick;
+	}
+
+	public void setNick(String nick) {
+		this.nick = nick;
+	}
+
+	public void setOrdersql(String ordersql) {
+		this.ordersql = ordersql;
+	}
+
+	@Override
+	public String toString() {
+		return "PageHelper{page=" + this.page + ", sort='" + this.sort + '\'' + ", order='" + this.order + '\'' + ", start=" + this.start + ", limit=" + this.limit + ", queryTotal=" + this.queryTotal + ", ordersql='" + this.ordersql + '\'' + ", nick='" + this.nick + '\'' + ", asc='" + "asc" + '\'' + ", desc='" + "desc" + '\'' + ", unNickField=" + this.unNickField + '}';
+	}
+
+	public Set<String> getUnNickField() {
+		return this.unNickField;
+	}
+
+	public void setUnNickField(Set<String> unNickField) {
+		this.unNickField = unNickField;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..9a6c5b4
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/SessionInfo.java
@@ -0,0 +1,421 @@
+package com.vci.ubcs.starter.web.pagemodel;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.web.pagemodel;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class SessionInfo implements Serializable {
+	private static final long serialVersionUID = 7950268190988911233L;
+	private String orgsOid;
+	private String orgsName;
+	private String deptOid;
+	private String deptName;
+	private String userOid;
+	private String userId;
+	private String userName;
+	private String personOid;
+	private String personId;
+	private String personName;
+	private String dutyOid;
+	private String dutyName;
+	private String workgroupOid;
+	private String workgroupName;
+	private String workTypeOid;
+	private String workTypeName;
+	private String usertype;
+	private String usertypeText;
+	private String sex;
+	private String sexText;
+	private Map<String, String> rolesName;
+	private List<String> functionOids;
+	private String photoUrl;
+	private String ip;
+	private String language;
+	private String userSecret;
+	private String userSecretText;
+	private String ipSecret;
+	private String ipSecretText;
+	private String machine;
+	private String os;
+	private String browser;
+	private String osUser;
+	private List<String> deviceInfo = new ArrayList();
+	private String email;
+	private String phoneNo;
+	private String rtxNo;
+	private String portalId;
+	private String IMId;
+	private boolean sso;
+	private String ssoServiceName;
+	private String token;
+	private Map<String, String> globalAttributeMap = new HashMap();
+	private String workNo;
+
+	public SessionInfo() {
+	}
+
+	public String getDutyOid() {
+		return this.dutyOid;
+	}
+
+	public void setDutyOid(String dutyOid) {
+		this.dutyOid = dutyOid;
+	}
+
+	public String getDutyName() {
+		return this.dutyName;
+	}
+
+	public void setDutyName(String dutyName) {
+		this.dutyName = dutyName;
+	}
+
+	public String getOrgsOid() {
+		return this.orgsOid;
+	}
+
+	public void setOrgsOid(String orgsOid) {
+		this.orgsOid = orgsOid;
+	}
+
+	public String getOrgsName() {
+		return this.orgsName;
+	}
+
+	public void setOrgsName(String orgsName) {
+		this.orgsName = orgsName;
+	}
+
+	public String getDeptOid() {
+		return this.deptOid;
+	}
+
+	public void setDeptOid(String deptOid) {
+		this.deptOid = deptOid;
+	}
+
+	public String getDeptName() {
+		return this.deptName;
+	}
+
+	public void setDeptName(String deptName) {
+		this.deptName = deptName;
+	}
+
+	public String getUserOid() {
+		return this.userOid;
+	}
+
+	public void setUserOid(String userOid) {
+		this.userOid = userOid;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getUserName() {
+		return this.userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getPersonOid() {
+		return this.personOid;
+	}
+
+	public void setPersonOid(String personOid) {
+		this.personOid = personOid;
+	}
+
+	public String getPersonName() {
+		return this.personName;
+	}
+
+	public void setPersonName(String personName) {
+		this.personName = personName;
+	}
+
+	public String getWorkgroupOid() {
+		return this.workgroupOid;
+	}
+
+	public void setWorkgroupOid(String workgroupOid) {
+		this.workgroupOid = workgroupOid;
+	}
+
+	public String getWorkgroupName() {
+		return this.workgroupName;
+	}
+
+	public void setWorkgroupName(String workgroupName) {
+		this.workgroupName = workgroupName;
+	}
+
+	public String getUsertype() {
+		return this.usertype;
+	}
+
+	public void setUsertype(String usertype) {
+		this.usertype = usertype;
+	}
+
+	public String getUsertypeText() {
+		return this.usertypeText;
+	}
+
+	public void setUsertypeText(String usertypeText) {
+		this.usertypeText = usertypeText;
+	}
+
+	public String getSex() {
+		return this.sex;
+	}
+
+	public void setSex(String sex) {
+		this.sex = sex;
+	}
+
+	public List<String> getFunctionOids() {
+		return this.functionOids;
+	}
+
+	public void setFunctionOids(List<String> functionOids) {
+		this.functionOids = functionOids;
+	}
+
+	public String getPhotoUrl() {
+		return this.photoUrl;
+	}
+
+	public void setPhotoUrl(String photoUrl) {
+		this.photoUrl = photoUrl;
+	}
+
+	public String getIp() {
+		return this.ip;
+	}
+
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
+
+	public String getLanguage() {
+		return this.language;
+	}
+
+	public void setLanguage(String language) {
+		this.language = language;
+	}
+
+	public String getUserSecret() {
+		return this.userSecret;
+	}
+
+	public void setUserSecret(String userSecret) {
+		this.userSecret = userSecret;
+	}
+
+	public String getUserSecretText() {
+		return this.userSecretText;
+	}
+
+	public void setUserSecretText(String userSecretText) {
+		this.userSecretText = userSecretText;
+	}
+
+	public String getIpSecret() {
+		return this.ipSecret;
+	}
+
+	public void setIpSecret(String ipSecret) {
+		this.ipSecret = ipSecret;
+	}
+
+	public String getIpSecretText() {
+		return this.ipSecretText;
+	}
+
+	public void setIpSecretText(String ipSecretText) {
+		this.ipSecretText = ipSecretText;
+	}
+
+	public String getMachine() {
+		return this.machine;
+	}
+
+	public void setMachine(String machine) {
+		this.machine = machine;
+	}
+
+	public String getOs() {
+		return this.os;
+	}
+
+	public void setOs(String os) {
+		this.os = os;
+	}
+
+	public String getBrowser() {
+		return this.browser;
+	}
+
+	public void setBrowser(String browser) {
+		this.browser = browser;
+	}
+
+	public String getOsUser() {
+		return this.osUser;
+	}
+
+	public void setOsUser(String osUser) {
+		this.osUser = osUser;
+	}
+
+	public List<String> getDeviceInfo() {
+		return this.deviceInfo;
+	}
+
+	public void setDeviceInfo(List<String> deviceInfo) {
+		this.deviceInfo = deviceInfo;
+	}
+
+	public String getEmail() {
+		return this.email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getPhoneNo() {
+		return this.phoneNo;
+	}
+
+	public void setPhoneNo(String phoneNo) {
+		this.phoneNo = phoneNo;
+	}
+
+	public String getRtxNo() {
+		return this.rtxNo;
+	}
+
+	public void setRtxNo(String rtxNo) {
+		this.rtxNo = rtxNo;
+	}
+
+	public String getPortalId() {
+		return this.portalId;
+	}
+
+	public void setPortalId(String portalId) {
+		this.portalId = portalId;
+	}
+
+	public String getIMId() {
+		return this.IMId;
+	}
+
+	public void setIMId(String IMId) {
+		this.IMId = IMId;
+	}
+
+	public boolean isSso() {
+		return this.sso;
+	}
+
+	public void setSso(boolean sso) {
+		this.sso = sso;
+	}
+
+	public String getSsoServiceName() {
+		return this.ssoServiceName;
+	}
+
+	public void setSsoServiceName(String ssoServiceName) {
+		this.ssoServiceName = ssoServiceName;
+	}
+
+	public String getToken() {
+		return this.token;
+	}
+
+	public void setToken(String token) {
+		this.token = token;
+	}
+
+	public Map<String, String> getGlobalAttributeMap() {
+		return this.globalAttributeMap;
+	}
+
+	public void setGlobalAttributeMap(Map<String, String> globalAttributeMap) {
+		this.globalAttributeMap = globalAttributeMap;
+	}
+
+	public String getPersonId() {
+		return this.personId;
+	}
+
+	public void setPersonId(String personId) {
+		this.personId = personId;
+	}
+
+	public String getSexText() {
+		return this.sexText;
+	}
+
+	public void setSexText(String sexText) {
+		this.sexText = sexText;
+	}
+
+	public Map<String, String> getRolesName() {
+		return this.rolesName;
+	}
+
+	public void setRolesName(Map<String, String> rolesName) {
+		this.rolesName = rolesName;
+	}
+
+	public String getWorkNo() {
+		return this.workNo;
+	}
+
+	public void setWorkNo(String workNo) {
+		this.workNo = workNo;
+	}
+
+	public String getWorkTypeOid() {
+		return this.workTypeOid;
+	}
+
+	public void setWorkTypeOid(String workTypeOid) {
+		this.workTypeOid = workTypeOid;
+	}
+
+	public String getWorkTypeName() {
+		return this.workTypeName;
+	}
+
+	public void setWorkTypeName(String workTypeName) {
+		this.workTypeName = workTypeName;
+	}
+
+	public String toString() {
+		return "SessionInfo{orgsOid='" + this.orgsOid + '\'' + ", orgsName='" + this.orgsName + '\'' + ", deptOid='" + this.deptOid + '\'' + ", deptName='" + this.deptName + '\'' + ", userOid='" + this.userOid + '\'' + ", userId='" + this.userId + '\'' + ", userName='" + this.userName + '\'' + ", personOid='" + this.personOid + '\'' + ", personId='" + this.personId + '\'' + ", personName='" + this.personName + '\'' + ", dutyOid='" + this.dutyOid + '\'' + ", dutyName='" + this.dutyName + '\'' + ", workgroupOid='" + this.workgroupOid + '\'' + ", workgroupName='" + this.workgroupName + '\'' + ", workTypeOid='" + this.workTypeOid + '\'' + ", workTypeName='" + this.workTypeName + '\'' + ", usertype='" + this.usertype + '\'' + ", usertypeText='" + this.usertypeText + '\'' + ", sex='" + this.sex + '\'' + ", sexText='" + this.sexText + '\'' + ", rolesName=" + this.rolesName + ", functionOids=" + this.functionOids + ", photoUrl='" + this.photoUrl + '\'' + ", ip='" + this.ip + '\'' + ", language='" + this.language + '\'' + ", userSecret='" + this.userSecret + '\'' + ", userSecretText='" + this.userSecretText + '\'' + ", ipSecret='" + this.ipSecret + '\'' + ", ipSecretText='" + this.ipSecretText + '\'' + ", machine='" + this.machine + '\'' + ", os='" + this.os + '\'' + ", browser='" + this.browser + '\'' + ", osUser='" + this.osUser + '\'' + ", deviceInfo=" + this.deviceInfo + ", email='" + this.email + '\'' + ", phoneNo='" + this.phoneNo + '\'' + ", rtxNo='" + this.rtxNo + '\'' + ", portalId='" + this.portalId + '\'' + ", IMId='" + this.IMId + '\'' + ", sso=" + this.sso + ", ssoServiceName='" + this.ssoServiceName + '\'' + ", token='" + this.token + '\'' + ", globalAttributeMap=" + this.globalAttributeMap + ", workNo='" + this.workNo + '\'' + '}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..bb09378
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/Tree.java
@@ -0,0 +1,205 @@
+package com.vci.ubcs.starter.web.pagemodel;
+
+
+import org.springblade.core.tool.utils.StringUtil;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+public class Tree implements Serializable {
+	private static final long serialVersionUID = 6886695271635257882L;
+	private String oid;
+	private String text;
+	private boolean leaf = false;
+	private boolean showCheckbox = false;
+	private boolean checked = false;
+	private List<Tree> children = new ArrayList();
+	private String icon;
+	private String iconCls;
+	private String parentId;
+	private String parentName;
+	private String parentBtmName;
+	private boolean expanded = false;
+	private String href;
+	private String index;
+	private Map<String, String> attributes = new HashMap();
+
+	public Tree() {
+	}
+
+	public Tree(String oid, String text) {
+		this.setOid(oid);
+		this.setText(text);
+	}
+
+	public String getOid() {
+		return this.oid;
+	}
+
+	public void setOid(String oid) {
+		this.oid = oid;
+	}
+
+	public String getText() {
+		return this.text;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+
+	public boolean isLeaf() {
+		return this.leaf;
+	}
+
+	public void setLeaf(boolean leaf) {
+		this.leaf = leaf;
+	}
+
+	public boolean isShowCheckbox() {
+		return this.showCheckbox;
+	}
+
+	public void setShowCheckbox(boolean showCheckbox) {
+		this.showCheckbox = showCheckbox;
+	}
+
+	public boolean isChecked() {
+		return this.checked;
+	}
+
+	public void setChecked(boolean checked) {
+		this.checked = checked;
+	}
+
+	public List<Tree> getChildren() {
+		return this.children;
+	}
+
+	public void setChildren(List<Tree> children) {
+		this.children = children;
+	}
+
+	public String getIcon() {
+		return this.icon;
+	}
+
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public String getIconCls() {
+		return this.iconCls;
+	}
+
+	public void setIconCls(String iconCls) {
+		this.iconCls = iconCls;
+	}
+
+	public String getParentId() {
+		return this.parentId;
+	}
+
+	public void setParentId(String parentId) {
+		this.parentId = parentId;
+	}
+
+	public boolean isExpanded() {
+		return this.expanded;
+	}
+
+	public void setExpanded(boolean expanded) {
+		this.expanded = expanded;
+	}
+
+	public String getHref() {
+		return this.href;
+	}
+
+	public void setHref(String href) {
+		this.href = href;
+	}
+
+	public String getIndex() {
+		return this.index;
+	}
+
+	public void setIndex(String index) {
+		this.index = index;
+	}
+
+	public Map<String, String> getAttributes() {
+		return this.attributes;
+	}
+
+	public void setAttributes(Map<String, String> attributes) {
+		this.attributes = attributes;
+	}
+
+	public String getParentName() {
+		return this.parentName;
+	}
+
+	public void setParentName(String parentName) {
+		this.parentName = parentName;
+	}
+
+	public String getParentBtmName() {
+		return this.parentBtmName;
+	}
+
+	public void setParentBtmName(String parentBtmName) {
+		this.parentBtmName = parentBtmName;
+	}
+
+	public static List<Tree> getChildList(List<Tree> rootTree, List<Tree> children) {
+		if (rootTree == null || rootTree.size() == 0) {
+			if (children == null || children.size() <= 0) {
+				return null;
+			}
+
+			rootTree = children.subList(0, children.size());
+		}
+
+		Tree bt = new Tree();
+		bt.findChild(rootTree, children);
+		return rootTree;
+	}
+
+	public void findChild(List<Tree> treenode, List<Tree> children) {
+		Tree node;
+		for(Iterator var3 = treenode.iterator(); var3.hasNext(); this.getChildren().add(node)) {
+			node = (Tree)var3.next();
+			Iterator var5 = children.iterator();
+
+			while(var5.hasNext()) {
+				Tree childnode = (Tree)var5.next();
+				if (node.getOid().equalsIgnoreCase(childnode.getParentId())) {
+					childnode.setParentName(node.getText());
+					if (StringUtil.isBlank(childnode.getParentBtmName())) {
+						childnode.setParentBtmName((String)node.getAttributes().getOrDefault("btmname", ""));
+					}
+
+					node.getChildren().add(childnode);
+				}
+			}
+
+			if (node.getChildren().size() > 0) {
+				this.findChild(node.getChildren(), children);
+				node.setLeaf(false);
+			} else {
+				node.setLeaf(true);
+			}
+		}
+
+	}
+
+	public String toString() {
+		return "Tree{oid='" + this.oid + '\'' + ", text='" + this.text + '\'' + ", leaf=" + this.leaf + ", showCheckbox=" + this.showCheckbox + ", checked=" + this.checked + ", children=" + this.children + ", icon='" + this.icon + '\'' + ", iconCls='" + this.iconCls + '\'' + ", parentId='" + this.parentId + '\'' + ", parentName='" + this.parentName + '\'' + ", parentBtmName='" + this.parentBtmName + '\'' + ", expanded=" + this.expanded + ", href='" + this.href + '\'' + ", index='" + this.index + '\'' + ", attributes=" + this.attributes + '}';
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..98546ac
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFieldSortVO.java
@@ -0,0 +1,50 @@
+package com.vci.ubcs.starter.web.pagemodel;
+
+//package com.vci.web.pageModel;
+
+/**
+ * 瀛楁鐨勬帓搴�
+ * @author weidy
+ * @date 2022-04-21
+ */
+public class UIFieldSortVO implements java.io.Serializable{
+
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 3364856602124197925L;
+
+	/**
+	 * 鎺掑簭鐨勫瓧娈�
+	 */
+	private String field;
+
+	/**
+	 * 鎺掑簭鐨勭被鍨�
+	 */
+	private String type;
+
+	public String getField() {
+		return field;
+	}
+
+	public void setField(String field) {
+		this.field = field;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	@Override
+	public String toString() {
+		return "UIFieldSortVO{" +
+			"field='" + field + '\'' +
+			", type='" + type + '\'' +
+			'}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..95f365b
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UIFormReferVO.java
@@ -0,0 +1,349 @@
+package com.vci.ubcs.starter.web.pagemodel;
+
+//package com.vci.web.pageModel;
+
+
+import java.util.Map;
+
+/**
+ * 鍙傜収鐨勯厤缃�
+ * @author weidy
+ * @date 2021/2/24
+ */
+public class UIFormReferVO implements java.io.Serializable{
+
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 1459005348514757537L;
+	/**
+	 * 鍙傜収鐨勭獥鍙g被鍨�
+	 */
+	private String type;
+
+	/**
+	 * 鏄剧ず鐨勫瓧娈靛睘鎬�
+	 */
+	private String textField = "name";
+
+	/**
+	 * 鍊肩殑灞炴��
+	 */
+	private String valueField = "oid";
+
+	/**
+	 * 鏄惁澶氶��
+	 */
+	private boolean muti = false;
+
+	/**
+	 * 鍚庡彴鍦板潃
+	 */
+	private String url;
+
+	/**
+	 * 鏈嶅姟鐨勫湴鍧�
+	 */
+	private String backPath;
+
+	/**
+	 * 璇锋眰鍚庡彴鐨勫舰寮�
+	 */
+	private String method = "GET";
+
+	/**
+	 * 楂樺害
+	 */
+	private Integer height;
+
+	//閫氱敤鐨勫弬鐓�
+	/**
+	 * 鍙傜収鐨勪笟鍔$被鍨�
+	 */
+	private String referType;
+
+	/**
+	 * 鍙傜収鐨刄I涓婁笅鏂�
+	 */
+	private String referContent;
+
+	//鏍戝舰鐨勫弬鐓�
+	/**
+	 * 涓婄骇瀛楁
+	 */
+	private String parentFieldName;
+
+	/**
+	 * 涓婄骇瀛楁鐨勫唴瀹瑰搴旂殑灞炴�х殑鍊�
+	 */
+	private String parentUsedField;
+
+	/**
+	 * 涓婄骇瀛楁鐨勫��
+	 */
+	private String parentValue;
+
+	/**
+	 * 鍔犺浇鏂瑰紡
+	 */
+	private String loadType = "all";
+
+	/**
+	 * 鏄惁鍙兘閫夋嫨鍙跺瓙鑺傜偣
+	 */
+	private boolean onlyLeaf = false;
+
+	/**
+	 * 杩囨护(绾ц仈)灞炴��
+	 */
+	private String useFormKey;
+
+	/**
+	 * 杩囨护灞炴�ц姹傚弬鏁�
+	 */
+	private String paramForFormKey;
+
+	/**
+	 * 鏄犲皠鍏朵粬灞炴��
+	 */
+	private String mapFields;
+
+
+	//鍒楄〃鐨勫弬鐓�
+
+	/**
+	 * 鏄剧ず鐨勫垪琛�
+	 */
+	private String displayTable;
+
+	/**
+	 * 琛ㄦ牸鐨勮嚜瀹氫箟瀹氫箟
+	 */
+	private UITableCustomDefineVO tableConfig;
+
+	/**
+	 * 绛涢�夋潯浠�
+	 */
+	private Map<String,String> where;
+
+	/**
+	 * 鍚庡彴鎺掑簭
+	 */
+	private boolean remoteSort;
+
+	/**
+	 * 鍒濆鍖栨帓搴�
+	 */
+	private UIFieldSortVO initSort;
+
+	public boolean isRemoteSort() {
+		return remoteSort;
+	}
+
+	public void setRemoteSort(boolean remoteSort) {
+		this.remoteSort = remoteSort;
+	}
+
+
+	public UIFieldSortVO getInitSort() {
+		return initSort;
+	}
+
+	public void setInitSort(UIFieldSortVO initSort) {
+		this.initSort = initSort;
+	}
+
+	public String getParentUsedField() {
+		return parentUsedField;
+	}
+
+	public void setParentUsedField(String parentUsedField) {
+		this.parentUsedField = parentUsedField;
+	}
+
+	public Map<String, String> getWhere() {
+		return where;
+	}
+
+	public void setWhere(Map<String, String> where) {
+		this.where = where;
+	}
+
+	public String getUseFormKey() {
+		return useFormKey;
+	}
+
+	public void setUseFormKey(String useFormKey) {
+		this.useFormKey = useFormKey;
+	}
+
+	public String getParamForFormKey() {
+		return paramForFormKey;
+	}
+
+	public void setParamForFormKey(String paramForFormKey) {
+		this.paramForFormKey = paramForFormKey;
+	}
+
+	public String getMapFields() {
+		return mapFields;
+	}
+
+	public void setMapFields(String mapFields) {
+		this.mapFields = mapFields;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getTextField() {
+		return textField;
+	}
+
+	public void setTextField(String textField) {
+		this.textField = textField;
+	}
+
+	public String getValueField() {
+		return valueField;
+	}
+
+	public void setValueField(String valueField) {
+		this.valueField = valueField;
+	}
+
+	public boolean isMuti() {
+		return muti;
+	}
+
+	public void setMuti(boolean muti) {
+		this.muti = muti;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public String getBackPath() {
+		return backPath;
+	}
+
+	public void setBackPath(String backPath) {
+		this.backPath = backPath;
+	}
+
+	public String getMethod() {
+		return method;
+	}
+
+	public void setMethod(String method) {
+		this.method = method;
+	}
+
+	public Integer getHeight() {
+		return height;
+	}
+
+	public void setHeight(Integer height) {
+		this.height = height;
+	}
+
+	public String getReferType() {
+		return referType;
+	}
+
+	public void setReferType(String referType) {
+		this.referType = referType;
+	}
+
+	public String getReferContent() {
+		return referContent;
+	}
+
+	public void setReferContent(String referContent) {
+		this.referContent = referContent;
+	}
+
+	public String getParentFieldName() {
+		return parentFieldName;
+	}
+
+	public void setParentFieldName(String parentFieldName) {
+		this.parentFieldName = parentFieldName;
+	}
+
+	public String getParentValue() {
+		return parentValue;
+	}
+
+	public void setParentValue(String parentValue) {
+		this.parentValue = parentValue;
+	}
+
+	public String getLoadType() {
+		return loadType;
+	}
+
+	public void setLoadType(String loadType) {
+		this.loadType = loadType;
+	}
+
+	public boolean isOnlyLeaf() {
+		return onlyLeaf;
+	}
+
+	public void setOnlyLeaf(boolean onlyLeaf) {
+		this.onlyLeaf = onlyLeaf;
+	}
+
+	public String getDisplayTable() {
+		return displayTable;
+	}
+
+	public void setDisplayTable(String displayTable) {
+		this.displayTable = displayTable;
+	}
+
+	public UITableCustomDefineVO getTableConfig() {
+		return tableConfig;
+	}
+
+	public void setTableConfig(UITableCustomDefineVO tableConfig) {
+		this.tableConfig = tableConfig;
+	}
+
+	@Override
+	public String toString() {
+		return "UIFormReferVO{" +
+			"type='" + type + '\'' +
+			", textField='" + textField + '\'' +
+			", valueField='" + valueField + '\'' +
+			", muti=" + muti +
+			", url='" + url + '\'' +
+			", backPath='" + backPath + '\'' +
+			", method='" + method + '\'' +
+			", height=" + height +
+			", referType='" + referType + '\'' +
+			", referContent='" + referContent + '\'' +
+			", parentFieldName='" + parentFieldName + '\'' +
+			", parentValue='" + parentValue + '\'' +
+			", loadType='" + loadType + '\'' +
+			", onlyLeaf=" + onlyLeaf +
+			", useFormKey='" + useFormKey + '\'' +
+			", paramForFormKey='" + paramForFormKey + '\'' +
+			", mapFields='" + mapFields + '\'' +
+			", displayTable='" + displayTable + '\'' +
+			", tableConfig=" + tableConfig +
+			", where=" + where +
+			'}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..5233015
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableCustomDefineVO.java
@@ -0,0 +1,80 @@
+package com.vci.ubcs.starter.web.pagemodel;
+
+//package com.vci.web.pageModel;
+
+import java.util.List;
+
+/**
+ * 琛ㄦ牸鐨勮嚜瀹氫箟
+ * @author weidy
+ * @date 2021/2/25
+ */
+public class UITableCustomDefineVO implements java.io.Serializable{
+
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 431728683965836558L;
+	/**
+	 * 涓婚敭
+	 */
+	private String oid;
+
+	/**
+	 * 鍒嗛〉鐨勫璞�
+	 */
+	private UITablePageVO page;
+
+	/**
+	 * 鏄剧ず鐨勫垪
+	 */
+	private List<UITableFieldVO> cols;
+
+	/**
+	 * 鏌ヨ鐨勫垪
+	 */
+	private List<UITableFieldVO> queryColumns;
+
+	public String getOid() {
+		return oid;
+	}
+
+	public void setOid(String oid) {
+		this.oid = oid;
+	}
+
+	public UITablePageVO getPage() {
+		return page;
+	}
+
+	public void setPage(UITablePageVO page) {
+		this.page = page;
+	}
+
+	public List<UITableFieldVO> getCols() {
+		return cols;
+	}
+
+	public void setCols(List<UITableFieldVO> cols) {
+		this.cols = cols;
+	}
+
+	public List<UITableFieldVO> getQueryColumns() {
+		return queryColumns;
+	}
+
+	public void setQueryColumns(List<UITableFieldVO> queryColumns) {
+		this.queryColumns = queryColumns;
+	}
+
+	@Override
+	public String toString() {
+		return "UITableCustomDefineVO{" +
+			"oid='" + oid + '\'' +
+			", page=" + page +
+			", cols=" + cols +
+			", queryColumns=" + queryColumns +
+			'}';
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..2690337
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITableFieldVO.java
@@ -0,0 +1,398 @@
+package com.vci.ubcs.starter.web.pagemodel;
+//package com.vci.web.pageModel;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒楄〃鐨勫垪鐨勪俊鎭�
+ * @author weidy
+ * @date 2021/2/25
+ */
+public class UITableFieldVO implements java.io.Serializable{
+
+	/**
+	 * 鍒楀悕
+	 */
+	private String field;
+
+	/**
+	 * 鏄剧ず鐨勫悕绉�
+	 */
+	private String title;
+
+	/**
+	 * 瀛楁绫诲瀷
+	 */
+	private String fieldType;
+
+	/**
+	 * 鏄惁鎺掑簭
+	 */
+	private boolean sort = false;
+
+	/**
+	 * 鎺掑簭瀛楁
+	 */
+	private String sortField ;
+
+	/**
+	 * 闅愯棌鐨勫瓧娈�
+	 */
+	private boolean hidden = false;
+
+	/**
+	 * 瀹藉害
+	 */
+	private Integer width;
+
+	/**
+	 * 鏈�灏忕殑瀹藉害
+	 */
+	private Integer minWidth;
+
+	/**
+	 * 鍥哄畾浣嶇疆锛屾敮鎸乺ight鍜宭eft
+	 */
+	private String fixed;
+
+	/**
+	 * 鎵�鍗犵殑鍒�
+	 */
+	private Integer colspan = 1;
+
+	/**
+	 * 鎵�绔欑殑琛�
+	 */
+	private Integer rowspan = 1;
+
+	/**
+	 * 妯℃澘鐨勭殑鍐呭
+	 */
+	private String templet;
+
+	/**
+	 * 鏃堕棿鏍煎紡
+	 */
+	private String dateFormate;
+
+	/**
+	 * 鏄惁鎿嶄綔鍒�
+	 */
+	private boolean optionField = false;
+
+	/**
+	 * 鎿嶄綔鍒楀寘鍚殑鎸夐挳
+	 */
+	private List<KeyValue> optionButtons;
+
+	/**
+	 * 浜嬩欢-鎵цjs鐨勬槧灏�
+	 */
+	private Map<String,String> optionJsMap;
+
+	/**
+	 * 鏄惁缂栬緫
+	 */
+	private String edit;
+
+	/**
+	 * 缂栬緫鐨勯厤缃�
+	 */
+	private String editConfig ;
+
+	/**
+	 * 瀵归綈鏂瑰紡
+	 */
+	private String align = "left";
+
+	/**
+	 * 鐗规畩鏍峰紡
+	 */
+	private String style;
+
+	/**
+	 * 鍗曞厓鏍肩偣鍑讳簨浠�
+	 */
+	private String event;
+
+	/**
+	 * 绂佺敤鎷栨嫿鍒楀
+	 */
+	private boolean unresize = false;
+
+	/**
+	 * 涓嬫媺鑿滃崟鐨勫悕绉�
+	 */
+	private String comboxKey;
+
+	/**
+	 * 涓嬫媺鑿滃崟鐨勯�夐」鍊�
+	 */
+	private List<KeyValue> data = new ArrayList<>();
+
+	/**
+	 * 鍙傜収鏄剧ず鐨勫瓧娈�
+	 */
+	private String showField;
+
+	/**
+	 * 鏌ヨ鐨勫瓧娈�
+	 */
+	private String queryField;
+
+	/**
+	 * 鍙傜収鐨勪俊鎭�
+	 */
+	private UIFormReferVO referConfig;
+
+	public Map<String, String> getOptionJsMap() {
+		return optionJsMap;
+	}
+
+	public void setOptionJsMap(Map<String, String> optionJsMap) {
+		this.optionJsMap = optionJsMap;
+	}
+
+	public String getFieldType() {
+		return fieldType;
+	}
+
+	public void setFieldType(String fieldType) {
+		this.fieldType = fieldType;
+	}
+
+	public String getDateFormate() {
+		return dateFormate;
+	}
+
+	public void setDateFormate(String dateFormate) {
+		this.dateFormate = dateFormate;
+	}
+
+	public String getField() {
+		return field;
+	}
+
+	public void setField(String field) {
+		this.field = field;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public boolean isSort() {
+		return sort;
+	}
+
+	public void setSort(boolean sort) {
+		this.sort = sort;
+	}
+
+	public String getSortField() {
+		return sortField;
+	}
+
+	public void setSortField(String sortField) {
+		this.sortField = sortField;
+	}
+
+	public boolean isHidden() {
+		return hidden;
+	}
+
+	public void setHidden(boolean hidden) {
+		this.hidden = hidden;
+	}
+
+	public Integer getWidth() {
+		return width;
+	}
+
+	public void setWidth(Integer width) {
+		this.width = width;
+	}
+
+	public Integer getMinWidth() {
+		return minWidth;
+	}
+
+	public void setMinWidth(Integer minWidth) {
+		this.minWidth = minWidth;
+	}
+
+	public String getFixed() {
+		return fixed;
+	}
+
+	public void setFixed(String fixed) {
+		this.fixed = fixed;
+	}
+
+	public Integer getColspan() {
+		return colspan;
+	}
+
+	public void setColspan(Integer colspan) {
+		this.colspan = colspan;
+	}
+
+	public Integer getRowspan() {
+		return rowspan;
+	}
+
+	public void setRowspan(Integer rowspan) {
+		this.rowspan = rowspan;
+	}
+
+	public String getTemplet() {
+		return templet;
+	}
+
+	public void setTemplet(String templet) {
+		this.templet = templet;
+	}
+
+	public boolean isOptionField() {
+		return optionField;
+	}
+
+	public void setOptionField(boolean optionField) {
+		this.optionField = optionField;
+	}
+
+	public List<KeyValue> getOptionButtons() {
+		return optionButtons;
+	}
+
+	public void setOptionButtons(List<KeyValue> optionButtons) {
+		this.optionButtons = optionButtons;
+	}
+
+	public String getEdit() {
+		return edit;
+	}
+
+	public void setEdit(String edit) {
+		this.edit = edit;
+	}
+
+	public String getEditConfig() {
+		return editConfig;
+	}
+
+	public void setEditConfig(String editConfig) {
+		this.editConfig = editConfig;
+	}
+
+	public String getAlign() {
+		return align;
+	}
+
+	public void setAlign(String align) {
+		this.align = align;
+	}
+
+	public String getStyle() {
+		return style;
+	}
+
+	public void setStyle(String style) {
+		this.style = style;
+	}
+
+	public String getEvent() {
+		return event;
+	}
+
+	public void setEvent(String event) {
+		this.event = event;
+	}
+
+	public boolean isUnresize() {
+		return unresize;
+	}
+
+	public void setUnresize(boolean unresize) {
+		this.unresize = unresize;
+	}
+
+	public String getComboxKey() {
+		return comboxKey;
+	}
+
+	public void setComboxKey(String comboxKey) {
+		this.comboxKey = comboxKey;
+	}
+
+	public List<KeyValue> getData() {
+		return data;
+	}
+
+	public void setData(List<KeyValue> data) {
+		this.data = data;
+	}
+
+	public String getShowField() {
+		return showField;
+	}
+
+	public void setShowField(String showField) {
+		this.showField = showField;
+	}
+
+	public UIFormReferVO getReferConfig() {
+		return referConfig;
+	}
+
+	public void setReferConfig(UIFormReferVO referConfig) {
+		this.referConfig = referConfig;
+	}
+
+	public String getQueryField() {
+		return queryField;
+	}
+
+	public void setQueryField(String queryField) {
+		this.queryField = queryField;
+	}
+
+	@Override
+	public String toString() {
+		return "UITableFieldVO{" +
+			"field='" + field + '\'' +
+			", title='" + title + '\'' +
+			", fieldType='" + fieldType + '\'' +
+			", sort=" + sort +
+			", sortField='" + sortField + '\'' +
+			", hidden=" + hidden +
+			", width=" + width +
+			", minWidth=" + minWidth +
+			", fixed='" + fixed + '\'' +
+			", colspan=" + colspan +
+			", rowspan=" + rowspan +
+			", templet='" + templet + '\'' +
+			", dateFormate='" + dateFormate + '\'' +
+			", optionField=" + optionField +
+			", optionButtons=" + optionButtons +
+			", optionJsMap=" + optionJsMap +
+			", edit='" + edit + '\'' +
+			", editConfig='" + editConfig + '\'' +
+			", align='" + align + '\'' +
+			", style='" + style + '\'' +
+			", event='" + event + '\'' +
+			", unresize=" + unresize +
+			", comboxKey='" + comboxKey + '\'' +
+			", data=" + data +
+			", showField='" + showField + '\'' +
+			", queryField='" + queryField + '\'' +
+			", referConfig=" + referConfig +
+			'}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..e2b722a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/UITablePageVO.java
@@ -0,0 +1,49 @@
+package com.vci.ubcs.starter.web.pagemodel;
+
+//package com.vci.web.pageModel;
+
+/**
+ * 琛ㄦ牸鐨勫垎椤靛璞�
+ * @author weidy
+ * @date 2021/2/25
+ */
+public class UITablePageVO implements java.io.Serializable{
+
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = -6338518925812603615L;
+	/**
+	 * 姣忛〉鏄剧ず鏁伴噺
+	 */
+	private Integer limit = -1;
+
+	/**
+	 * 褰撳墠椤垫暟
+	 */
+	private Integer page = 1;
+
+	public Integer getLimit() {
+		return limit;
+	}
+
+	public void setLimit(Integer limit) {
+		this.limit = limit;
+	}
+
+	public Integer getPage() {
+		return page;
+	}
+
+	public void setPage(Integer page) {
+		this.page = page;
+	}
+
+	@Override
+	public String toString() {
+		return "UITablePageVO{" +
+			"limit=" + limit +
+			", page=" + page +
+			'}';
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..23cb1fb
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/service/VciSecretServiceI.java
@@ -0,0 +1,28 @@
+package com.vci.ubcs.starter.web.service;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+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 {
+
+	default String getLessThanUserSecretSql() {
+		SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfoNotException();
+		return sessionInfo != null ? sessionInfo.getUserSecret() : "";
+	}
+
+	default boolean checkUserSecret(int dataSecret) {
+		SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfoNotException();
+		if (sessionInfo != null) {
+			if (StringUtils.isBlank(sessionInfo.getUserSecret())) {
+				sessionInfo.setUserSecret(UserSecretEnum.NONE.getValue() + "");
+			}
+
+			return VciBaseUtil.getInt(sessionInfo.getUserSecret()) >= dataSecret;
+		} else {
+			return false;
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..9e280ef
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/toolmodel/DateConverter.java
@@ -0,0 +1,188 @@
+package com.vci.ubcs.starter.web.toolmodel;
+
+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;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class DateConverter {
+	private DateFormat dateFormat;
+	private int exactDateLength;
+	private Date value;
+
+	public DateConverter() {
+	}
+
+	public DateFormat getDateFormat() {
+		return this.dateFormat;
+	}
+
+	public void setDateFormat(DateFormat dateFormat) {
+		this.dateFormat = dateFormat;
+	}
+
+	public int getExactDateLength() {
+		return this.exactDateLength;
+	}
+
+	public void setExactDateLength(int exactDateLength) {
+		this.exactDateLength = exactDateLength;
+	}
+
+	public Date getValue() {
+		return this.value;
+	}
+
+	public void setValue(Date value) {
+		this.value = value;
+	}
+
+	public void setAsText(String text) throws VciBaseException {
+		if (StringUtil.isBlank(text)) {
+			this.setValue((Date)null);
+		} else {
+			text = text.trim();
+			text = text.replace("骞�", "-").replace("鏈�", "-").replace("鏃�", "").replace("鏃�", ":").replace("鍒�", ":");
+			String pattern = "\\d{2,4}([^\\d]?)\\d{1,2}\\1\\d{1,2}( \\d{1,2}([^\\d])\\d{1,2})?";
+			Pattern r = Pattern.compile(pattern);
+			Matcher m = r.matcher(text);
+			if (!m.find()) {
+				throw new VciBaseException("涓嶆槸鍚堟牸鐨勬椂闂存牸寮忓瓧绗︿覆,{0}", new String[]{text});
+			}
+
+			String dateSplit = m.group(1);
+			String timeSplit = m.group(3);
+			String formateStr = String.format("yyyy%sMM%sdd", dateSplit, dateSplit);
+			String yearMD;
+			if (StringUtil.isNotBlank(timeSplit)) {
+				yearMD = text.substring(text.indexOf(" "));
+				String[] split = yearMD.split(timeSplit);
+				if (split.length == 2) {
+					formateStr = formateStr + String.format(" HH%smm", timeSplit);
+				}
+
+				if (split.length > 2) {
+					formateStr = formateStr + String.format(" HH%smm%sss", timeSplit, timeSplit);
+				}
+
+				if (yearMD.contains(".")) {
+					formateStr = formateStr + ".SSS";
+				}
+			}
+
+			yearMD = text.contains(" ") ? text.substring(0, text.indexOf(" ")) : text;
+			if (StringUtil.isNotBlank(dateSplit)) {
+				String year = text.substring(0, text.indexOf(dateSplit));
+				if (StringUtil.isNotBlank(year) && year.length() == 2) {
+					formateStr = formateStr.replace("yyyy", "yy");
+				}
+
+				String[] split = yearMD.split(dateSplit);
+				if (split.length == 2) {
+					formateStr = formateStr.replace("dd", "");
+				}
+			} else if (!text.matches("^[0-9]*$")) {
+				if (text.length() == 5) {
+					formateStr = formateStr.replace("yyyyMMdd", "yy" + text.substring(2, 3) + "MM");
+				}
+
+				if (text.length() == 7) {
+					formateStr = formateStr.replace("yyyyMMdd", "yyyy" + text.substring(4, 5) + "MM");
+				}
+			} else if (text.length() == 2 && text.matches("^[0-9]*$")) {
+				formateStr = "yy";
+			} else if (text.length() == 4 && text.matches("^[0-9]*$")) {
+				formateStr = "yyyy";
+			} else if (text.length() == 6 && text.matches("^[0-9]*$")) {
+				formateStr = "yyyyMM";
+			} else if (StringUtil.isNotBlank(yearMD) && yearMD.length() < 6) {
+				formateStr = formateStr.replace("yyyy", "yy");
+			}
+
+			SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formateStr);
+
+			try {
+				this.setValue(simpleDateFormat.parse(text));
+			} catch (ParseException var13) {
+				formateStr = formateStr.replace("yyyy", "yy");
+				simpleDateFormat = new SimpleDateFormat(formateStr);
+
+				try {
+					this.setValue(simpleDateFormat.parse(text));
+				} catch (ParseException var12) {
+					if (text.length() == 2 && text.matches("^[0-9]*$")) {
+						formateStr = "yy";
+					}
+
+					throw new VciBaseException("涓嶈兘鏍煎紡鍖栨棩鏈�: {0}", new String[]{text}, var13);
+				}
+			}
+		}
+
+	}
+
+	private String fillNano(String text) {
+		String nano = text.substring(text.lastIndexOf(".") + 1);
+		if (nano.length() < 3) {
+			for(int i = 0; i < 3 - nano.length(); ++i) {
+				nano = nano + "0";
+			}
+		}
+
+		return text.substring(0, text.lastIndexOf(".")) + "." + nano;
+	}
+
+	public static void main(String[] args) {
+		List<String> list = new ArrayList<String>() {
+			{
+				this.add("2020-11-12 12:12:03");
+				this.add("2020-1-2 2:2:3");
+				this.add("2020-11-12 12:12:03.232");
+				this.add("2020/11/12 12:12:03");
+				this.add("2020/1/2 2:2:3");
+				this.add("2020/11/12 12:12:03.232");
+				this.add("20/11/12 12:12:03");
+				this.add("20/1/2 2:2:3");
+				this.add("20/11/12 12:12:03.232");
+				this.add("2020");
+				this.add("2020-11");
+				this.add("202011");
+				this.add("12:02:12");
+				this.add("2:2:3");
+				this.add("20201112");
+				this.add("202012");
+				this.add("202012");
+				this.add("2020骞�11鏈�12鏃� 12鏃�12鍒�03绉�");
+				this.add("2020骞�1鏈�2鏃� 2:2:3");
+				this.add("2020骞�11鏈�12鏃� 12鏃�12鍒�03绉�232姣");
+			}
+		};
+		list.stream().forEach((t) -> {
+			try {
+				DateConverter dateConverter = new DateConverter();
+				dateConverter.setAsText(t);
+				System.out.println("杞崲鍓�:" + t + "; 杞崲鍚�:" + VciDateUtil.date2Str(dateConverter.getValue(), "yyyy-MM-dd HH:mm:ss.SSS"));
+			} catch (Throwable var2) {
+				var2.printStackTrace();
+			}
+
+		});
+	}
+
+	public String getAsText(String dateFormat) {
+		Date value = this.getValue();
+		if (StringUtil.isEmpty(dateFormat)) {
+			dateFormat = "yyyy-MM-dd HH:mm:ss.SSS";
+		}
+
+		return value != null ? (new SimpleDateFormat(dateFormat)).format(value) : "";
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java
new file mode 100644
index 0000000..a4cb62e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java
@@ -0,0 +1,175 @@
+package com.vci.ubcs.starter.web.util;
+
+
+import com.vci.ubcs.starter.web.toolmodel.DateConverter;
+import org.springframework.cglib.beans.BeanCopier;
+import org.springframework.cglib.core.Converter;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+public class BeanUtil {
+	private static final ConcurrentMap<String, BeanCopier> beanCopierMap = new ConcurrentHashMap();
+
+	public BeanUtil() {
+	}
+
+	public static BeanCopier getBeanCopier(Class<?> source, Class<?> target, boolean useConverter) {
+		String beanCopierKey = generateBeanKey(source, target);
+		if (beanCopierMap.containsKey(beanCopierKey)) {
+			return (BeanCopier)beanCopierMap.get(beanCopierKey);
+		} else {
+			BeanCopier beanCopier = BeanCopier.create(source, target, useConverter);
+			beanCopierMap.putIfAbsent(beanCopierKey, beanCopier);
+			return (BeanCopier)beanCopierMap.get(beanCopierKey);
+		}
+	}
+
+	public static String generateBeanKey(Class<?> source, Class<?> target) {
+		return source.getName() + "@" + target.getName();
+	}
+
+	public static void convert(Object source, Object target, boolean useConvert) {
+		if (source != null && target != null) {
+			BeanCopier beanCopier = getBeanCopier(source.getClass(), target.getClass(), useConvert);
+			beanCopier.copy(source, target, useConvert ? new DeepCopyConverter(target) : null);
+		}
+
+	}
+
+	public static void convert(Object source, Object target) {
+		convert(source, target, true);
+	}
+
+	public static class DeepCopyConverter implements Converter {
+		private Object target;
+
+		public DeepCopyConverter(Object target) {
+			this.target = target;
+		}
+
+		@Override
+		public Object convert(Object value, Class targetClazz, Object methodName) {
+			if (value instanceof List) {
+				List values = (List)value;
+				List retList = new ArrayList(values.size());
+				this.copyForCollection(values, retList, methodName);
+				return retList;
+			} else {
+				if (value instanceof Set) {
+					Set values = (Set)value;
+					Set retSet = new HashSet();
+					this.copyForCollection(values, retSet, methodName);
+				} else if (value instanceof Vector) {
+					Vector values = (Vector)value;
+					Vector retVector = new Vector();
+					this.copyForCollection(values, retVector, methodName);
+				} else if (value instanceof Map) {
+					Map values = (Map)value;
+					Map retMap = new HashMap();
+					Iterator var6 = values.keySet().iterator();
+
+					while(var6.hasNext()) {
+						Object key = var6.next();
+						Object mapValue = values.get(key);
+						String tempFieldName = methodName.toString().replace("set", "");
+						String fieldName = tempFieldName.substring(0, 1).toLowerCase() + tempFieldName.substring(1);
+						Class clazz = ClassUtil.getElementType(this.target.getClass(), fieldName);
+						Object targetAttr = null;
+
+						try {
+							targetAttr = clazz.newInstance();
+						} catch (Throwable var15) {
+						}
+
+						BeanUtil.convert(mapValue, targetAttr);
+						retMap.put(key, targetAttr);
+					}
+				} else if (!ClassUtil.isPrimitive(targetClazz)) {
+					Object targetAttr = null;
+
+					try {
+						targetAttr = targetClazz.newInstance();
+					} catch (Throwable var14) {
+					}
+
+					BeanUtil.convert(value, targetAttr);
+					return targetAttr;
+				}
+
+				if (value instanceof Boolean && targetClazz.equals(String.class)) {
+					return String.valueOf(value);
+				} else if (!(value instanceof String) || !targetClazz.equals(Boolean.class) && !targetClazz.equals(Boolean.TYPE)) {
+					if (value instanceof Date && targetClazz.equals(String.class)) {
+						return VciDateUtil.date2Str((Date)value, "yyyy-MM-dd HH:mm:ss.SSS");
+					} else if (value instanceof String && targetClazz.equals(Date.class)) {
+						DateConverter dateConverter = new DateConverter();
+						dateConverter.setAsText((String)value);
+						return dateConverter.getValue();
+					} else {
+						return value;
+					}
+				} else {
+					return "true".equalsIgnoreCase((String)value) ? true : false;
+				}
+			}
+		}
+
+		private void copyForCollection(Collection<?> sourceCollection, Collection targetCollection, Object methodName) {
+			Iterator var4 = sourceCollection.iterator();
+
+			while(true) {
+				while(var4.hasNext()) {
+					Object source = var4.next();
+					if (source instanceof Collection) {
+						List<Object> targetValues = new ArrayList();
+						this.copyForCollection((Collection)source, targetValues, methodName);
+						targetCollection.add(targetValues);
+					} else {
+						String tempFieldName;
+						String fieldName;
+						Class clazz;
+						Object targetAttr;
+						if (!(source instanceof Map)) {
+							tempFieldName = methodName.toString().replace("set", "");
+							fieldName = tempFieldName.substring(0, 1).toLowerCase() + tempFieldName.substring(1);
+							clazz = ClassUtil.getElementType(this.target.getClass(), fieldName);
+							targetAttr = null;
+
+							try {
+								targetAttr = clazz.newInstance();
+							} catch (Throwable var13) {
+							}
+
+							BeanUtil.convert(source, targetAttr);
+							targetCollection.add(targetAttr);
+						} else {
+							tempFieldName = methodName.toString().replace("set", "");
+							fieldName = tempFieldName.substring(0, 1).toLowerCase() + tempFieldName.substring(1);
+							clazz = ClassUtil.getElementType(this.target.getClass(), fieldName);
+							targetAttr = null;
+
+							try {
+								targetAttr = clazz.newInstance();
+							} catch (Throwable var14) {
+							}
+
+							Map map = (Map)source;
+							Iterator var11 = map.keySet().iterator();
+
+							while(var11.hasNext()) {
+								Object key = var11.next();
+								VciBaseUtil.setValueForField(key.toString(), targetAttr, VciBaseUtil.getStringValueFromObject(map.get(key)));
+							}
+
+							targetCollection.add(targetAttr);
+						}
+					}
+				}
+
+				return;
+			}
+		}
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..880ca54
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtilForVCI.java
@@ -0,0 +1,162 @@
+package com.vci.ubcs.starter.web.util;
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.CollectionUtils;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+public class BeanUtilForVCI {
+	private static Logger logger = LoggerFactory.getLogger(BeanUtilForVCI.class);
+
+	public BeanUtilForVCI() {
+	}
+
+	public static void copyPropertiesIgnoreCase(Object source, Object target) {
+		copyPropertiesIgnoreCase(source, target, false);
+	}
+
+	public static void copyPropertiesIgnoreCase(Object source, Object target, Map<String, String> fieldMap) {
+		copyPropertiesIgnoreCase(source, target, false, fieldMap);
+	}
+
+	public static void copyPropertiesIgnoreCase(Object source, Object target, boolean ignoreNull) {
+		copyPropertiesIgnoreCase(source, target, ignoreNull, (Map)null);
+	}
+
+	public static void copyDeclaredIgnoreCase(Object source, Object target) {
+		copyDeclaredIgnoreCase(source, target, false);
+	}
+
+	public static void copyDeclaredIgnoreCase(Object source, Object target, boolean ignoreNull) {
+		copyDeclaredIgnoreCase(source, target, ignoreNull, (Map)null);
+	}
+
+	public static void copyDeclaredIgnoreCase(Object source, Object target, boolean ignoreNull, Map<String, String> fieldMap) {
+		copyDeclaredIgnoreCase(source, target, ignoreNull, fieldMap, (Collection)null);
+	}
+
+	public static void copyDeclaredIgnoreCase(Object source, Object target, boolean ignoreNull, Map<String, String> fieldMap, Collection<String> ignoreField) {
+		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 = CacheFieldMap.getFieldMap(source.getClass());
+		Map<String, Field> targetMap = CacheFieldMap.getFieldMap(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, Map<String, Field> targetMap) {
+		if (fieldMap == null) {
+			fieldMap = new HashMap();
+		}
+
+		Map<String, String> finalFieldMap = fieldMap;
+		targetMap.values().forEach((it) -> {
+			boolean not = false;
+			if (ignoreField != null && ignoreField.contains(it.getName())) {
+				not = true;
+			}
+
+			if (!not) {
+				String itFieldName = it.getName().toLowerCase().replace("_", "");
+				itFieldName = (String) finalFieldMap.getOrDefault(itFieldName, itFieldName);
+				Field field = (Field)sourceMap.getOrDefault(itFieldName, (Field) null);
+				if (field != null) {
+					it.setAccessible(true);
+					field.setAccessible(true);
+
+					try {
+						String sourceClassName = field.getClass().getName();
+						String targetClassName = it.getClass().getName();
+						if ((sourceClassName.equalsIgnoreCase(Boolean.class.getName()) || sourceClassName.equalsIgnoreCase(Boolean.TYPE.getName())) && targetClassName.equalsIgnoreCase(String.class.getName()) || (targetClassName.equalsIgnoreCase(Boolean.class.getName()) || targetClassName.equalsIgnoreCase(Boolean.TYPE.getName())) && sourceClassName.equalsIgnoreCase(String.class.getName())) {
+							if (targetClassName.equalsIgnoreCase(String.class.getName())) {
+								it.set(target, String.valueOf((Boolean)field.get(source)));
+							} else {
+								it.set(target, Boolean.valueOf((String)field.get(source)));
+							}
+						} else if (!ignoreNull) {
+							it.set(target, field.get(source));
+						} else {
+							Object sourceValue = field.get(source);
+							if (sourceValue != null && StringUtils.isNotBlank(sourceValue.toString())) {
+								it.set(target, sourceValue);
+							}
+						}
+					} catch (IllegalAccessException var13) {
+						if (logger.isErrorEnabled()) {
+							logger.error("鎷疯礉灞炴�у嚭閿�" + var13);
+						}
+					}
+				}
+			}
+
+		});
+	}
+
+	public static void copyPropertiesIgnoreCase(Object source, Object target, boolean ignoreNull, Map<String, String> fieldMap) {
+		copyPropertiesIgnoreCase(source, target, ignoreNull, fieldMap, (Collection)null);
+	}
+
+	private static class CacheFieldMap {
+		private static Map<String, Map<String, Field>> cacheMap = new HashMap();
+		private static Map<String, Map<String, Field>> declaredCacheMap = new HashMap();
+
+		private CacheFieldMap() {
+		}
+
+		private static Map<String, Field> getFieldMap(Class clazz) {
+			Map<String, Field> result = (Map)cacheMap.get(clazz.getName());
+			if (result == null) {
+				Class var2 = CacheFieldMap.class;
+				synchronized(CacheFieldMap.class) {
+					if (result == null) {
+						Map<String, Field> fieldMap = new HashMap();
+						List<Field> allFields = VciBaseUtil.getAllFieldForObj(clazz);
+						if (!CollectionUtils.isEmpty(allFields)) {
+							allFields.stream().forEach((field) -> {
+								fieldMap.put(field.getName().toLowerCase().replace("_", ""), field);
+							});
+						}
+
+						cacheMap.put(clazz.getName(), fieldMap);
+						result = (Map)cacheMap.get(clazz.getName());
+					}
+				}
+			}
+
+			return result;
+		}
+
+		private static Map<String, Field> getDeclaredFieldMap(Class clazz) {
+			Map<String, Field> result = (Map)declaredCacheMap.get(clazz.getName());
+			if (result == null) {
+				Class var2 = CacheFieldMap.class;
+				synchronized(CacheFieldMap.class) {
+					if (result == null) {
+						Map<String, Field> fieldMap = new HashMap();
+						Field[] allFields = clazz.getDeclaredFields();
+						if (allFields != null && allFields.length > 0) {
+							Arrays.stream(allFields).forEach((field) -> {
+								fieldMap.put(field.getName().toLowerCase().replace("_", ""), field);
+							});
+						}
+
+						declaredCacheMap.put(clazz.getName(), fieldMap);
+						result = (Map)declaredCacheMap.get(clazz.getName());
+					}
+				}
+			}
+
+			return result;
+		}
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ClassUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ClassUtil.java
new file mode 100644
index 0000000..353cace
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ClassUtil.java
@@ -0,0 +1,50 @@
+package com.vci.ubcs.starter.web.util;
+
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ClassUtil {
+	private static final Map<Class<?>, Class<?>> primitiveMap = new HashMap(9);
+
+	public ClassUtil() {
+	}
+
+	public static boolean isPrimitive(Class<?> clazz) {
+		return primitiveMap.containsKey(clazz) ? true : clazz.isPrimitive();
+	}
+
+	public static Class<?> getElementType(Class<?> tartget, String fieldName) {
+		Class<?> elementTypeClass = null;
+
+		try {
+			Type type = VciBaseUtil.getFieldForObject(fieldName, tartget).getGenericType();
+			ParameterizedType t = (ParameterizedType)type;
+			String classStr = t.getActualTypeArguments()[0].toString().replace("class ", "");
+			if (classStr.contains("<")) {
+				classStr = classStr.substring(classStr.lastIndexOf("<") + 1, classStr.indexOf(">"));
+			}
+
+			elementTypeClass = Thread.currentThread().getContextClassLoader().loadClass(classStr);
+			return elementTypeClass;
+		} catch (SecurityException | ClassNotFoundException var6) {
+			throw new RuntimeException("get fieldName[" + fieldName + "] error", var6);
+		}
+	}
+
+	static {
+		primitiveMap.put(String.class, String.class);
+		primitiveMap.put(Boolean.class, Boolean.TYPE);
+		primitiveMap.put(Byte.class, Byte.TYPE);
+		primitiveMap.put(Character.class, Character.TYPE);
+		primitiveMap.put(Double.class, Double.TYPE);
+		primitiveMap.put(Float.class, Float.TYPE);
+		primitiveMap.put(Integer.class, Integer.TYPE);
+		primitiveMap.put(Long.class, Long.TYPE);
+		primitiveMap.put(Short.class, Short.TYPE);
+		primitiveMap.put(Date.class, Date.class);
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..e90522d
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ControllerUtil.java
@@ -0,0 +1,248 @@
+package com.vci.ubcs.starter.web.util;
+
+import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.core.tool.utils.StringUtil;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class ControllerUtil {
+	private static Logger logger = LoggerFactory.getLogger(ControllerUtil.class);
+	public static final Map<String, String> tempFileForDownloadMap = new ConcurrentHashMap();
+
+	public ControllerUtil() {
+	}
+
+	public static void writeFileToResponse(HttpServletResponse response, String fileName) throws FileNotFoundException, IOException {
+		writeFileToResponse(response, fileName, true);
+	}
+
+	public static void writeFileToResponse(HttpServletResponse response, String fileName, boolean deleteFile) throws FileNotFoundException, IOException {
+		writeFileToResponse(response, (String)fileName, (String)null, deleteFile);
+	}
+
+	public static void writeFileToResponse(HttpServletResponse response, String fileName, String showName, boolean deleteFile) throws FileNotFoundException, IOException {
+		File file = new File(fileName);
+		if (!file.exists()) {
+			throw new FileNotFoundException(fileName);
+		} else {
+			writeFileToResponse(response, file, showName, deleteFile);
+		}
+	}
+
+	public static void writeFileToResponse(HttpServletResponse response, File file) throws FileNotFoundException, IOException {
+		writeFileToResponse(response, file, true);
+	}
+
+	public static void writeFileToResponse(HttpServletResponse response, File file, boolean deleteFile) throws FileNotFoundException, IOException {
+		writeFileToResponse(response, (File)file, (String)null, deleteFile);
+	}
+
+	public static void writeFileToResponse(HttpServletResponse response, File file, String showName, boolean deleteFile) throws FileNotFoundException, IOException {
+		writeFileToResponse(response, file, showName, deleteFile, (String)null);
+	}
+
+	public static void writeFileToResponse(HttpServletResponse response, File file, String showName, boolean deleteFile, String contentType) throws FileNotFoundException, IOException {
+		VciBaseUtil.alertNotNull(new Object[]{file, "鏂囦欢瀵硅薄"});
+		if (!file.exists()) {
+			throw new FileNotFoundException(file.getName());
+		} else {
+			if (StringUtil.isBlank(showName)) {
+				showName = file.getName();
+			}
+
+			FileInputStream in = null;
+			boolean var11 = false;
+
+			File parentFile;
+			label96: {
+				try {
+					var11 = true;
+					in = new FileInputStream(file);
+					writeFileToResponse(response, in, showName, contentType);
+					var11 = false;
+					break label96;
+				} catch (IOException var12) {
+					if (logger.isErrorEnabled()) {
+						logger.error("鍐欏叆鏂囦欢鍒板搷搴旀祦鍑洪敊", var12);
+						var11 = false;
+					} else {
+						var11 = false;
+					}
+				} finally {
+					if (var11) {
+						IOUtils.closeQuietly(in);
+						if (deleteFile) {
+							File parentFile1 = file.getParentFile();
+							file.delete();
+							parentFile1.delete();
+						}
+
+					}
+				}
+
+				IOUtils.closeQuietly(in);
+				if (deleteFile) {
+					parentFile = file.getParentFile();
+					file.delete();
+					parentFile.delete();
+				}
+
+				return;
+			}
+
+			IOUtils.closeQuietly(in);
+			if (deleteFile) {
+				parentFile = file.getParentFile();
+				file.delete();
+				parentFile.delete();
+			}
+
+		}
+	}
+
+	public static void writeFileToResponse(HttpServletResponse response, InputStream ins, String showName) throws IOException {
+		writeFileToResponse(response, ins, showName, (String)null);
+	}
+
+	public static void writeFileToResponse(HttpServletResponse response, InputStream ins, String showName, String contentType) throws IOException {
+		if (StringUtil.isBlank(contentType)) {
+			contentType = "application/force-download";
+		}
+
+		if (StringUtil.isBlank(showName)) {
+			showName = "涓嬭浇鏂囦欢";
+		}
+
+		response.setContentType(contentType);
+
+		try {
+			String fileName = URLEncoder.encode(showName, "UTF8");
+			response.addHeader("Content-Disposition", "attachment; filename=" + fileName + ";filename*=utf-8''" + fileName);
+		} catch (Exception var12) {
+			if (logger.isErrorEnabled()) {
+				logger.error("璁剧疆鏂囦欢鐨勫悕绉板埌鍝嶅簲娴佺殑鏃跺�欏嚭閿�", var12);
+			}
+		}
+
+		response.setCharacterEncoding("UTF-8");
+		Cookie cookie = new Cookie("fileDownload", "true");
+		cookie.setPath("/");
+		response.addCookie(cookie);
+
+		try {
+			IOUtils.copy(ins, response.getOutputStream());
+		} catch (IOException var10) {
+			if (logger.isErrorEnabled()) {
+				logger.error("鍐欏叆鏂囦欢鍒板搷搴旀祦鍑洪敊", var10);
+			}
+
+			throw var10;
+		} finally {
+			IOUtils.closeQuietly(ins);
+		}
+
+	}
+
+	public static void writeDataToResponse(HttpServletResponse response, byte[] data, String contentType) throws IOException {
+		if (StringUtil.isBlank(contentType)) {
+			contentType = "application/force-download";
+		}
+
+		response.setContentType(contentType);
+		response.setCharacterEncoding("UTF-8");
+		Cookie cookie = new Cookie("fileDownload", "true");
+		cookie.setPath("/");
+		response.addCookie(cookie);
+
+		try {
+			response.getOutputStream().write(data);
+		} catch (IOException var5) {
+			if (logger.isErrorEnabled()) {
+				logger.error("鍐欏叆鏂囦欢鍒板搷搴旀祦鍑洪敊", var5);
+			}
+
+			throw var5;
+		}
+	}
+
+	public static void writeClasspathFileToResponse(HttpServletResponse response, String classPathFileName) throws FileNotFoundException, IOException {
+		writeClasspathFileToResponse(response, classPathFileName, (String)null);
+	}
+
+	public static void writeClasspathFileToResponse(HttpServletResponse response, String classPathFileName, String showName) throws FileNotFoundException, IOException {
+		InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(classPathFileName);
+		if (StringUtil.isBlank(showName)) {
+			showName = classPathFileName.contains("/") ? classPathFileName.substring(classPathFileName.lastIndexOf("/") + 1) : classPathFileName;
+		}
+
+		try {
+			writeFileToResponse(response, in, showName);
+		} catch (IOException var8) {
+			throw var8;
+		} finally {
+			IOUtils.closeQuietly(in);
+		}
+
+	}
+
+	public static String getClientInfo(HttpServletRequest request) {
+		String ip = request.getHeader("X-Forwarded-For");
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("Proxy-Client-IP");
+		}
+
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("WL-Proxy-Client-IP");
+		}
+
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("HTTP_CLIENT_IP");
+		}
+
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+		}
+
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getRemoteAddr();
+		}
+
+		if (ip == null || ip.length() == 0 || ip.indexOf("0:0:0:0:0:0:0:1") > -1) {
+			ip = "127.0.0.1";
+		}
+
+		return ip;
+	}
+
+	public static void setQueryTotal(HttpServletRequest request, boolean isQueryTotal) {
+		WebThreadLocalUtil.getNeedQueryTotalInThread().set(isQueryTotal ? "true" : "false");
+	}
+
+	public static String putErrorFile(String errorFile) {
+		String uuid = VciBaseUtil.getPk();
+		tempFileForDownloadMap.put(uuid, errorFile);
+		return uuid;
+	}
+
+	public static void downloadErrorFile(HttpServletResponse response, String uuid) throws IOException {
+		String errorFile = (String)tempFileForDownloadMap.getOrDefault(uuid, "");
+
+		try {
+			if (StringUtil.isNotBlank(errorFile)) {
+				writeFileToResponse(response, new File(errorFile), (String)null, true, "application/msexcel");
+			}
+		} finally {
+			tempFileForDownloadMap.remove(uuid);
+		}
+
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..e0b4b85
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/LangBaseUtil.java
@@ -0,0 +1,32 @@
+package com.vci.ubcs.starter.web.util;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+public class LangBaseUtil {
+	public LangBaseUtil() {
+	}
+
+	public static String getErrorMsg(Throwable e) {
+		if (e == null) {
+			return "鏈煡閿欒";
+		} else {
+			if (e.getClass() != null && e.getClass().getSuperclass() != null && (e.getClass().getSuperclass().equals(RuntimeException.class) || e.getClass().getSuperclass().getName().endsWith(".VciBaseException") || e.getClass().getName().endsWith(".VciBaseException"))) {
+				try {
+					Method errorMethod = e.getClass().getMethod("getErrorMsg");
+					if (errorMethod != null) {
+						return (String)errorMethod.invoke(e);
+					}
+				} catch (NoSuchMethodException var2) {
+					return e.getMessage();
+				} catch (IllegalAccessException var3) {
+					return e.getMessage();
+				} catch (InvocationTargetException var4) {
+					return e.getMessage();
+				}
+			}
+
+			return e.getMessage();
+		}
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..13ee0b7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/Lunar.java
@@ -0,0 +1,194 @@
+package com.vci.ubcs.starter.web.util;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.web.util;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+public class Lunar {
+	private int year;
+	private int month;
+	private int day;
+	private boolean leap;
+	static final String[] chineseNumber = new String[]{"涓�", "浜�", "涓�", "鍥�", "浜�", "鍏�", "涓�", "鍏�", "涔�", "鍗�", "鍗佷竴", "鍗佷簩"};
+	static SimpleDateFormat chineseDateFormat = new SimpleDateFormat("yyyy骞碝M鏈坉d鏃�");
+	static final long[] lunarInfo = new long[]{19416L, 19168L, 42352L, 21717L, 53856L, 55632L, 91476L, 22176L, 39632L, 21970L, 19168L, 42422L, 42192L, 53840L, 119381L, 46400L, 54944L, 44450L, 38320L, 84343L, 18800L, 42160L, 46261L, 27216L, 27968L, 109396L, 11104L, 38256L, 21234L, 18800L, 25958L, 54432L, 59984L, 28309L, 23248L, 11104L, 100067L, 37600L, 116951L, 51536L, 54432L, 120998L, 46416L, 22176L, 107956L, 9680L, 37584L, 53938L, 43344L, 46423L, 27808L, 46416L, 86869L, 19872L, 42448L, 83315L, 21200L, 43432L, 59728L, 27296L, 44710L, 43856L, 19296L, 43748L, 42352L, 21088L, 62051L, 55632L, 23383L, 22176L, 38608L, 19925L, 19152L, 42192L, 54484L, 53840L, 54616L, 46400L, 46496L, 103846L, 38320L, 18864L, 43380L, 42160L, 45690L, 27216L, 27968L, 44870L, 43872L, 38256L, 19189L, 18800L, 25776L, 29859L, 59984L, 27480L, 21952L, 43872L, 38613L, 37600L, 51552L, 55636L, 54432L, 55888L, 30034L, 22176L, 43959L, 9680L, 37584L, 51893L, 43344L, 46240L, 47780L, 44368L, 21977L, 19360L, 42416L, 86390L, 21168L, 43312L, 31060L, 27296L, 44368L, 23378L, 19296L, 42726L, 42208L, 53856L, 60005L, 54576L, 23200L, 30371L, 38608L, 19415L, 19152L, 42192L, 118966L, 53840L, 54560L, 56645L, 46496L, 22224L, 21938L, 18864L, 42359L, 42160L, 43600L, 111189L, 27936L, 44448L};
+
+	private static final int yearDays(int y) {
+		int sum = 348;
+
+		for(int i = 32768; i > 8; i >>= 1) {
+			if ((lunarInfo[y - 1900] & (long)i) != 0L) {
+				++sum;
+			}
+		}
+
+		return sum + leapDays(y);
+	}
+
+	private static final int leapDays(int y) {
+		if (leapMonth(y) != 0) {
+			return (lunarInfo[y - 1900] & 65536L) != 0L ? 30 : 29;
+		} else {
+			return 0;
+		}
+	}
+
+	private static final int leapMonth(int y) {
+		return (int)(lunarInfo[y - 1900] & 15L);
+	}
+
+	private static final int monthDays(int y, int m) {
+		return (lunarInfo[y - 1900] & (long)(65536 >> m)) == 0L ? 29 : 30;
+	}
+
+	public final String animalsYear() {
+		String[] Animals = new String[]{"榧�", "鐗�", "铏�", "鍏�", "榫�", "铔�", "椹�", "缇�", "鐚�", "楦�", "鐙�", "鐚�"};
+		return Animals[(this.year - 4) % 12];
+	}
+
+	private static final String cyclicalm(int num) {
+		String[] Gan = new String[]{"鐢�", "涔�", "涓�", "涓�", "鎴�", "宸�", "搴�", "杈�", "澹�", "鐧�"};
+		String[] Zhi = new String[]{"瀛�", "涓�", "瀵�", "鍗�", "杈�", "宸�", "鍗�", "鏈�", "鐢�", "閰�", "鎴�", "浜�"};
+		return Gan[num % 10] + Zhi[num % 12];
+	}
+
+	public final String cyclical() {
+		int num = this.year - 1900 + 36;
+		return cyclicalm(num);
+	}
+
+	public Lunar(Calendar cal) {
+		//int leapMonth = false;
+		Date baseDate = null;
+
+		try {
+			baseDate = chineseDateFormat.parse("1900骞�1鏈�31鏃�");
+		} catch (ParseException var12) {
+			var12.printStackTrace();
+		}
+
+		int offset = (int)((cal.getTime().getTime() - baseDate.getTime()) / 86400000L);
+		int dayCyl = offset + 40;
+		int monCyl = 14;
+		int daysOfYear = 0;
+
+		int iYear;
+		for(iYear = 1900; iYear < 2050 && offset > 0; ++iYear) {
+			daysOfYear = yearDays(iYear);
+			offset -= daysOfYear;
+			monCyl += 12;
+		}
+
+		if (offset < 0) {
+			offset += daysOfYear;
+			--iYear;
+			monCyl -= 12;
+		}
+
+		this.year = iYear;
+		int yearCyl = iYear - 1864;
+		int leapMonth = leapMonth(iYear);
+		this.leap = false;
+		int daysOfMonth = 0;
+
+		int iMonth;
+		for(iMonth = 1; iMonth < 13 && offset > 0; ++iMonth) {
+			if (leapMonth > 0 && iMonth == leapMonth + 1 && !this.leap) {
+				--iMonth;
+				this.leap = true;
+				daysOfMonth = leapDays(this.year);
+			} else {
+				daysOfMonth = monthDays(this.year, iMonth);
+			}
+
+			offset -= daysOfMonth;
+			if (this.leap && iMonth == leapMonth + 1) {
+				this.leap = false;
+			}
+
+			if (!this.leap) {
+				++monCyl;
+			}
+		}
+
+		if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) {
+			if (this.leap) {
+				this.leap = false;
+			} else {
+				this.leap = true;
+				--iMonth;
+				--monCyl;
+			}
+		}
+
+		if (offset < 0) {
+			offset += daysOfMonth;
+			--iMonth;
+			--monCyl;
+		}
+
+		this.month = iMonth;
+		this.day = offset + 1;
+	}
+
+	public static String getChinaDayString(int day) {
+		String[] chineseTen = new String[]{"鍒�", "鍗�", "寤�", "鍗�"};
+		int n = day % 10 == 0 ? 9 : day % 10 - 1;
+		if (day > 30) {
+			return "";
+		} else {
+			return day == 10 ? "鍒濆崄" : chineseTen[day / 10] + chineseNumber[n];
+		}
+	}
+
+	@Override
+	public String toString() {
+		String m = chineseNumber[this.month - 1];
+		if (m != null && m.trim().equals("涓�")) {
+			m = "姝�";
+		}
+
+		if (m != null && m.trim().equals("鍗佷竴")) {
+			m = "鍐�";
+		}
+
+		if (m != null && m.trim().equals("鍗佷簩")) {
+			m = "鑵�";
+		}
+
+		return this.year + this.cyclical() + this.animalsYear() + "骞�" + (this.leap ? "闂�" : "") + m + "鏈�" + getChinaDayString(this.day);
+	}
+
+	public String getDate() {
+		String m = chineseNumber[this.month - 1];
+		if (m != null && m.trim().equals("涓�")) {
+			m = "姝�";
+		}
+
+		if (m != null && m.trim().equals("鍗佷竴")) {
+			m = "鍐�";
+		}
+
+		if (m != null && m.trim().equals("鍗佷簩")) {
+			m = "鑵�";
+		}
+
+		return this.animalsYear() + "骞�" + (this.leap ? "闂�" : "") + m + "鏈�" + getChinaDayString(this.day);
+	}
+
+	public static void main(String[] args) throws ParseException {
+		Calendar today = Calendar.getInstance();
+		today.setTime(chineseDateFormat.parse("2013骞�2鏈�1鏃�"));
+		Lunar lunar = new Lunar(today);
+		System.out.println(lunar.toString());
+		System.out.println("鍖椾含鏃堕棿锛�" + chineseDateFormat.format(today.getTime()) + "銆�鍐滃巻" + lunar);
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..383d252
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/MessageUtils.java
@@ -0,0 +1,37 @@
+package com.vci.ubcs.starter.web.util;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.web.util;
+
+import org.springframework.context.MessageSource;
+import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.stereotype.Component;
+
+@Component
+public class MessageUtils {
+	private static MessageSource messageSource;
+
+	public MessageUtils(MessageSource messageSource) {
+		MessageUtils.messageSource = messageSource;
+	}
+
+	public static String get(String msgKey) {
+		try {
+			return messageSource.getMessage(msgKey, (Object[])null, LocaleContextHolder.getLocale());
+		} catch (Throwable var2) {
+			return msgKey;
+		}
+	}
+
+	public static String get(String msgKey, Object[] objects) {
+		try {
+			return messageSource.getMessage(msgKey, objects, LocaleContextHolder.getLocale());
+		} catch (Throwable var3) {
+			return msgKey;
+		}
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..a3d65cc
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -0,0 +1,1228 @@
+package com.vci.ubcs.starter.web.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.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
+import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
+import com.vci.ubcs.starter.web.toolmodel.DateConverter;
+import com.vci.ubcs.starter.web.wrapper.VciQueryWrapperForDO;
+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 boolean getBoolean(String s) {
+		return BooleanEnum.TRUE.getValue().equals(s);
+	}
+
+	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 String getTableName(String btmname) {
+		return (VciQueryWrapperForDO.USER_TABLE_COMPATIBILITY ? "pl_code_" : "vcibt_") + btmname.trim().toLowerCase();
+	}
+
+	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 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);
+		}
+	}
+
+	public static SessionInfo getCurrentUserSessionInfoNotException() {
+		return (SessionInfo) WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get();
+	}
+
+
+	public static <T> Collection<Collection<T>> switchCollectionForOracleIn(Collection<T> list) {
+		return switchCollectionForOracleIn(list, 500);
+	}
+
+	public static <T> Collection<Collection<T>> switchCollectionForOracleIn(Collection<T> collection, int preSize) {
+		Collection<Collection<T>> listHasList = new ArrayList();
+		if (collection == null) {
+			return listHasList;
+		} else {
+			List<T> newList = new ArrayList();
+			Iterator var4 = collection.iterator();
+
+			while(var4.hasNext()) {
+				Object obj = var4.next();
+				newList.add((T) obj);
+			}
+
+			int muti = 1;
+			int i;
+			if (newList.size() > preSize) {
+				i = newList.size() % preSize;
+				muti = (newList.size() - i) / preSize + (i == 0 ? 0 : 1);
+			}
+
+			for(i = 0; i < muti; ++i) {
+				int start = i * preSize;
+				int end = start + preSize;
+				if (i == muti - 1 || end > newList.size()) {
+					end = newList.size();
+				}
+
+				List subList = newList.subList(start, end);
+				listHasList.add(subList);
+			}
+
+			return listHasList;
+		}
+	}
+	public static short getShort(String s) {
+//		short i = false;
+		if (s == null) {
+			return 0;
+		} else {
+			try {
+				short i = Short.parseShort(s);
+				return i;
+			} catch (Exception var3) {
+				return 0;
+			}
+		}
+	}
+
+	public static void setValueForField(Field field, Object obj, String value) {
+		try {
+			if (field != null && StringUtils.isNotBlank(value)) {
+				field.setAccessible(true);
+				Method setMethod = getSetmethod(field.getDeclaringClass(), field.getName());
+				Class type = field.getType();
+				Object valueObj = null;
+				if (!type.equals(Integer.TYPE) && !type.equals(Integer.class)) {
+					if (!type.equals(Float.TYPE) && !type.equals(Float.class)) {
+						if (!type.equals(Long.TYPE) && !type.equals(Long.class)) {
+							if (!type.equals(Double.class) && !type.equals(Double.TYPE)) {
+								if (type.equals(Date.class)) {
+									DateConverter dateConverter = new DateConverter();
+									dateConverter.setAsText(value);
+									valueObj = dateConverter.getValue();
+								} else if (type.equals(String.class)) {
+									valueObj = value;
+								} else {
+									valueObj = value;
+									if (log.isErrorEnabled()) {
+										log.error("涓嶆敮鎸佺殑绫诲瀷" + type.toString());
+									}
+								}
+							} else {
+								valueObj = getDouble(value);
+							}
+						} else {
+							valueObj = getLong(value);
+						}
+					} else {
+						valueObj = getFloat(value);
+					}
+				} else {
+					valueObj = getInt(value);
+				}
+
+				if (setMethod != null) {
+					setMethod.invoke(obj, valueObj);
+				} else {
+					field.set(obj, valueObj);
+				}
+			}
+		} catch (Throwable var7) {
+			if (log.isErrorEnabled()) {
+				log.error("璁剧疆灞炴�х殑鍊煎嚭閿欎簡閿欒", var7);
+			}
+		}
+
+	}
+
+	public static void setValueForField(String fieldName, Object obj, String value) {
+		try {
+			Field field = getFieldForObject(fieldName, obj);
+			if (field != null) {
+				setValueForField(field, obj, value);
+			}
+		} catch (Exception var4) {
+			if (log.isErrorEnabled()) {
+				log.error("璁剧疆灞炴�х殑鍊煎嚭閿欎簡閿欒", var4);
+			}
+		}
+
+	}
+
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..72d278d
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciDateUtil.java
@@ -0,0 +1,638 @@
+package com.vci.ubcs.starter.web.util;
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+public class VciDateUtil {
+	private static final String DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
+	public static final String DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
+	public static final String DateTimeFormatStr = "yyyyMMddHHmmss";
+	public static final String DateTimeMillFormatStr = "yyyyMMddHHmmssSSS";
+	public static final String DateTimeMillFormat = "yyyy-MM-dd HH:mm:ss.SSS";
+	public static final String DateFormat = "yyyy-MM-dd";
+	public static final String TimeFormat = "HH:mm:ss";
+
+	private VciDateUtil() {
+	}
+
+	public static Date str2Date(String str, String format) throws Exception {
+		if (null != str && !"".equals(str) && !str.equals("null")) {
+			if (null == format || "".equals(format) || format.equals("null")) {
+				format = "yyyy-MM-dd HH:mm:ss.SSS";
+			}
+
+			SimpleDateFormat sdf = new SimpleDateFormat(format);
+			Date date = null;
+
+			try {
+				date = sdf.parse(str);
+				return date;
+			} catch (ParseException var5) {
+				throw new Exception(var5);
+			}
+		} else {
+			return null;
+		}
+	}
+
+	public static Date getCurrentMonday() {
+		return getCurrentWeekDay(2);
+	}
+
+	public static Date getCurrentWeekDay(int dayOfWeek) {
+		if (dayOfWeek > 7) {
+			dayOfWeek = 7;
+		}
+
+		if (dayOfWeek < 1) {
+			dayOfWeek = 1;
+		}
+
+		Date date = new Date();
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		calendar.set(7, dayOfWeek);
+		calendar.set(11, 0);
+		calendar.set(12, 0);
+		calendar.set(13, 0);
+		calendar.set(14, 0);
+		return calendar.getTime();
+	}
+
+	public static Date getCurrentFriday() {
+		return getCurrentWeekDay(6);
+	}
+
+	public static String date2Str(Date date, String format) {
+		if (null == date) {
+			return null;
+		} else {
+			if (format == null || format.trim().length() == 0) {
+				format = "yyyy-MM-dd HH:mm:ss.SSS";
+			}
+
+			SimpleDateFormat sdf = new SimpleDateFormat(format);
+			return sdf.format(date);
+		}
+	}
+
+	public static String timestamp2Str(Timestamp time) {
+		Date date = null;
+		if (null == time) {
+			return null;
+		} else {
+			if (null != time) {
+				date = new Date(time.getTime());
+			}
+
+			return date2Str(date, "yyyy-MM-dd HH:mm:ss.SSS");
+		}
+	}
+
+	public static Timestamp str2Timestamp(String str) throws Exception {
+		if (str != null && str.trim().length() != 0) {
+			Date date = str2Date(str, "yyyy-MM-dd HH:mm:ss.SSS");
+			return new Timestamp(date.getTime());
+		} else {
+			return null;
+		}
+	}
+
+	public static String compareDate(String date, String date1) throws Exception {
+		if (date != null && date.trim().length() != 0 && date1 != null && date1.trim().length() != 0) {
+			try {
+				long time = str2Date(date, "yyyy-MM-dd").getTime();
+				long time1 = str2Date(date1, "yyyy-MM-dd").getTime();
+				if (time == time1) {
+					return "=";
+				} else if (time < time1) {
+					return "<";
+				} else {
+					return time > time1 ? ">" : "";
+				}
+			} catch (Exception var6) {
+				throw var6;
+			}
+		} else {
+			throw new Exception("浼犲叆compareDate鐨勫弬鏁颁负绌�");
+		}
+	}
+
+	public static String compareDate(Date date, Date date1) {
+		if (date != null && date1 != null) {
+			long time = date.getTime();
+			long time1 = date1.getTime();
+			if (time == time1) {
+				return "=";
+			} else if (time < time1) {
+				return "<";
+			} else {
+				return time > time1 ? ">" : "";
+			}
+		} else {
+			return "";
+		}
+	}
+
+	public static String dateTimeAddMinutes(String date, int minute) throws Exception {
+		String ret = "";
+		if (date == null || date.equals("")) {
+			date = date2Str(getNow(), "yyyy-MM-dd HH:mm:ss.SSS");
+		}
+
+		if (minute == 0) {
+			return date;
+		} else {
+			Date d = str2Date(date, "yyyy-MM-dd HH:mm:ss");
+			Calendar cal = Calendar.getInstance();
+			cal.setTime(d);
+			cal.add(12, minute);
+			return date2Str(cal.getTime(), "yyyy-MM-dd HH:mm:ss");
+		}
+	}
+
+	public static Date getDateAddDay(String date, int dayCount) throws Exception {
+		if (date != null && !date.equals("") && !date.equals("null")) {
+			if (dayCount == 0) {
+				return str2Date(date, "yyyy-MM-dd");
+			} else {
+				Date d = str2Date(date, "yyyy-MM-dd");
+				Calendar cal = Calendar.getInstance();
+				cal.setTime(d);
+				cal.add(5, dayCount);
+				return cal.getTime();
+			}
+		} else {
+			return getNow();
+		}
+	}
+
+	public static Date getDateAddDay(Date date, int dayCount) {
+		if (dayCount == 0) {
+			return date;
+		} else {
+			Calendar cal = Calendar.getInstance();
+			cal.setTime(date);
+			cal.add(5, dayCount);
+			return cal.getTime();
+		}
+	}
+
+	public static long getDaySub(String beginDateStr, String endDateStr) {
+		if (beginDateStr != null && !beginDateStr.trim().equals("") && endDateStr != null && !endDateStr.trim().equals("")) {
+			long day = 0L;
+			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+
+			try {
+				Date beginDate = format.parse(beginDateStr);
+				Date endDate = format.parse(endDateStr);
+				day = (endDate.getTime() - beginDate.getTime()) / 86400000L;
+			} catch (ParseException var8) {
+				var8.printStackTrace();
+			}
+
+			return day;
+		} else {
+			return 0L;
+		}
+	}
+
+	public static long getDaySub(Date date, Date date1) {
+		return (date.getTime() - date1.getTime()) / 86400000L;
+	}
+
+	public static Date addOrSubDate(Date d, int addDayType, int addCount) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(d);
+		cal.add(addDayType, addCount);
+		return cal.getTime();
+	}
+
+	public static Date getNow() {
+		return new Date();
+	}
+
+	public static String getNowString() {
+		return getNowString("yyyy-MM-dd HH:mm:ss.SSS");
+	}
+
+	public static String getNowString(String simpleDateFormat) {
+		Date currentTime = new Date();
+		SimpleDateFormat formatter = new SimpleDateFormat(simpleDateFormat);
+		return formatter.format(currentTime);
+	}
+
+	public static Date getNow(String simpleDateFormat) throws Exception {
+		return str2Date(getNowString(simpleDateFormat), simpleDateFormat);
+	}
+
+	public static String getCountdown(String oldtime, String newTime) {
+		if (oldtime != null && !oldtime.trim().equals("") && newTime != null && !newTime.equals("")) {
+			try {
+				Date date1 = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse(oldtime);
+				Date date2 = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse(newTime);
+				long l = date1.getTime() - date2.getTime() > 0L ? date1.getTime() - date2.getTime() : date2.getTime() - date1.getTime();
+				long d = 0L;
+				long yushu = l;
+				long h = 0L;
+				long m = 0L;
+				if (l > 86400000L) {
+					yushu = l % 86400000L;
+					d = (l - yushu) / 86400000L;
+				}
+
+				if (yushu > 3600000L) {
+					h = (yushu - yushu % 3600000L) / 3600000L;
+					yushu %= 3600000L;
+				}
+
+				if (yushu > 60000L) {
+					m = (yushu - yushu % 60000L) / 60000L;
+				}
+
+				return date1.getTime() - date2.getTime() < 0L ? "宸茬粡瓒呮湡" + d + "澶�" + h + "灏忔椂" + m + "鍒�" : "杩樺墿涓�" + d + "澶�" + h + "灏忔椂" + m + "鍒�";
+			} catch (Exception var14) {
+				return "";
+			}
+		} else {
+			return "";
+		}
+	}
+
+	public static long getDateDiffer(String oldTime, String newTime) {
+		if (oldTime != null && !oldTime.trim().equals("") && newTime != null && !newTime.equals("")) {
+			try {
+				Date date1 = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse(oldTime);
+				Date date2 = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse(newTime);
+				return date1.getTime() - date2.getTime();
+			} catch (Exception var4) {
+				return 0L;
+			}
+		} else {
+			return 0L;
+		}
+	}
+
+	public static int getWeeks(int year) {
+		if (year == 0) {
+			return year;
+		} else {
+			//int week = false;
+			int days = 365;
+			if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
+				days = 366;
+			}
+
+			int week = days / 7;
+			return week;
+		}
+	}
+
+	public static int getWeekOnDate(Date date) {
+		GregorianCalendar g = new GregorianCalendar();
+		g.setTime(date);
+		return isSunday(date) ? g.get(3) - 1 : g.get(3);
+	}
+
+	public static Calendar getCalendarFromWeek(String year, int week) throws Exception {
+		Date newDate = str2Date(year + "-01-01", "yyyy-MM-dd");
+		Calendar caleNew = Calendar.getInstance();
+		caleNew.setTime(newDate);
+		caleNew.add(3, week - 1);
+		return caleNew;
+	}
+
+	public static String[] getDaysInWeek(int year, int week) {
+		String[] thisWeek = new String[7];
+
+		try {
+			GregorianCalendar gc = (GregorianCalendar)getCalendarFromWeek(year + "-01-01", week);
+
+			for(int i = 0; i < 7; ++i) {
+				Calendar myCale = Calendar.getInstance();
+				myCale.setTime(gc.getTime());
+				myCale.set(5, gc.get(5) - gc.get(7) + i + 2);
+				thisWeek[i] = date2Str(myCale.getTime(), "yyyy-MM-dd");
+			}
+		} catch (Exception var6) {
+			System.out.println(var6.getMessage());
+		}
+
+		return thisWeek;
+	}
+
+	public static boolean isSunday() {
+		return isSunday(new Date());
+	}
+
+	public static boolean isSunday(Date date) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		int week = calendar.get(7) - 1;
+		return week == 0;
+	}
+
+	public static boolean isWeekend(Date date) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		int week = calendar.get(7) - 1;
+		return week == 0 || week == 1;
+	}
+
+	public static boolean isFriday(Date date) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		int week = calendar.get(7) - 1;
+		return week == 5;
+	}
+
+	public static boolean isMouthEnd(Date date) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		int dayOfMonth = calendar.get(5);
+		int endMonth = calendar.getActualMaximum(5);
+		return endMonth == dayOfMonth;
+	}
+
+	public static boolean isSeasonEnd(Date date) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		int y = calendar.get(2) + 1;
+		int d = calendar.get(5);
+		if (y == 3 && d == 31) {
+			return true;
+		} else if (y == 6 && d == 30) {
+			return true;
+		} else if (y == 9 && d == 30) {
+			return true;
+		} else {
+			return y == 12 && d == 31;
+		}
+	}
+
+	public static boolean isYearEnd(Date date) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		int y = calendar.get(2) + 1;
+		int d = calendar.get(5);
+		return y == 12 && d == 31;
+	}
+
+	public static Long getProcessedTime(Date newDate, Date startDate) {
+		try {
+			Long p = newDate.getTime() - startDate.getTime();
+			return p;
+		} catch (Exception var3) {
+			return 0L;
+		}
+	}
+
+	public static String getProcessedTime(Date startDate) {
+		return getProcessedTime(new Date(), startDate) + "ms";
+	}
+
+	public static String getCurrentYear() {
+		Calendar c = Calendar.getInstance();
+		return String.valueOf(c.get(1) + 1900);
+	}
+
+	public static String getCurrentYearStart() {
+		return getCurrentYear() + "-01-01 00:00:00";
+	}
+
+	public static String getCurrentYearEnd() {
+		return getCurrentYear() + "-12-31 23:59:59";
+	}
+
+	public static String getCurrentQuarter() {
+		String currentMouth = getCurrentMouth();
+		int currentMouthInt = getInt(currentMouth);
+		if (currentMouthInt > 0 && currentMouthInt <= 3) {
+			return "1";
+		} else if (currentMouthInt > 3 && currentMouthInt <= 6) {
+			return "2";
+		} else {
+			return currentMouthInt > 6 && currentMouthInt <= 9 ? "3" : "4";
+		}
+	}
+
+	private static int getInt(String s) {
+		try {
+			return Integer.valueOf(s);
+		} catch (Exception var2) {
+			return 0;
+		}
+	}
+
+	public static String getCurrentQuarterStart() {
+		String currentQuarter = getCurrentQuarter();
+		if ("1".equalsIgnoreCase(currentQuarter)) {
+			return getCurrentYearStart();
+		} else if ("2".equalsIgnoreCase(currentQuarter)) {
+			return getCurrentYear() + "-04-01 00:00:00";
+		} else {
+			return "3".equalsIgnoreCase(currentQuarter) ? getCurrentYear() + "-07-01 00:00:00" : getCurrentYear() + "-10-01 00:00:00";
+		}
+	}
+
+	public static String getCurrentQuarterEnd() {
+		String currentQuarter = getCurrentQuarter();
+		if ("1".equalsIgnoreCase(currentQuarter)) {
+			return getCurrentYear() + "-03-31 23:59:59";
+		} else if ("2".equalsIgnoreCase(currentQuarter)) {
+			return getCurrentYear() + "-06-30 23:59:59";
+		} else {
+			return "3".equalsIgnoreCase(currentQuarter) ? getCurrentYear() + "-09-30 23:59:59" : getCurrentYear() + "-12-31 23:59:59";
+		}
+	}
+
+	public static String getCurrentMouth() {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(getNow());
+		int m = cal.get(2);
+		return m < 10 ? "0" + String.valueOf(m) : String.valueOf(m);
+	}
+
+	public static String getCurrentMouthStart() {
+		String currentMouth = getCurrentMouth();
+		return getCurrentYear() + "-" + currentMouth + "-01 00:00:00";
+	}
+
+	public static String getCurrentMouthEnd() {
+		String currentMouth = getCurrentMouth();
+		int currentMouthInt = getInt(currentMouth);
+		if (currentMouthInt != 1 && currentMouthInt != 3 && currentMouthInt != 5 && currentMouthInt != 7 && currentMouthInt != 8 && currentMouthInt != 10 && currentMouthInt != 12) {
+			if (currentMouthInt == 2) {
+				return isLeapYear(getInt(getCurrentYear())) ? getCurrentYear() + "-" + currentMouth + "-29 23:59:59" : getCurrentYear() + "-" + currentMouth + "-28 23:59:59";
+			} else {
+				return getCurrentYear() + "-" + currentMouth + "-30 23:59:59";
+			}
+		} else {
+			return getCurrentYear() + "-" + currentMouth + "-31 23:59:59";
+		}
+	}
+
+	public static boolean isLeapYear(int year) {
+		return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
+	}
+
+	public static String getCurrentDay() {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(getNow());
+		int day = cal.get(5);
+		return day < 10 ? "0" + String.valueOf(day) : String.valueOf(day);
+	}
+
+	public static String getCurrentDayStart() {
+		return LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+	}
+
+	public static String getCurrentDayEnd() {
+		return LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MAX).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+	}
+
+	public static List<Date> getDateInRange(Date dBegin, Date dEnd) {
+		List lDate = new ArrayList();
+		lDate.add(dBegin);
+		Calendar calBegin = Calendar.getInstance();
+		calBegin.setTime(dBegin);
+		Calendar calEnd = Calendar.getInstance();
+		calEnd.setTime(dEnd);
+
+		while(dEnd.after(calBegin.getTime())) {
+			calBegin.add(5, 1);
+			lDate.add(calBegin.getTime());
+		}
+
+		return lDate;
+	}
+
+	public static Date getDateFromStringForVci(String value) {
+		Date d = null;
+		if (StringUtils.isNotBlank(value)) {
+			try {
+				if (value.indexOf("-") > -1 && value.indexOf(".") > -1 && value.indexOf(" ") > -1 && value.substring(value.lastIndexOf(".") + 1).length() >= 9) {
+					String ymd = value.substring(0, value.indexOf("."));
+					value = value.substring(value.indexOf(".") + 1);
+					if (value.indexOf(".") > -1) {
+						String hms = value.substring(0, value.lastIndexOf("."));
+						String nano = value.substring(value.lastIndexOf(".") + 1).trim();
+						if (nano.length() > 3) {
+							nano = nano.substring(0, 3);
+						}
+
+						hms = hms.replace(".", ":").replace(" ", "");
+						Date tempDate = str2Date(ymd + " " + hms, "yyyy-M-d h:m:s");
+						if (tempDate != null) {
+							d = str2Date(date2Str(tempDate, "yyyy-MM-dd HH:mm:ss") + "." + nano, "yyyy-MM-dd HH:mm:ss.SSS");
+						}
+					}
+				} else if (VciBaseUtil.isNumber(value)) {
+					d = new Date();
+
+					try {
+						d = str2Date(value, "yyyyMMddHHmmssSSS");
+					} catch (Exception var8) {
+						if (value.length() != 14) {
+							d.setTime(VciBaseUtil.getLong(value));
+						} else {
+							try {
+								d = str2Date(value, "yyyyMMddHHmmss");
+								Calendar cal = Calendar.getInstance();
+								cal.setTime(d);
+								if (cal.get(1) < 1900) {
+									d.setTime(VciBaseUtil.getLong(value));
+								}
+							} catch (Exception var7) {
+								d.setTime(VciBaseUtil.getLong(value));
+							}
+						}
+					}
+				} else {
+					d = str2Date(value, "yyyy-MM-dd HH:mm:ss.SSS");
+				}
+			} catch (Exception var9) {
+				try {
+					d = str2Date(value, "yyyy-MM-dd HH:mm:ss.SSS");
+				} catch (Exception var6) {
+				}
+			}
+		}
+
+		return d;
+	}
+
+	public static Date readText2Date(String text) {
+		if (VciBaseUtil.isNullOrNullString(text)) {
+			return null;
+		} else {
+			SimpleDateFormat dateFormat = null;
+			int exactDateLength = 0;
+			if (text.trim().indexOf("/") > -1 && text.trim().length() == 19) {
+				exactDateLength = 19;
+				dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+			} else if (text.trim().indexOf("/") > -1 && text.trim().length() == 17) {
+				exactDateLength = 17;
+				dateFormat = new SimpleDateFormat("yy/MM/dd HH:mm:ss");
+			} else if (text.trim().indexOf("/") > -1 && text.trim().length() == 8) {
+				exactDateLength = 8;
+				dateFormat = new SimpleDateFormat("yy/MM/dd");
+			} else if (text.trim().indexOf("-") > -1 && text.trim().length() >= 19) {
+				if (text.trim().length() == 19) {
+					exactDateLength = 19;
+					dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+				} else if (text.trim().length() == 23) {
+					exactDateLength = 23;
+					dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+				}
+			} else if (text.trim().indexOf("-") > -1 && text.trim().length() == 17) {
+				exactDateLength = 17;
+				dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
+			} else if (text.trim().indexOf("-") > -1 && text.trim().length() == 8) {
+				exactDateLength = 8;
+				dateFormat = new SimpleDateFormat("yy-MM-dd");
+			} else {
+				exactDateLength = 19;
+				dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+			}
+
+			if (text != null && exactDateLength >= 0 && text.length() != exactDateLength) {
+				throw new IllegalArgumentException("涓嶈兘鍒濆鍖栨椂闂达紝鍥犱负鍐呭涓嶅埌" + exactDateLength + "闀垮害");
+			} else {
+				try {
+					return str2Date(date2Str(dateFormat.parse(text), "yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd HH:mm:ss.SSS");
+				} catch (ParseException var4) {
+					throw new IllegalArgumentException("涓嶈兘鏍煎紡鍖栨棩鏈�: " + var4.getMessage(), var4);
+				} catch (Exception var5) {
+					throw new IllegalArgumentException("涓嶈兘鏍煎紡鍖栨棩鏈�: " + var5.getMessage(), var5);
+				}
+			}
+		}
+	}
+
+	public static String getChinaDate(String d) throws Exception {
+		Date s = str2Date(d, "yyyy-MM-dd");
+		SimpleDateFormat chineseDateFormat = new SimpleDateFormat("yyyy骞碝M鏈坉d鏃�");
+		Calendar today = Calendar.getInstance();
+
+		try {
+			today.setTime(chineseDateFormat.parse(date2Str(s, "yyyy骞碝M鏈坉d鏃�")));
+		} catch (ParseException var5) {
+			throw new Exception(var5);
+		}
+
+		Lunar lunar = new Lunar(today);
+		return lunar.getDate();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..3d42b61
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebThreadLocalUtil.java
@@ -0,0 +1,35 @@
+package com.vci.ubcs.starter.web.util;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.web.util;
+
+
+import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
+
+public class WebThreadLocalUtil {
+	private static ThreadLocal<SessionInfo> currentUserSessionInfoInThread = new ThreadLocal();
+	private static ThreadLocal<String> needQueryTotalInThread = new ThreadLocal();
+
+	public WebThreadLocalUtil() {
+	}
+
+	public static ThreadLocal<SessionInfo> getCurrentUserSessionInfoInThread() {
+		return currentUserSessionInfoInThread;
+	}
+
+	public static void setCurrentUserSessionInfoInThread(ThreadLocal<SessionInfo> currentUserSessionInfoInThread) {
+		WebThreadLocalUtil.currentUserSessionInfoInThread = currentUserSessionInfoInThread;
+	}
+
+	public static ThreadLocal<String> getNeedQueryTotalInThread() {
+		return needQueryTotalInThread;
+	}
+
+	public static void setNeedQueryTotalInThread(ThreadLocal<String> needQueryTotalInThread) {
+		WebThreadLocalUtil.needQueryTotalInThread = needQueryTotalInThread;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/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
new file mode 100644
index 0000000..824a381
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebUtil.java
@@ -0,0 +1,712 @@
+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.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.*;
+import java.math.BigDecimal;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 閫氱敤宸ュ叿绫�
+ * @author weidy
+ * @date 2021-2-13
+ */
+@Component
+public  class WebUtil extends VciBaseUtil {
+
+	/**
+	 * 鍏ㄩ儴鏍囪锛屽父鐢ㄨ鏍戝舰灞曠ず鏃�
+	 */
+	public static final String ALL = "${all}";
+
+	/**
+	 * 鏄惁鎸佷箙鍖�
+	 */
+	private static ThreadLocal<String> needPersistenceInThread = new ThreadLocal<>();
+	/**
+	 * 鏃ュ織瀵硅薄
+	 */
+	private static Logger logger = LoggerFactory.getLogger(WebUtil.class);
+
+	/**
+	 * json瀛楃涓茶浆涓哄璞�
+	 * @param jsonString json鐨勫瓧绗︿覆
+	 * @param beanClass bean鐨勭被
+	 * @return bean
+	 */
+	public static <T> T jsonString2JavaBean(String jsonString,Class<T> beanClass){
+		return (T)JSONObject.parseObject(jsonString,  beanClass);
+	}
+
+	/**
+	 * 浠巎son瀛楃涓蹭腑鑾峰彇绗竴涓璞�
+	 * @param jsonString json鐨勫瓧绗︿覆
+	 * @param beanClass Bean鐨勭被
+	 * @return 浠庡垪琛ㄩ噷鑾峰彇绗竴涓璞�
+	 */
+	public static <T> T getFirstObjectFromJson(String jsonString,Class<T> beanClass){
+		if(!isNull(jsonString)) {
+			return JSONObject.parseArray(jsonString, beanClass).get(0);
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * 鑾峰彇sessionInfo瀵硅薄
+	 * @return 鑾峰彇褰撳墠鐢ㄦ埛鐨勪俊鎭�
+	 */
+	public static SessionInfo getSessionInfo(){
+		try{
+			return getCurrentUserSessionInfoNotException();
+		}catch(Exception e){
+			return null;
+		}
+	}
+
+	/**
+	 * 鑾峰彇褰撳墠绾跨▼涓殑鐢ㄦ埛瀵硅薄
+	 * @return 褰撳墠鐢ㄦ埛淇℃伅
+	 * @throws VciBaseException 娌℃湁鐧诲綍浼氭姏鍑哄紓甯�
+	 */
+	public static SessionInfo getCurrentUserSessionInfo() throws VciBaseException {
+		SessionInfo si= getCurrentUserSessionInfoNotException();
+		if(si==null){
+			throw new VciBaseException("noLogin",new String[]{"娌℃湁褰撳墠鐢ㄦ埛淇℃伅"});
+		}
+		return si;
+	}
+
+	/**
+	 * 鑾峰彇褰撳墠绾跨▼涓殑鐢ㄦ埛瀵硅薄
+	 * @return 鐢ㄦ埛瀵硅薄锛屼絾鏄笉鎶涘嚭寮傚父
+	 */
+	public static SessionInfo getCurrentUserSessionInfoNotException() {
+		return WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get();
+	}
+
+	/**
+	 * 璁剧疆鐢ㄦ埛鐨勪細璇濅俊鎭璞�
+	 * @param sessionInfo 浼氳瘽淇℃伅
+	 */
+	public static synchronized void setSessionInfo(SessionInfo sessionInfo){
+		WebThreadLocalUtil.getCurrentUserSessionInfoInThread().set(sessionInfo);
+	}
+
+	/**
+	 * 鏄惁璁剧疆浜哻orba闇�瑕佷娇鐢ㄧ殑涓婁笅鏂囦俊鎭紝鍙拡瀵箇ebService鐨�
+	 */
+	private static volatile boolean isSetContext = false;
+
+	/**
+	 * 鑾峰彇IP鍦板潃锛岄�氳繃request
+	 * @param request 璇锋眰鐨勫璞�
+	 * @return ip鍦板潃
+	 */
+	public static String getClientInfo(HttpServletRequest request){
+		String ip = request.getHeader("X-Forwarded-For");
+		if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("Proxy-Client-IP");
+		}
+		if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("WL-Proxy-Client-IP");
+		}
+		if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("HTTP_CLIENT_IP");
+		}
+		if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+		}
+		if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getRemoteAddr();
+		}
+		if (StringUtils.isBlank(ip) || ip.indexOf("0:0:0:0:0:0:0:1") >-1) {//0:0:0:0:0:0:0:1鏄湰鏈哄湪璁块棶
+			ip = "127.0.0.1";
+		}
+		return ip;
+	}
+
+	/**
+	 * 璁剧疆鏄惁鎸佷箙鍖�
+	 * @param isPersistence 鏄惁鎸佷箙鍖�
+	 */
+	public static void setPersistence(boolean isPersistence){
+		if(!isPersistence){
+			needPersistenceInThread.set("false");
+		}else{
+			needPersistenceInThread.set("");
+		}
+	}
+
+
+	/**
+	 * 灏嗗璞¤浆鎹负瀛楃涓插嚭鏉�
+	 * @return json瀛楃涓�
+	 */
+	public static String getJSONStringWithDateFormat(Object obj){
+		return JSONObject.toJSONStringWithDateFormat(obj, VciDateUtil.DateTimeMillFormat, SerializerFeature.WriteDateUseDateFormat);
+	}
+
+	/**
+	 * 鏈�鏂拌浆鎹负map
+	 * @param o 瀵硅薄
+	 * @return map
+	 */
+	public static Map<String,Object> objectToMap(Object o){
+		Map<String,Object> map = new HashMap<String,Object>();
+		if(o!=null) {
+			String jsonString = JSONObject.toJSONStringWithDateFormat(o, VciDateUtil.DateTimeMillFormat, SerializerFeature.WriteDateUseDateFormat);
+			if(StringUtils.isNotBlank(jsonString)) {
+				JSONObject jsonObject = JSONObject.parseObject(jsonString);
+				if(jsonObject!=null){
+					for(String key : jsonObject.keySet()){
+						map.put(key,jsonObject.get(key));
+					}
+				}
+			}
+		}
+		return map;
+	}
+
+	/**
+	 * 瀵硅薄杞崲涓簃ap
+	 * @param o 瀵硅薄
+	 * @return map
+	 */
+	public static Map<String,String> objectToMapString(Object o){
+		Map<String,String> map = new HashMap<String,String>();
+		if(o!=null) {
+			String jsonString = JSONObject.toJSONStringWithDateFormat(o, VciDateUtil.DateTimeMillFormat, SerializerFeature.WriteDateUseDateFormat);
+			if(StringUtils.isNotBlank(jsonString)) {
+				JSONObject jsonObject = JSONObject.parseObject(jsonString);
+				if(jsonObject!=null){
+					for(String key : jsonObject.keySet()){
+						map.put(key,jsonObject.getString(key));
+					}
+				}
+			}
+		}
+		return map;
+	}
+
+	/**
+	 * 鍒ゆ柇鏌愪釜灞炴�ф槸鍚︿负绌�
+	 * @param obj 瀵硅薄
+	 * @param f 瀛楁
+	 * @return true鏄笉绌�
+	 */
+	public static boolean isNotNullForField(Object obj,Field f){
+		if(!"serialVersionUID".equalsIgnoreCase(f.getName()) &&!"DEFAULT_INITIAL_CAPACITY".equalsIgnoreCase(f.getName())&&null!=obj && !WebUtil.isNullOrNullString(obj.toString())) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * 鏁扮粍杞崲涓哄瓧绗︿覆
+	 * @param array 鏁扮粍
+	 * @return 瀛楃涓�
+	 */
+	public static String array2String(String[] array) {
+		if(null == array || array.length == 0) {
+			return "";
+		}else{
+			return Arrays.stream(array).collect(Collectors.joining(","));
+		}
+	}
+
+	/**
+	 * 瀵硅薄杞崲涓哄瓧绗︿覆
+	 * @param obj 瀵硅薄
+	 * @return 瀛楃涓�
+	 */
+	public static String getString(Object obj){
+		if(obj == null) {
+			return "";
+		}
+		if(obj instanceof Date) {
+			return VciDateUtil.date2Str((Date) obj, VciDateUtil.DateTimeFormat);
+		}
+		return String.valueOf(obj);
+	}
+
+	/**
+	 * 鎷疯礉map閲岀殑鍊�
+	 * @param source 婧�
+	 * @param target 鐩爣
+	 * @param copyField 鎷疯礉鐨勫睘鎬�
+	 */
+	public static void copyValueForMap(Map source,Map target,String[] copyField){
+		Map<String,String> copyFieldMap = new HashMap<String,String>();
+		for(String field : copyField) {
+			copyFieldMap.put(field, field);
+		}
+		copyValueForMap(source,target,copyFieldMap);
+	}
+	/**
+	 * 涓簃ap鎷疯礉鍊�
+	 * @param source 婧�
+	 * @param target 鐩爣
+	 * @param copyField key涓虹洰鏍囧璞¢噷鐨勫瓧娈碉紝
+	 */
+	public static void copyValueForMap(Map source,Map target,Map<String,String> copyField){
+		try{
+			Iterator<String> it = copyField.keySet().iterator();
+			while(it.hasNext()){
+				String field = it.next();
+				target.put(field, source.get(copyField.get(field)));
+			}
+		}catch(Exception e){
+			if(logger.isErrorEnabled()){
+				logger.error("鎷疯礉鍊煎埌map",e);
+			}
+		}
+	}
+
+	/**
+	 * 浠嶮ap閲岃幏鍙杁ouble绫诲瀷
+	 * @param field 瀛楁鍚嶇О
+	 * @param record map
+	 * @return 灞炴��
+	 */
+	public static Double getDoubleFromMap(String field,
+										  Map<String, Object> record) {
+		if(WebUtil.isNullOrNullString(field) || record == null || !record.containsKey(field)) {
+			return null;
+		}else{
+			Object v = record.get(field);
+			if(v instanceof BigDecimal){
+				return ((BigDecimal)v).doubleValue();
+			}else if(v instanceof Double){
+				return ((Double)v).doubleValue();
+			}else{
+				return WebUtil.getDouble((String)v);
+			}
+		}
+	}
+
+	/**
+	 * 鑾峰彇涓嶆槸绌哄�肩殑鏄犲皠锛屼笖key鏄皬鍐�
+	 * @param map 鏄犲皠
+	 * @return 鍘婚櫎绌哄�肩殑
+	 */
+	public static Map getNotNullMap(Map map){
+		if(map == null){
+			return new HashMap();
+		}
+		Iterator it = map.keySet().iterator();
+		Map unNullMap = new HashMap();
+		while(it.hasNext()){
+			Object key = it.next();
+			String newKey = key.toString().toLowerCase();
+			Object value = map.get(key);
+			if(value !=null){
+				if(value instanceof String && WebUtil.isNotNull(value.toString())){
+					unNullMap.put(newKey, value);
+				}else if(!(value instanceof String)){
+					unNullMap.put(newKey, value);
+				}
+			}
+		}
+		return unNullMap;
+	}
+
+	/**
+	 * 鑾峰彇闆嗗悎鐨勫厓绱犵被鍨�
+	 * @param field 灞炴��
+	 * @return 鍏冪礌绫诲瀷, 涓嶆槸闆嗗悎鐨勬椂鍊欒繑鍥濶ull
+	 */
+	public static Class getCollectionElementClass(Field field) throws VciBaseException{
+		Class fieldClass = null;
+		if(field == null){
+			return null;
+		}
+		if(field.getType().isAssignableFrom(List.class) ||
+			field.getType().isAssignableFrom(Set.class) ||
+			field.getType().isAssignableFrom(Vector.class)){
+			Type fc = field.getGenericType();
+			if(fc instanceof ParameterizedType){
+				ParameterizedType pt = (ParameterizedType)fc;
+				fieldClass= (Class)pt.getActualTypeArguments()[0];
+			}
+		}
+		return fieldClass;
+	}
+
+	/**
+	 * 鑾峰彇瀵硅薄涓殑鎵�鏈夊睘鎬э紝鍖呮嫭鍏剁户鎵跨殑灞炴��
+	 * @param c 瀵硅薄
+	 * @return 鎵�鏈夌殑灞炴��
+	 */
+	public static List<Field> getAllFieldForObj(Class c){
+		List<Field> allField = new ArrayList<Field>();
+		for(Class<?> classz = c ; classz != Object.class ; classz = classz.getSuperclass() ){
+			Field[] thisClassField = classz.getDeclaredFields();
+			for(Field field : thisClassField){
+				if(!field.getName().equals("serialVersionUID")){
+					if(!allField.contains(field)){
+						allField.add(field);
+					}
+				}
+			}
+		}
+		return allField;
+	}
+
+	/**
+	 * 鑾峰彇ts鐨勫瓧娈�
+	 * @param c 瀵硅薄鎵�灞炵殑绫�
+	 * @return 鏃堕棿鎴崇殑瀵硅薄
+	 */
+	public static Field getTsField(Class c){
+		List<Field> allField = getAllFieldForObj(c);
+		if(allField!=null&&allField.size()>0){
+			for(Field field : allField){
+				if(field.getName().equals("ts")){
+					return  field;
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鍚嶇О鑾峰彇瀛楁
+	 * @param field 瀛楁鐨勫悕绉�
+	 * @param obj 瀵硅薄
+	 * @return 瀛楁瀵硅薄
+	 */
+	public static Field getFieldForObject(String field,Object obj){
+		if(obj == null){
+			return null;
+		}
+		return getFieldForObject(field,obj.getClass());
+	}
+
+	/**
+	 * 鏍规嵁鍚嶇О鑾峰彇瀛楁
+	 * @param fieldName 瀛楁鐨勫悕绉�
+	 * @param c 瀵硅薄绫诲瀷
+	 * @return 瀛楁瀵硅薄
+	 */
+	public static Field getFieldForObject(String fieldName,Class c){
+		List<Field> allField = getAllFieldForObj(c);
+		if(allField!=null&&allField.size()>0){
+			for(Field field : allField){
+				if(field.getName().toLowerCase().equalsIgnoreCase(fieldName.toLowerCase())){
+					return  field;
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鑾峰彇瀛楁鐨剆etter
+	 * @param c 瀵硅薄绫�
+	 * @param field 瀛楁
+	 * @return 鏂规硶
+	 */
+	public static Method getSetmethod(Class c,Field field){
+		return getSetmethod(c,field.getName());
+	}
+
+	/**
+	 * 鑾峰彇瀛楁鐨剆etter
+	 * @param c 瀵硅薄绫诲瀷
+	 * @param fieldName 瀛楁鍚嶇О
+	 * @return 鏂规硶
+	 */
+	public static Method getSetmethod(Class c,String fieldName){
+		if(c!=null&&isNotNull(fieldName)){
+			try {
+				PropertyDescriptor pd = new PropertyDescriptor(fieldName, c);
+				return pd.getWriteMethod();
+			} catch (SecurityException e) {
+			} catch (IntrospectionException e) {
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鑾峰彇瀛楁鐨刧etter
+	 * @param c 瀵硅薄绫诲瀷
+	 * @param fieldName 瀛楁鍚嶇О
+	 * @return 鏂规硶
+	 */
+	public static Method getGetmethod(Class c,String fieldName){
+		if(c!=null&&isNotNull(fieldName)){
+			try {
+				PropertyDescriptor pd = new PropertyDescriptor(fieldName, c);
+				return pd.getReadMethod();
+			} catch (SecurityException e) {
+			} catch (IntrospectionException e) {
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鑾峰彇瀛楁鐨刧etter
+	 * @param c 瀵硅薄绫诲瀷
+	 * @param field 瀛楁
+	 * @return 鏂规硶
+	 */
+	public static Method getGetmethod(Class c,Field field){
+		return getGetmethod(c,field.getName());
+	}
+
+	/**
+	 * 鑾峰彇瀵硅薄杞崲瀛楃涓�
+	 * @param obj 瀵硅薄
+	 * @return 瀛楃涓�
+	 */
+	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 String.valueOf(obj);
+			}else if(obj instanceof Date){
+				return VciDateUtil.date2Str((Date)obj, VciDateUtil.DateTimeMillFormat);
+			}else{
+				return obj.toString();
+			}
+		}
+	}
+
+	/**
+	 * 涓哄璞¤祴鍊硷紝涓嶅垽鏂被鍨嬶紝灞炴�ф槸浠�涔堢被鍨嬬殑锛寁alue灏卞繀椤绘槸浠�涔堢被鍨�
+	 * @param fieldName 灞炴�у悕绉�
+	 * @param targetObject 瀵硅薄
+	 * @param value 灞炴�у��
+	 */
+	public static void setValueToField(String fieldName,Object targetObject,Object value){
+		if(isNotNull(fieldName)){
+			Method setMethod = getSetmethod(targetObject.getClass(), fieldName);
+			try {
+				if(setMethod != null){
+					setMethod.invoke(targetObject, value);
+				}else{
+					Field field = getFieldForObject(fieldName, targetObject);
+					if(field !=null){
+						field.setAccessible(true);
+						field.set(targetObject, value);
+					}
+				}
+			} catch (IllegalArgumentException e) {
+				if(logger.isErrorEnabled()){
+					logger.error("WebUtil.setValueToField",e);
+				}
+			} catch (IllegalAccessException e) {
+				if(logger.isErrorEnabled()){
+					logger.error("WebUtil.setValueToField",e);
+				}
+			} catch (InvocationTargetException e) {
+				if(logger.isErrorEnabled()){
+					logger.error("WebUtil.setValueToField",e);
+				}
+			}
+		}
+	}
+
+	/**
+	 * 浠庡璞′笂鑾峰彇灞炴�х殑鍊�
+	 * @param fieldName 灞炴�у悕
+	 * @param sourceObject 瀵硅薄
+	 * @return 鍊�
+	 */
+	public static Object getValueFromField(String fieldName,Object sourceObject){
+		if(isNotNull(fieldName)){
+			try {
+				Method getMethod = getGetmethod(sourceObject.getClass(), fieldName);
+				if(getMethod !=null){
+					return getMethod.invoke(sourceObject);
+				}else{
+					//璇存槑娌℃湁璁剧疆getter锛屾瘮濡侭O鍜孡O瀵硅薄杩欑
+					Field field = getFieldForObject(fieldName, sourceObject);
+					if(field !=null){
+						field.setAccessible(true);
+						return field.get(sourceObject);
+					}
+				}
+			} catch (SecurityException e) {
+				if(logger.isErrorEnabled()){
+					logger.error("WebUtil.getValueFromField",e);
+				}
+			} catch (IllegalAccessException e) {
+				if(logger.isErrorEnabled()){
+					logger.error("WebUtil.getValueFromField",e);
+				}
+			} catch (IllegalArgumentException e) {
+				if(logger.isErrorEnabled()){
+					logger.error("WebUtil.getValueFromField",e);
+				}
+			} catch (InvocationTargetException e) {
+				if(logger.isErrorEnabled()){
+					logger.error("WebUtil.getValueFromField",e);
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鏄惁涓烘櫘閫氱殑灞炴��
+	 * @param attrName 灞炴�х殑鍚嶅瓧
+	 * @return true
+	 */
+	public static boolean isNormalAttr(String attrName){
+		attrName = attrName.toLowerCase();
+		if(attrName.indexOf(".")<0 && attrName.indexOf("_")<0 && !attrName.equalsIgnoreCase("lcstatustext")){
+			return true;
+		}else{
+			return false;
+		}
+	}
+
+
+	/**
+	 * 灏唚hereSql閲岀殑鍐呭杞寲鍒版煡璇ap閲�
+	 * @param whereSql sql杞崲涓簃ap
+	 * @return map
+	 */
+	public static Map<String,String>  whereSql2Map(
+		String whereSql) {
+		Map<String,String> map = new HashMap<String, String>();
+		if(isNotNull(whereSql)){
+			String[] selects = whereSql.split("and");
+			if(selects!=null&&selects.length>0){
+				for(String s : selects){
+					s = s.trim();
+					map.put(s.substring(0,s.indexOf(" ")).trim(), s.substring(s.indexOf(" ") +1).trim());
+				}
+			}
+		}
+		return map;
+	}
+
+	/**
+	 * 鏈満鐨刬p
+	 */
+	private static String localIp = null;
+
+	/**
+	 * 鑾峰彇鏈満鍦板潃锛屼笉鏄鎴风鐢佃剳鐨刬p,鏄綋鍓嶆湇鍔℃墍鍦ㄧ殑ip
+	 * @return
+	 */
+	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 e){
+				localIp = "127.0.0.1";
+			}
+		}
+		return localIp;
+	}
+
+	/**
+	 * 浠庣綉缁滄帴鍙d笂鑾峰彇ip鍦板潃
+	 * @return ip鍦板潃
+	 */
+	private static InetAddress getLocalHostLANAddress(){
+		try {
+			InetAddress candidateAddress = null;
+			// 閬嶅巻鎵�鏈夌殑缃戠粶鎺ュ彛
+			for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); ) {
+				NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
+				// 鍦ㄦ墍鏈夌殑鎺ュ彛涓嬪啀閬嶅巻IP
+				for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); ) {
+					InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
+					if (!inetAddr.isLoopbackAddress()) {// 鎺掗櫎loopback绫诲瀷鍦板潃
+						if (inetAddr.isSiteLocalAddress()) {
+							// 濡傛灉鏄痵ite-local鍦板潃锛屽氨鏄畠浜�
+							return inetAddr;
+						} else if (candidateAddress == null) {
+							// site-local绫诲瀷鐨勫湴鍧�鏈鍙戠幇锛屽厛璁板綍鍊欓�夊湴鍧�
+							candidateAddress = inetAddr;
+						}
+					}
+				}
+			}
+			if (candidateAddress != null) {
+				return candidateAddress;
+			}
+			// 濡傛灉娌℃湁鍙戠幇 non-loopback鍦板潃.鍙兘鐢ㄦ渶娆¢�夌殑鏂规
+			InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
+			return jdkSuppliedAddress;
+		} catch (Exception e) {
+			if(logger.isErrorEnabled()){
+				logger.error("鑾峰彇鏈満ip",e);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * oracle in 鏌ヨ涓嶈兘瓒呰繃1000锛岃浆鎹竴涓嬮泦鍚�
+	 * 鐢变簬SQL璇彞1000涓彲鑳藉緢闀匡紝瓒呰繃oracle10g锛屾墍浠ョ壓鐗叉�ц兘鍒嗛厤涓�500涓暟缁�
+	 * @param list 闇�瑕佽浆鎹㈢殑鍒楄〃鍐呭
+	 * @return 鍒嗙粍鍚庣殑list
+	 */
+	public static <T> Collection<Collection<T>> switchCollectionForOracleIn(Collection<T> list) {
+		return switchCollectionForOracleIn(list,500);
+	}
+
+	/**
+	 * 杞崲闆嗗悎鐨勫ぇ灏忥紝杩欎釜鐢ㄥ湪feign璋冪敤鐨勬椂鍊欙紝涓嶈鍦╯ql鏌ヨ鐨勬椂鍊欎娇鐢�
+	 * @param collection 闇�瑕佽浆鎹㈢殑鍒楄〃鍐呭
+	 * @param preSize 姣忎釜鍒嗙粍鐨勫ぇ灏�
+	 * @return 鍒嗙粍鍚庣殑list
+	 */
+	public static <T> Collection<Collection<T>> switchCollectionForOracleIn(Collection<T> collection,int preSize) {
+		Collection<Collection<T>> listHasList = new ArrayList<Collection<T>>();
+		if(collection == null){
+			return listHasList;
+		}
+		List<T> newList = new ArrayList<T>();
+		for(Object obj : collection){
+			//涓轰簡璁﹍ist杩樺彲浠ユ坊鍔犲唴瀹癸紝鍥犱负浣跨敤sublist鍚庯紝list涓嶈兘鍐岮dd浜�
+			newList.add((T)obj);
+		}
+		int muti = 1;
+		if(newList.size() >preSize){
+			int balance = newList.size()%preSize;
+			muti = (newList.size() - balance)/preSize + (balance == 0?0:1);
+		}
+		for(int i = 0 ; i < muti; i ++){
+			int start = i*preSize;
+			int end = start + preSize;
+			if(i == muti-1 || end >newList.size() ){
+				end = newList.size();
+			}
+			List subList = newList.subList(start,end);
+			listHasList.add(subList);
+		}
+		return listHasList;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/wrapper/VciQueryWrapperForDO.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/wrapper/VciQueryWrapperForDO.java
new file mode 100644
index 0000000..c05d1a8
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/wrapper/VciQueryWrapperForDO.java
@@ -0,0 +1,284 @@
+package com.vci.ubcs.starter.web.wrapper;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.web.wrapper;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+import com.vci.ubcs.starter.web.annotation.VciFieldType;
+import com.vci.ubcs.starter.web.annotation.VciUseEnum;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.service.VciSecretServiceI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springframework.util.CollectionUtils;
+
+import javax.xml.bind.annotation.XmlType;
+
+public class VciQueryWrapperForDO implements VciSecretServiceI {
+	public static boolean USER_TABLE_COMPATIBILITY = false;
+	public static String DATABASE_PLATFORM;
+	public static Map<String, String> USER_TABLE_COMPATIBILITY_BTM_MAP;
+	public static Map<String, String> USER_TABLE_COMPATIBILITY_FIELD_MAP;
+	public static final String USER_TABLE_COMPATIBILITY_FIELD_SEP = "${vcicomplibitysep}";
+	private Map<String, String> conditionMap;
+	private Map<String, String> customerSqlMap;
+	private String oidFieldName;
+	private static final String SPACE = " ";
+	public static final String QUERY_FIELD_SECRET = "${vciQuerySecret}";
+	public static final String QUERY_FIELD_DATARIGHT = "${vciQueryDataRight}";
+	private Class<?> doClass;
+	private PageHelper pageHelper;
+	private Map<String, String> allFieldNameMap;
+	private List<String> xmlTypeFieldList;
+	private boolean distinct;
+	public static final String OID_FIELD = "oid";
+	public static final String ID_FIELD = "id";
+	public static final String LC_STATUS_FIELD = "lcstatus";
+	public static final String LC_STATUS_FIELD_TEXT = "lcStatus_text";
+	private Map<String, VciFieldTypeEnum> allFieldTypeMap;
+	private Map<String, String> useReferMap;
+	private Map<String, String> enumFieldMap;
+	private String linkTableSql;
+	private String selectFieldSql;
+	private String selectPrefixForPage;
+	private String whereSql;
+	private String orderSql;
+	private String whereSubfixForPage;
+	private Map<String, String> valuesMap;
+	private String tableNick;
+	private Map<String, String> extendFieldMap;
+	private static final String DATETIME_FORMAT = "yyyy-mm-dd hh24:mi:ss";
+	private static final String DATE_FORMAT = "yyyy-mm-dd";
+
+	public void clearPage() {
+		this.pageHelper = null;
+		this.selectPrefixForPage = "";
+		this.whereSubfixForPage = "";
+	}
+
+	public VciQueryWrapperForDO in(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, "\\IN");
+		return this;
+	}
+
+	public VciQueryWrapperForDO notIn(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, "\\NOTIN");
+		return this;
+	}
+
+	public VciQueryWrapperForDO eq(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value);
+		return this;
+	}
+
+	public VciQueryWrapperForDO neq(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, "!=");
+		return this;
+	}
+
+	public VciQueryWrapperForDO less(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, "<");
+		return this;
+	}
+
+	public VciQueryWrapperForDO lessThan(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, "<=");
+		return this;
+	}
+
+	public VciQueryWrapperForDO more(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, ">");
+		return this;
+	}
+
+	public VciQueryWrapperForDO moreThan(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, ">=");
+		return this;
+	}
+
+	public VciQueryWrapperForDO isNull(String key) throws VciBaseException {
+		this.addQueryMap(key, "_n", "=null");
+		return this;
+	}
+
+	public VciQueryWrapperForDO isNotNull(String key) throws VciBaseException {
+		this.addQueryMap(key, "_n", "!=null");
+		return this;
+	}
+
+	public VciQueryWrapperForDO secret() throws VciBaseException {
+		String secretSql = this.getLessThanUserSecretSql();
+		this.addQueryMap("secretGrade", secretSql, "<=");
+		return this;
+	}
+
+	public void addQueryMap(String key, String value) {
+		this.addQueryMap(key, value, (String)null);
+	}
+
+	public void addQueryMap(String key, String value, String operation) {
+		VciBaseUtil.alertNotNull(new Object[]{key, "鏌ヨ鏉′欢鐨勫悕绉�"});
+		if (StringUtils.isNotBlank(value)) {
+			if (this.conditionMap == null) {
+				this.conditionMap = new HashMap();
+			}
+
+			if (operation == null) {
+				operation = "";
+			}
+
+			this.conditionMap.put(key, operation + value);
+		}
+
+	}
+
+	public void addCustomSql(String key, String sql) {
+		VciBaseUtil.alertNotNull(new Object[]{key, "鑷畾涔塖QL鐨凨EY", sql, "鑷畾涔夌殑SQL璇彞"});
+		if (StringUtils.isNotBlank(sql)) {
+			if (this.customerSqlMap == null) {
+				this.customerSqlMap = new HashMap();
+			}
+
+			this.customerSqlMap.put(key, sql);
+		}
+
+	}
+
+	public void addExtendField(String fieldName) {
+		this.addExtendField(fieldName, fieldName);
+	}
+
+	public void addExtendField(String fieldName, String nickName) {
+		this.extendFieldMap.put(fieldName, nickName);
+	}
+
+	public Map<String, String> getConditionMap() {
+		return this.conditionMap;
+	}
+
+	public void setConditionMap(Map<String, String> conditionMap) {
+		this.conditionMap = conditionMap;
+	}
+
+	public Map<String, String> switchConditionMap() {
+		Map<String, String> queryMap = new HashMap();
+		if (!CollectionUtils.isEmpty(this.conditionMap)) {
+			this.conditionMap.forEach((key, value) -> {
+				queryMap.put(key, value);
+			});
+			this.allFieldNameMap.forEach((dbField, field) -> {
+				if (this.conditionMap.containsKey(field)) {
+					queryMap.put(dbField, this.conditionMap.get(field));
+				}
+
+			});
+		}
+
+		return queryMap;
+	}
+
+	public String getLinkTableSql() {
+		return this.linkTableSql;
+	}
+
+	public void setLinkTableSql(String linkTableSql) {
+		this.linkTableSql = linkTableSql;
+	}
+
+	public void addLinkTableSql(String linkTableSql) {
+		this.linkTableSql = this.linkTableSql + " " + linkTableSql + " ";
+	}
+
+	public void setSelectFieldSql(String selectFieldSql) {
+		this.selectFieldSql = selectFieldSql;
+	}
+
+	public void appendSelectField(String sql) {
+		this.selectFieldSql = this.selectFieldSql + "," + sql;
+	}
+
+	public void appendSelectPagePrefix(String sql) {
+		this.selectPrefixForPage = this.selectPrefixForPage + "," + sql;
+	}
+
+	public String getWhereSql() {
+		if (StringUtils.isBlank(this.whereSql)) {
+			this.whereSql = " 1 = 1 ";
+		}
+
+		return this.pageHelper != null && this.pageHelper.getLimit() > 0 ? this.whereSql + (this.orderSql == null ? "" : this.orderSql) + (this.whereSubfixForPage == null ? "" : this.whereSubfixForPage) : (StringUtils.isNotBlank(this.whereSql) ? this.whereSql : " 1= 1 ") + (this.orderSql == null ? "" : this.orderSql);
+	}
+
+	public void setWhereSql(String whereSql) {
+		this.whereSql = whereSql;
+	}
+
+	public Map<String, String> getValuesMap() {
+		return this.valuesMap;
+	}
+
+	public void setValuesMap(Map<String, String> valuesMap) {
+		this.valuesMap = valuesMap;
+	}
+
+	public String getTableNick() {
+		return this.tableNick;
+	}
+
+	public void setTableNick(String tableNick) {
+		this.tableNick = tableNick;
+	}
+
+	public String getOrderSql() {
+		return this.orderSql;
+	}
+
+	public void setOrderSql(String orderSql) {
+		this.orderSql = orderSql;
+	}
+
+	public String getOidFieldName() {
+		return this.oidFieldName;
+	}
+
+	public void setOidFieldName(String oidFieldName) {
+		this.oidFieldName = oidFieldName;
+	}
+
+	public boolean isDistinct() {
+		return this.distinct;
+	}
+
+	public void setDistinct(boolean distinct) {
+		this.distinct = distinct;
+	}
+
+	public Map<String, String> getCustomerSqlMap() {
+		return this.customerSqlMap;
+	}
+
+	public void setCustomerSqlMap(Map<String, String> customerSqlMap) {
+		this.customerSqlMap = customerSqlMap;
+	}
+
+}
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..c985036 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/pom.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
@@ -23,14 +23,17 @@
             <version>3.0.1.RELEASE</version>
             <scope>compile</scope>
         </dependency>
-
         <dependency>
             <groupId>com.vci.ubcs</groupId>
-            <artifactId>ubcs-omd-api</artifactId>
+            <artifactId>ubcs-ddl</artifactId>
             <version>3.0.1.RELEASE</version>
-            <scope>compile</scope>
         </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.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
index 904cf38..ac7770b 100644
--- 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
@@ -16,9 +16,12 @@
  */
 package com.vci.ubcs.code;
 
+import com.vci.ubcs.starter.util.VciSpringUtil;
 import org.springblade.core.cloud.client.UbcsCloudApplication;
 import org.springblade.core.launch.UbcsApplication;
 import org.springblade.core.launch.constant.AppConstant;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.stereotype.Component;
 
 /**
  * Code鍚姩鍣�
@@ -27,6 +30,7 @@
  * ludc
  */
 @UbcsCloudApplication
+@ComponentScan("com.vci.ubcs.*")
 public class CodeApplication {
 
 	public static void main(String[] args) {
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/FrameWorkLangCodeConstant.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/FrameWorkLangCodeConstant.java
index 0686993..bcb31a9 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/FrameWorkLangCodeConstant.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/FrameWorkLangCodeConstant.java
@@ -180,6 +180,11 @@
 	public static final String DATA_LINKED_NOT_DELETE = "dataLinkedNotDelete";
 
 	/**
+	 * ts妫�楠屾湭閫氳繃
+	 */
+	public static final String TS_NOT_PROCESS = "ts test failed";
+
+	/**
 	 * 鏁版嵁鐨勫瓙鑺傜偣涔熻寮曠敤锛屼笉鍏佽鍒犻櫎
 	 */
 	public static final String DATA_CASCADE_LINKED_NOT_DELETE = "dataCascadeLinkedNotDelete";
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java
index 634fea2..fc4aee3 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java
@@ -49,6 +49,10 @@
      * 闃舵鐨勫睘鎬�
      */
     public static final String CODE_PHASE_ATTR = "codephaseattr";
+	/**
+	 * 闃舵鐨勫睘鎬�
+	 */
+	public static final String CODE_PHASE_ATTR_TABLENAME = "code_phaseattr";
 
     /**
      * 涓绘暟鎹垎绫讳娇鐢ㄧ殑娴佺▼妯℃澘
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeAllCodeController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeAllCodeController.java
index de4180c..c4ec48a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeAllCodeController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeAllCodeController.java
@@ -43,7 +43,7 @@
  */
 @RestController
 @AllArgsConstructor
-@RequestMapping("blade-code/CodeAllcode")
+@RequestMapping("/CodeAllcode")
 @Api(value = "鍏ㄩ儴鐮佸��", tags = "鍏ㄩ儴鐮佸�兼帴鍙�")
 public class CodeAllCodeController extends BladeController {
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
index fef60d8..e70d868 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
@@ -7,8 +7,8 @@
 import com.vci.ubcs.code.service.ICodeBasicSecService;
 import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
 import com.vci.ubcs.code.wrapper.CodeBasicSecWrapper;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springblade.core.mp.support.Condition;
@@ -158,7 +158,7 @@
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "鍙傛暟鍒嗙被鐮佹鍩虹淇℃伅鍒楄〃", notes = "codeBasicSecVO")
     public R<IPage<CodeBasicSecVO>> refDataGridClassifySec(CodeBasicSecVO codeBasicSecVO, Query query){
-        return R.data(codeBasicSecService.refDataGridClassifySec(Condition.getPage(query), codeBasicSecVO));
+        return R.data(codeBasicSecService.refDataGridClassifySec(Condition.getPage(query.setAscs("ordernum")), codeBasicSecVO));
     }
 
     /**
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java
index 1f47c61..be3cfa6 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java
@@ -19,10 +19,10 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.vci.ubcs.code.entity.CodeButtonEntity;
+import com.vci.ubcs.code.entity.CodeButton;
 import com.vci.ubcs.code.mapper.CodeButtonMapper;
 import com.vci.ubcs.code.service.ICodeButtonService;
-import com.vci.ubcs.code.vo.CodeButtonVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
 import com.vci.ubcs.code.wrapper.CodeButtonWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -61,8 +61,8 @@
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "璇︽儏", notes = "浼犲叆codebutton")
-	public R<CodeButtonVO> detail(CodeButtonEntity codebutton) {
-		CodeButtonEntity detail = codeButtonMapper.selectOne(Condition.getQueryWrapper(codebutton));
+	public R<CodeButtonVO> detail(CodeButton codebutton) {
+		CodeButton detail = codeButtonMapper.selectOne(Condition.getQueryWrapper(codebutton));
 		return R.data(CodeButtonWrapper.build().entityVO(detail));
 	}
 	/**
@@ -71,8 +71,8 @@
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆codebutton")
-	public R<IPage<CodeButtonVO>> list(CodeButtonEntity codebutton, Query query) {
-		IPage<CodeButtonEntity> pages = codeButtonMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codebutton));
+	public R<IPage<CodeButtonVO>> list(CodeButton codebutton, Query query) {
+		IPage<CodeButton> pages = codeButtonMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codebutton));
 		return R.data(CodeButtonWrapper.build().pageVO(pages));
 	}
 
@@ -93,7 +93,7 @@
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "鏂板", notes = "浼犲叆codebutton")
-	public R save(@Valid @RequestBody CodeButtonEntity codebutton) {
+	public R save(@Valid @RequestBody CodeButton codebutton) {
 		return R.status(SqlHelper.retBool(codeButtonMapper.insert(codebutton)));
 	}
 
@@ -103,7 +103,7 @@
 	@PostMapping("/update")
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "淇敼", notes = "浼犲叆codebutton")
-	public R update(@Valid @RequestBody CodeButtonEntity codebutton) {
+	public R update(@Valid @RequestBody CodeButton codebutton) {
 		return R.status(SqlHelper.retBool(codeButtonMapper.updateById(codebutton)));
 	}
 
@@ -113,7 +113,7 @@
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆codebutton")
-	public R submit(@Valid @RequestBody CodeButtonEntity codebutton) {
+	public R submit(@Valid @RequestBody CodeButton codebutton) {
 		if(codebutton.getOid() != null){
 			return R.status(SqlHelper.retBool(codeButtonMapper.updateById(codebutton)));
 		}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java
index c854d94..b311f99 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java
@@ -24,15 +24,15 @@
 import com.vci.ubcs.code.service.ICodeClassifyService;
 import com.vci.ubcs.code.vo.CodeOsattributeVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
-import com.vci.ubcs.code.vo.pagemodel.TreeQueryObject;
 import com.vci.ubcs.code.wrapper.CodeClassifyWrapper;
-import com.vci.ubcs.com.vci.starter.util.LocalFileUtil;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.Tree;
-import com.vci.ubcs.com.vci.starter.web.util.ControllerUtil;
-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.revision.model.TreeQueryObject;
+import com.vci.ubcs.starter.util.LocalFileUtil;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.Tree;
+import com.vci.ubcs.starter.web.util.ControllerUtil;
+import com.vci.ubcs.starter.web.util.LangBaseUtil;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java
new file mode 100644
index 0000000..c19293a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java
@@ -0,0 +1,168 @@
+package com.vci.ubcs.code.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.code.dto.CodeClassifyProcessTempDTO;
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
+import com.vci.ubcs.code.service.ICodeClassifyProcessTempService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyProcessTempVO;
+import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.wrapper.VciQueryWrapperForDO;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClsProcessTempController")
+@AllArgsConstructor
+@Api(value = "缂栫爜搴撳畾涔�-娴佺▼妯℃澘", tags = "缂栫爜搴撳畾涔�-娴佺▼妯℃澘鎺ュ彛")
+public class CodeClassifyProcessTempController {
+
+    /**
+    * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉� 鏈嶅姟
+    */
+    @Autowired
+    private ICodeClassifyProcessTempService codeClassifyProcessTempService;
+
+    /**
+     * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyProcessTemp")
+    public R<IPage<CodeClassifyProcessTempVO>> gridCodeClassifyProcessTemp(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return R.data(codeClassifyProcessTempService.gridCodeClassifyProcessTemp(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper()));
+    }
+
+    /**
+     * 澧炲姞 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public R<CodeClassifyProcessTempVO> addSave(@RequestBody CodeClassifyProcessTempDTO codeClassifyProcessTempDTO){
+         CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.addSave(codeClassifyProcessTempDTO);
+         return R.data(codeClassifyProcessTempVO);
+    }
+
+    /**
+     * 淇敼 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public R<CodeClassifyProcessTempVO> editSave(@RequestBody CodeClassifyProcessTempDTO codeClassifyProcessTempDTO){
+        CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.editSave(codeClassifyProcessTempDTO);
+        return R.data(codeClassifyProcessTempVO);
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public R delCodeClassifyProcessTemp(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) {
+        return codeClassifyProcessTempService.deleteCodeClassifyProcessTemp(codeClassifyProcessTempDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public R<CodeClassifyProcessTempVO> getObjectByOid(String oid){
+        CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.getObjectByOid(oid);
+        return R.data(codeClassifyProcessTempVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public R<Collection<CodeClassifyProcessTempVO>> listCodeClassifyProcessTempByOids(String oids){
+        Collection<CodeClassifyProcessTempVO> voCollection =  codeClassifyProcessTempService.listCodeClassifyProcessTempByOids(VciBaseUtil.str2List(oids));
+        return R.data(voCollection);
+    }
+
+    /**
+     * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public R<IPage<CodeClassifyProcessTempVO>> refDataGridCodeClassifyProcessTemp(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return R.data(codeClassifyProcessTempService.refDataGridCodeClassifyProcessTemp(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper()));
+    }
+
+    /**
+     * 浣跨敤妯℃澘鑾峰彇浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeTemplateOid 妯℃澘鐨勪富閿�
+     * @param processUse 娴佺▼鐨勭敤閫�
+     * @return 娴佺▼妯℃澘鐨勪俊鎭�
+     */
+    @GetMapping("/listProcessTemplate")
+    public R<List<CodeClassifyProcessTempVO>> listProcessTemplate(String codeTemplateOid,String processUse){
+        List<CodeClassifyProcessTempVO> processTempVOList = codeClassifyProcessTempService.listProcessTemplate(codeTemplateOid,processUse);
+        return R.data(processTempVOList);
+    }
+
+    /**
+     * 浣跨敤妯℃澘鑾峰彇浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeTemplateOid 妯℃澘鐨勪富閿�
+     * @param processUse 娴佺▼鐨勭敤閫�
+     * @return 娴佺▼妯℃澘鐨勪俊鎭�
+     */
+    @GetMapping("/listSameProcessTemplate")
+    public R<CodeClassifyProcessTempVO> listSameProcessTemplate(String codeTemplateOid,String processUse){
+        VciBaseUtil.alertNotNull(codeTemplateOid,"鎵�閫夋嫨鐨勬暟鎹ā鏉夸富閿�");
+        /*Map<String,String> conditionMap=new HashMap<>();
+        conditionMap.put("classifyTemplateOid", QueryOptionConstant.IN  + VciBaseUtil.toInSql(codeTemplateOid));
+        conditionMap.put("codeprocessuse",processUse);*/
+		LambdaQueryWrapper<CodeClassifyProcessTemp> LambdaQueryWrapper = Wrappers.<CodeClassifyProcessTemp>query()
+			.lambda().in(CodeClassifyProcessTemp::getCodeClassifyOid, VciBaseUtil.toInSql(codeTemplateOid))
+			.eq(CodeClassifyProcessTemp::getCodeProcessUse, processUse);
+
+		List<CodeClassifyProcessTempVO> codeClassifyProcessTempVOS = codeClassifyProcessTempService.selectByWrapper(LambdaQueryWrapper);
+        //鏍规嵁妯℃澘灏嗘暟鎹暣鍚堝湪涓�璧凤紝鍘绘牎楠�
+        Map<String/**妯℃澘oid**/, List<CodeClassifyProcessTempVO>/**鏁版嵁瀵硅薄**/>  templateProcessTempateVOMap =
+			codeClassifyProcessTempVOS.stream().collect(Collectors.toMap(CodeClassifyProcessTempVO::getId, s->{
+            List<CodeClassifyProcessTempVO> l=new ArrayList<>();
+            l.add(s);
+            return l;
+        },(List<CodeClassifyProcessTempVO> s1,List<CodeClassifyProcessTempVO> s2)->{
+            s1.addAll(s2);
+            return s1;
+        }));
+        if(templateProcessTempateVOMap.size()>1){
+            return R.fail("娴佺▼妯℃澘涓嶇粺涓�锛屼笉鍏佽鍙戣捣娴佺▼");
+        }else {
+            return R.data(codeClassifyProcessTempVOS.get(0));
+        }
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java
new file mode 100644
index 0000000..e05eb2e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java
@@ -0,0 +1,137 @@
+/*
+ *      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.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.ubcs.code.service.ICodeTempbuttonService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
+import com.vci.ubcs.code.wrapper.CodeTempbuttonWrapper;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Collection;
+
+/**
+ * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鎺у埗鍣�
+ *
+ * @author ludc
+ * @since 2023-04-20
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/codeClsTempButtonController")
+@Api(value = "缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍", tags = "缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍鎺ュ彛")
+public class CodeClassifyTemplateButtonController extends BladeController {
+
+	/**
+	 * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽� 鏈嶅姟
+	 */
+	private final ICodeTempbuttonService codeClassifyTemplateButtonService;
+
+	/**
+	 * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+	 * @param codeClassifyTemplateButtonVO 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+	 * @param query
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛�
+	 */
+	@GetMapping("/gridCodeClassifyTemplateButton")
+	public DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO,Query query){
+		return codeClassifyTemplateButtonService.gridCodeClassifyTemplateButton(codeClassifyTemplateButtonVO,query);
+	}
+
+	/**
+	 * 澧炲姞 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+	 */
+	@PostMapping( "/addSave")
+	public R addSave(@RequestBody CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO){
+		return R.status(codeClassifyTemplateButtonService.addSave(codeClassifyTemplateButtonDTO));
+	}
+
+	/**
+	 * 淇敼 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+	 */
+	@PutMapping("/editSave")
+	public R editSave(@RequestBody CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO){
+		return R.status(codeClassifyTemplateButtonService.editSave(codeClassifyTemplateButtonDTO));
+	}
+
+	/**
+	 * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 */
+	@DeleteMapping( "/deleteData")
+	public R delCodeClassifyTemplateButton( CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) {
+		return codeClassifyTemplateButtonService.deleteCodeClassifyTemplateButton(codeClassifyTemplateButtonDTO);
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oid 涓婚敭
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 */
+	@GetMapping("/getObjectByOid")
+	public R<CodeClassifyTemplateButtonVO> getObjectByOid(String oid){
+		CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = codeClassifyTemplateButtonService.getObjectByOid(oid);
+		return R.data(codeClassifyTemplateButtonVO);
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 */
+	@GetMapping("/listDataByOids")
+	public R<Collection<CodeClassifyTemplateButtonVO>> listCodeClassifyTemplateButtonByOids(String oids){
+		Collection<CodeClassifyTemplateButtonVO> voCollection =  codeClassifyTemplateButtonService.listCodeClassifyTemplateButtonByOids(VciBaseUtil.str2List(oids));
+		return R.data(voCollection);
+	}
+
+	/**
+	 * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+	 * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 */
+	@GetMapping("/refDataGrid")
+	public DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(BaseQueryObject baseQueryObject){
+		if(baseQueryObject == null){
+			baseQueryObject = new BaseQueryObject();
+		}
+		return codeClassifyTemplateButtonService.refDataGridCodeClassifyTemplateButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java
new file mode 100644
index 0000000..2d3afc3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java
@@ -0,0 +1,141 @@
+package com.vci.ubcs.code.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
+import com.vci.ubcs.code.service.ICodeClassifyValueService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyValueVO;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+
+import com.vci.ubcs.starter.web.pagemodel.Tree;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClassifyValueController")
+public class CodeClassifyValueController {
+    /**
+    * 鍒嗙被鐮佹鐨勭爜鍊� 鏈嶅姟
+    */
+    @Autowired
+    private ICodeClassifyValueService codeClassifyValueService;
+
+    /**
+     * 鍒嗙被鐮佹鐨勭爜鍊兼爲
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
+     */
+    @GetMapping("/treeCodeClassifyValue")
+    public List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject)  {
+        return  codeClassifyValueService.treeCodeClassifyValue(treeQueryObject);
+    }
+
+    /**
+     * 澧炲姞 鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public R<CodeClassifyValueVO> addSave(@RequestBody CodeClassifyValueDTO codeClassifyValueDTO){
+		return R.status(codeClassifyValueService.addSave(codeClassifyValueDTO));
+    }
+
+    /**
+     * 淇敼 鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public R<CodeClassifyValueVO> editSave(@RequestBody CodeClassifyValueDTO codeClassifyValueDTO){
+        return R.status(codeClassifyValueService.editSave(codeClassifyValueDTO));
+    }
+
+    /**
+    * 妫�鏌� 鍒嗙被鐮佹鐨勭爜鍊兼槸鍚﹀垹闄�
+    * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+    * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+    */
+    @PostMapping( "/checkIsCanDelete")
+    public R checkIsCanDelete( CodeClassifyValueDTO codeClassifyValueDTO)  {
+        return codeClassifyValueService.checkIsCanDelete(codeClassifyValueDTO);
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public R delCodeClassifyValue( CodeClassifyValueDTO codeClassifyValueDTO) {
+        return codeClassifyValueService.deleteCodeClassifyValue(codeClassifyValueDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public R<CodeClassifyValueVO> getObjectByOid(String oid){
+        CodeClassifyValueVO codeClassifyValueVO = codeClassifyValueService.getObjectByOid(oid);
+        return R.data(codeClassifyValueVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public R<Collection<CodeClassifyValueVO>> listCodeClassifyValueByOids(String oids){
+        Collection<CodeClassifyValueVO> voCollection =  codeClassifyValueService.listCodeClassifyValueByOids(VciBaseUtil.str2List(oids));
+        return R.data(voCollection);
+    }
+
+    /**
+    * 鍙傜収鏍� 鍒嗙被鐮佹鐨勭爜鍊�
+    * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
+    */
+    @GetMapping("/referTree")
+        public List<Tree> referTree(TreeQueryObject treeQueryObject)  {
+        return codeClassifyValueService.referTree(treeQueryObject);
+    }
+
+    /**
+     * 淇濆瓨椤甸潰涓婄殑鍒嗙被鐮佹鐮佸�硷紝涓昏鏄繚瀛樺簭鍙风敤浜庢帓搴忋�傚鏋滄暟鎹簱涓瓨鍦ㄩ〉闈紶杈撳璞¢泦鍚堜腑涓嶅瓨鍦ㄧ殑鍊硷紝鍒欏垹闄ゃ��
+     * @param param 鍙傛暟锛屽寘鎷琩toList 椤甸潰浼犺緭瀵硅薄闆嗗悎 鍜宑odeclassifysecoid 鍒嗙被鐮佹涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping("/saveOrder")
+    public R saveOrder(@RequestBody Map<String,Object> param){
+        JSONArray json = JSONArray.parseArray(String.valueOf(param.get("dtoList")));
+        List<CodeClassifyValueDTO> dtoList = new ArrayList<>();
+        for (int i = 0; i < json.size(); i++) {
+            CodeClassifyValueDTO codeFixedValueDTO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(json.get(i))), CodeClassifyValueDTO.class);
+            dtoList.add(codeFixedValueDTO);
+        }
+        String codeclassifysecoid = (String) param.get("codeclassifysecoid");
+        VciBaseUtil.alertNotNull(dtoList,"鐮佸�奸泦鍚�");
+        if (CollectionUtils.isEmpty(dtoList)){
+            return R.success("");
+        }
+        return codeClassifyValueService.batchSave4Order(dtoList,codeclassifysecoid);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java
index 980f9a4..4f61b25 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java
@@ -25,10 +25,10 @@
 import com.vci.ubcs.code.mapper.CodeClstemplateMapper;
 import com.vci.ubcs.code.service.ICodeClstemplateService;
 import com.vci.ubcs.code.vo.CodeClstemplateVO;
-import com.vci.ubcs.code.vo.pagemodel.TreeQueryObject;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
 import com.vci.ubcs.code.wrapper.PlCodeClstemplateWrapper;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.Tree;
-import com.vci.ubcs.com.vci.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.pagemodel.Tree;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -210,7 +210,7 @@
 
 	/**
 	 * 鍚敤
-	 * @param codeClstemplateEntity oid
+	 * @param codeClstemplateDTO oid
 	 * @return
 	 */
 	@PostMapping( "/enableData")
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java
new file mode 100644
index 0000000..0ffc334
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java
@@ -0,0 +1,141 @@
+package com.vci.ubcs.code.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.code.dto.CodeFixedValueDTO;
+import com.vci.ubcs.code.entity.CodeFixedValue;
+import com.vci.ubcs.code.service.ICodeFixedValueService;
+import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼帶鍒跺櫒
+ *
+ * @author ludc
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeFixedValueController")
+@Api(value = "鍥哄畾鐮佹鐨勭爜鍊兼帶鍒跺櫒", tags = "鍥哄畾鐮佹鐨勭爜鍊兼帶鍒跺櫒")
+public class CodeFixedValueController {
+
+    /**
+    * 鍥哄畾鐮佹鐨勭爜鍊� 鏈嶅姟
+    */
+    @Autowired
+    private ICodeFixedValueService codeFixedValueService;
+
+    /**
+     * 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param codeFixedValueVO query 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeFixedValue")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鍒嗛〉 鐮佹鍩虹淇℃伅鍒楄〃", notes = "CodeFixedValueVO")
+    public R<IPage<CodeFixedValueVO>> gridCodeFixedValue(CodeFixedValueVO codeFixedValueVO, Query query){
+        return R.data(codeFixedValueService.gridCodeFixedValue(codeFixedValueVO, Condition.getPage(query.setAscs("ordernum"))));
+    }
+
+    /**
+     * 澧炲姞 鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public R addSave(@RequestBody CodeFixedValueDTO codeFixedValueDTO){
+         boolean resBoolean = codeFixedValueService.addSave(codeFixedValueDTO);
+         return R.status(resBoolean);
+    }
+
+    /**
+     * 淇敼 鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public R editSave(@RequestBody CodeFixedValueDTO codeFixedValueDTO){
+		boolean resBoolean = codeFixedValueService.editSave(codeFixedValueDTO);
+		return R.status(resBoolean);
+    }
+
+    /**
+     * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public R delCodeFixedValue(@RequestBody CodeFixedValueDTO codeFixedValueDTO) {
+        return codeFixedValueService.deleteCodeFixedValue(codeFixedValueDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public R<CodeFixedValueVO> getObjectByOid(String oid){
+        CodeFixedValueVO codeFixedValueVO = codeFixedValueService.getObjectByOid(oid);
+        return R.data(codeFixedValueVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public R<Collection<CodeFixedValueVO>> listCodeFixedValueByOids(String oids){
+        Collection<CodeFixedValueVO> voCollection =  codeFixedValueService.listCodeFixedValueByOids(VciBaseUtil.str2List(oids));
+        return R.data(voCollection);
+    }
+
+    /**
+     * 鍙傜収鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param codeFixedValueVO query 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public R<IPage<CodeFixedValueVO>> refDataGridCodeFixedValue(CodeFixedValueVO codeFixedValueVO, Query query){
+        return R.data(codeFixedValueService.refDataGridCodeFixedValue(codeFixedValueVO,Condition.getPage(query.setAscs("ordernum"))));
+    }
+
+    /**
+     * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+     * @param param 鍙傛暟锛屽寘鎷琩toList 椤甸潰浼犺緭瀵硅薄闆嗗悎 codefixedsecoid 鍥哄畾鐮佹涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping("/saveOrder")
+    public R batchSave4Order(@RequestBody Map<String,Object> param){
+		JSONArray json = JSONArray.parseArray(String.valueOf(param.get("dtoList")));
+        List<CodeFixedValueDTO> dtoList = new ArrayList<>();
+        for (int i = 0; i < json.size(); i++) {
+            CodeFixedValueDTO codeFixedValueDTO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(json.get(i))), CodeFixedValueDTO.class);
+            dtoList.add(codeFixedValueDTO);
+        }
+        String codefixedsecoid = (String) param.get("codeFixedSecOid");
+        VciBaseUtil.alertNotNull(dtoList,"鐮佸�煎璞¢泦鍚�",codefixedsecoid,"鍥哄畾鐮佹鐨勪富閿�");
+        if (CollectionUtils.isEmpty(dtoList)){
+            return R.status(codeFixedValueService.batchDeleteBySecOid(codefixedsecoid));
+        }
+        return codeFixedValueService.batchSave4Order(dtoList,codefixedsecoid);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java
index 72bf049..99ca7bb 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java
@@ -19,8 +19,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
-import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
 import com.vci.ubcs.code.service.ICodePhaseattrService;
 import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import com.vci.ubcs.code.wrapper.CodePhaseattrWrapper;
@@ -51,7 +51,7 @@
 
 	private final ICodePhaseattrService CodePhaseattrService;
 
-	private CodePhaseattrMapper codePhaseattrMapper;
+	private CodePhaseAttrMapper codePhaseAttrMapper;
 
 	/**
 	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 璇︽儏
@@ -59,8 +59,8 @@
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "璇︽儏", notes = "浼犲叆CodePhaseattr")
-	public R<CodePhaseattrVO> detail(CodePhaseattrEntity CodePhaseattr) {
-		CodePhaseattrEntity detail = CodePhaseattrService.getOne(Condition.getQueryWrapper(CodePhaseattr));
+	public R<CodePhaseattrVO> detail(CodePhaseAttr CodePhaseattr) {
+		CodePhaseAttr detail = CodePhaseattrService.getOne(Condition.getQueryWrapper(CodePhaseattr));
 		return R.data(CodePhaseattrWrapper.build().entityVO(detail));
 	}
 	/**
@@ -69,8 +69,8 @@
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodePhaseattr")
-	public R<IPage<CodePhaseattrVO>> list(CodePhaseattrEntity CodePhaseattr, Query query) {
-		IPage<CodePhaseattrEntity> pages = CodePhaseattrService.page(Condition.getPage(query), Condition.getQueryWrapper(CodePhaseattr));
+	public R<IPage<CodePhaseattrVO>> list(CodePhaseAttr CodePhaseattr, Query query) {
+		IPage<CodePhaseAttr> pages = CodePhaseattrService.page(Condition.getPage(query), Condition.getQueryWrapper(CodePhaseattr));
 		return R.data(CodePhaseattrWrapper.build().pageVO(pages));
 	}
 
@@ -91,7 +91,7 @@
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "鏂板", notes = "浼犲叆CodePhaseattr")
-	public R save(@Valid @RequestBody CodePhaseattrEntity CodePhaseattr) {
+	public R save(@Valid @RequestBody CodePhaseAttr CodePhaseattr) {
 		return R.status(CodePhaseattrService.save(CodePhaseattr));
 	}
 
@@ -101,7 +101,7 @@
 	@PostMapping("/update")
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "淇敼", notes = "浼犲叆CodePhaseattr")
-	public R update(@Valid @RequestBody CodePhaseattrEntity CodePhaseattr) {
+	public R update(@Valid @RequestBody CodePhaseAttr CodePhaseattr) {
 		return R.status(CodePhaseattrService.updateById(CodePhaseattr));
 	}
 
@@ -111,7 +111,7 @@
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆CodePhaseattr")
-	public R submit(@Valid @RequestBody CodePhaseattrEntity CodePhaseattr) {
+	public R submit(@Valid @RequestBody CodePhaseAttr CodePhaseattr) {
 		return R.status(CodePhaseattrService.saveOrUpdate(CodePhaseattr));
 	}
 
@@ -122,7 +122,7 @@
 	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
 	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(SqlHelper.retBool(codePhaseattrMapper.deleteBatchIds(Func.toLongList(ids))));
+		return R.status(SqlHelper.retBool(codePhaseAttrMapper.deleteBatchIds(Func.toLongList(ids))));
 	}
 
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java
index 881e106..0540298 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java
@@ -24,7 +24,8 @@
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
 import com.vci.ubcs.code.wrapper.CodeRuleWrapper;
-import com.vci.ubcs.com.vci.starter.web.util.VciBaseUtil;
+
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempbuttonController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempbuttonController.java
deleted file mode 100644
index 2951532..0000000
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempbuttonController.java
+++ /dev/null
@@ -1,129 +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.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import com.vci.ubcs.code.mapper.CodeTempbuttonMapper;
-import com.vci.ubcs.code.service.ICodeTempbuttonService;
-import com.vci.ubcs.code.vo.CodeTempbuttonVO;
-import com.vci.ubcs.code.wrapper.CodeTempbuttonWrapper;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鎺у埗鍣�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("ubcs-code/CodeTempbutton")
-@Api(value = "缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍", tags = "缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍鎺ュ彛")
-public class CodeTempbuttonController extends BladeController {
-
-	private final ICodeTempbuttonService CodeTempbuttonService;
-
-	private CodeTempbuttonMapper codeTempbuttonMapper;
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆CodeTempbutton")
-	public R<CodeTempbuttonVO> detail(CodeTempbuttonEntity CodeTempbutton) {
-		CodeTempbuttonEntity detail = CodeTempbuttonService.getOne(Condition.getQueryWrapper(CodeTempbutton));
-		return R.data(CodeTempbuttonWrapper.build().entityVO(detail));
-	}
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodeTempbutton")
-	public R<IPage<CodeTempbuttonVO>> list(CodeTempbuttonEntity CodeTempbutton, Query query) {
-		IPage<CodeTempbuttonEntity> pages = CodeTempbuttonService.page(Condition.getPage(query), Condition.getQueryWrapper(CodeTempbutton));
-		return R.data(CodeTempbuttonWrapper.build().pageVO(pages));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鑷畾涔夊垎椤�
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodeTempbutton")
-	public R<IPage<CodeTempbuttonVO>> page(CodeTempbuttonVO CodeTempbutton, Query query) {
-		IPage<CodeTempbuttonVO> pages = CodeTempbuttonService.selectCodeTempbuttonPage(Condition.getPage(query), CodeTempbutton);
-		return R.data(pages);
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鏂板
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆CodeTempbutton")
-	public R save(@Valid @RequestBody CodeTempbuttonEntity CodeTempbutton) {
-		return R.status(CodeTempbuttonService.save(CodeTempbutton));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 淇敼
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆CodeTempbutton")
-	public R update(@Valid @RequestBody CodeTempbuttonEntity CodeTempbutton) {
-		return R.status(CodeTempbuttonService.updateById(CodeTempbutton));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆CodeTempbutton")
-	public R submit(@Valid @RequestBody CodeTempbuttonEntity CodeTempbutton) {
-		return R.status(CodeTempbuttonService.saveOrUpdate(CodeTempbutton));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(SqlHelper.retBool(codeTempbuttonMapper.deleteBatchIds(Func.toLongList(ids))));
-	}
-
-
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java
new file mode 100644
index 0000000..720281f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java
@@ -0,0 +1,160 @@
+/*
+ *      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.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.code.dto.CodeTemplatePhaseDTO;
+import com.vci.ubcs.code.service.ICodeTempphaseService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
+import com.vci.ubcs.code.wrapper.CodeTempphaseWrapper;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鎺у埗鍣�
+ *
+ * @author ludc
+ * @since 2023-04-20
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/codeTempPhaseController")
+@Api(value = "缂栫爜搴撳畾涔�-妯℃澘闃舵", tags = "缂栫爜搴撳畾涔�-妯℃澘闃舵鎺ュ彛")
+public class CodeTemplatePhaseController extends BladeController {
+
+	/**
+	 * 妯℃澘闃舵 鏈嶅姟
+	 */
+	private final ICodeTempphaseService codeTemplatePhaseService;
+
+	/**
+	 * 妯℃澘闃舵鍒楄〃
+	 * @param codeTemplatePhaseVO 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+	 * @param query
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃
+	 */
+	@GetMapping("/gridCodeTemplatePhase")
+	public DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(CodeTemplatePhaseVO codeTemplatePhaseVO,Query query){
+		return codeTemplatePhaseService.gridCodeTemplatePhase(codeTemplatePhaseVO,query);
+	}
+
+	/**
+	 * 澧炲姞 妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+	 */
+	@PostMapping( "/addSave")
+	public R<CodeTemplatePhaseVO> addSave(@RequestBody CodeTemplatePhaseDTO codeTemplatePhaseDTO){
+		return R.data(codeTemplatePhaseService.addSave(codeTemplatePhaseDTO));
+	}
+
+	/**
+	 * 淇敼 妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+	 */
+	@PutMapping("/editSave")
+	public R<CodeTemplatePhaseVO> editSave(@RequestBody CodeTemplatePhaseDTO codeTemplatePhaseDTO){
+		CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.editSave(codeTemplatePhaseDTO);
+		return R.data(codeTemplatePhaseVO);
+	}
+
+	/**
+	 * 鍒犻櫎妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 */
+	@DeleteMapping( "/deleteData")
+	public R delCodeTemplatePhase( CodeTemplatePhaseDTO codeTemplatePhaseDTO) {
+		return codeTemplatePhaseService.deleteCodeTemplatePhase(codeTemplatePhaseDTO);
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇妯℃澘闃舵
+	 * @param oid 涓婚敭
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 */
+	@GetMapping("/getObjectByOid")
+	public R<CodeTemplatePhaseVO> getObjectByOid(String oid){
+		CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.getObjectByOid(oid);
+		return R.data(codeTemplatePhaseVO);
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
+	 * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 */
+	@GetMapping("/listDataByOids")
+	public R<Collection<CodeTemplatePhaseVO>> listCodeTemplatePhaseByOids(String oids){
+		Collection<CodeTemplatePhaseVO> voCollection =  codeTemplatePhaseService.listCodeTemplatePhaseByOids(VciBaseUtil.str2List(oids));
+		return R.data(voCollection);
+	}
+
+	/**
+	 * 鍙傜収妯℃澘闃舵鍒楄〃
+	 * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+	 */
+	@GetMapping("/refDataGrid")
+	public DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(BaseQueryObject baseQueryObject){
+		if(baseQueryObject == null){
+			baseQueryObject = new BaseQueryObject();
+		}
+		return codeTemplatePhaseService.refDataGridCodeTemplatePhase(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+	}
+
+	/**
+	 * 鑾峰彇闃舵涓病鏈変娇鐢ㄧ殑妯℃澘灞炴��
+	 * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	@GetMapping("/gridUnUsedAttribute")
+	public DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(BaseQueryObject baseQueryObject){
+		return codeTemplatePhaseService.gridUnUsedAttribute(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+	}
+
+	/**
+	 * 鑾峰彇闃舵涓娇鐢ㄧ殑妯℃澘灞炴��
+	 * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	@GetMapping("/gridUsedAttribute")
+	public DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(BaseQueryObject baseQueryObject){
+		return codeTemplatePhaseService.gridUsedAttribute(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempphaseController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempphaseController.java
deleted file mode 100644
index a2dc26e..0000000
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempphaseController.java
+++ /dev/null
@@ -1,129 +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.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import com.vci.ubcs.code.mapper.CodeTempphaseMapper;
-import com.vci.ubcs.code.service.ICodeTempphaseService;
-import com.vci.ubcs.code.vo.CodeTempphaseVO;
-import com.vci.ubcs.code.wrapper.CodeTempphaseWrapper;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鎺у埗鍣�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("ubcs-code/CodeTempphase")
-@Api(value = "缂栫爜搴撳畾涔�-妯℃澘闃舵", tags = "缂栫爜搴撳畾涔�-妯℃澘闃舵鎺ュ彛")
-public class CodeTempphaseController extends BladeController {
-
-
-	private final ICodeTempphaseService CodeTempphaseService;
-
-	private CodeTempphaseMapper codeTempphaseMapper;
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆CodeTempphase")
-	public R<CodeTempphaseVO> detail(CodeTempphaseEntity CodeTempphase) {
-		CodeTempphaseEntity detail = CodeTempphaseService.getOne(Condition.getQueryWrapper(CodeTempphase));
-		return R.data(CodeTempphaseWrapper.build().entityVO(detail));
-	}
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodeTempphase")
-	public R<IPage<CodeTempphaseVO>> list(CodeTempphaseEntity CodeTempphase, Query query) {
-		IPage<CodeTempphaseEntity> pages = CodeTempphaseService.page(Condition.getPage(query), Condition.getQueryWrapper(CodeTempphase));
-		return R.data(CodeTempphaseWrapper.build().pageVO(pages));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鑷畾涔夊垎椤�
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodeTempphase")
-	public R<IPage<CodeTempphaseVO>> page(CodeTempphaseVO CodeTempphase, Query query) {
-		IPage<CodeTempphaseVO> pages = CodeTempphaseService.selectCodeTempphasePage(Condition.getPage(query), CodeTempphase);
-		return R.data(pages);
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鏂板
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆CodeTempphase")
-	public R save(@Valid @RequestBody CodeTempphaseEntity CodeTempphase) {
-		return R.status(CodeTempphaseService.save(CodeTempphase));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 淇敼
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆CodeTempphase")
-	public R update(@Valid @RequestBody CodeTempphaseEntity CodeTempphase) {
-		return R.status(CodeTempphaseService.updateById(CodeTempphase));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆CodeTempphase")
-	public R submit(@Valid @RequestBody CodeTempphaseEntity CodeTempphase) {
-		return R.status(CodeTempphaseService.saveOrUpdate(CodeTempphase));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(SqlHelper.retBool(codeTempphaseMapper.deleteBatchIds(Func.toLongList(ids))));
-	}
-
-
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeButtonUseEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeButtonUseEnum.java
index 7e56beb..4339f39 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeButtonUseEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeButtonUseEnum.java
@@ -1,9 +1,12 @@
 package com.vci.ubcs.code.enumpack;
 
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
+
+
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
+
 
 /**
  * 妯℃澘鐨勬寜閽敤閫�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeClassifyProcessUseEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeClassifyProcessUseEnum.java
index 2dad86f..3129d37 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeClassifyProcessUseEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeClassifyProcessUseEnum.java
@@ -1,8 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * 鍒嗙被鐨勬祦绋嬬殑鐢ㄩ��
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeCutTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeCutTypeEnum.java
index 5fd2104..9d68e0f 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeCutTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeCutTypeEnum.java
@@ -1,9 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * 鎴彇绫诲瀷
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeGetValueTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeGetValueTypeEnum.java
index f7598a6..c531f55 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeGetValueTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeGetValueTypeEnum.java
@@ -1,10 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
 
-
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * 鍙栧�肩被鍨�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeLevelTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeLevelTypeEnum.java
index 5924802..5f75d90 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeLevelTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeLevelTypeEnum.java
@@ -1,9 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * 灞傜骇鐮佹鐨勫眰绾х被鍨�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeMapRuleTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeMapRuleTypeEnum.java
index 6810f5b..51ed055 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeMapRuleTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeMapRuleTypeEnum.java
@@ -1,10 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
 
-
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * 鏄犲皠瑙勫垯绫诲瀷
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecLengthTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecLengthTypeEnum.java
index d11e275..9321e22 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecLengthTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecLengthTypeEnum.java
@@ -1,9 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * 鐮佹闀垮害鎺у埗绫诲瀷
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecTypeEnum.java
index 36be6d2..14d4f22 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeSecTypeEnum.java
@@ -1,8 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
+
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * 鐮佹鐨勭被鍨�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeUseButtonPositionTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeUseButtonPositionTypeEnum.java
index 51935a3..1449047 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeUseButtonPositionTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/CodeUseButtonPositionTypeEnum.java
@@ -1,8 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * 鎸夐挳浣跨敤浣嶇疆
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/NewAppConstantEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/NewAppConstantEnum.java
new file mode 100644
index 0000000..6baffd7
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/NewAppConstantEnum.java
@@ -0,0 +1,45 @@
+package com.vci.ubcs.code.enumpack;
+
+import org.springblade.core.launch.constant.AppConstant;
+
+public enum NewAppConstantEnum {
+
+	/**
+	 * 缂栫爜瑙勫垯锛屾湇鍔″惎鍔ㄥ悕
+	 */
+	APPLICATION_NAME_CODE(AppConstant.APPLICATION_NAME_CODE,"缂栫爜瑙勫垯鏈嶅姟"),
+	;
+
+	/**
+	 * 鏋氫妇鐨刵ame
+	 */
+	private String name;
+
+	/**
+	 * 鏋氫妇鏄剧ず鏂囨湰
+	 */
+	private String text;
+
+	NewAppConstantEnum(String name, String text) {
+		this.name = name;
+		this.text = text;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getText() {
+		return text;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationAuthorityTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationAuthorityTypeEnum.java
index b794b9b..e8b4cb7 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationAuthorityTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationAuthorityTypeEnum.java
@@ -1,9 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * Description: 绯荤粺闆嗘垚楠岃瘉鏂瑰紡
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationDataFlowTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationDataFlowTypeEnum.java
index de77139..316825f 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationDataFlowTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationDataFlowTypeEnum.java
@@ -1,7 +1,7 @@
 package com.vci.ubcs.code.enumpack;
 
 
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * Description:鏁版嵁娴佸悜鏂瑰紡
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java
index 0d52784..fa36bee 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java
@@ -1,9 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * Description: 绯荤粺闆嗘垚鎺ュ彛鍙傛暟涓庤繑鍥炲�肩被鍨�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestMethodEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestMethodEnum.java
index a8390e4..ceda9e9 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestMethodEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestMethodEnum.java
@@ -1,9 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * Description:绯荤粺闆嗘垚鎺ュ彛璇锋眰鏂瑰紡绫诲瀷
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestTypeEnum.java
index 238ecf6..5bb1945 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/SysIntegrationRequestTypeEnum.java
@@ -1,9 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * Description:绯荤粺闆嗘垚鎺ュ彛鐨勭被鍨�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java
index e945db8..6d792ed 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java
@@ -1,9 +1,9 @@
 package com.vci.ubcs.code.enumpack;
 
 
-import com.vci.ubcs.com.vci.starter.annotation.VciEnum;
-import com.vci.ubcs.com.vci.starter.web.constant.MdmEnumIdConstant;
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+import com.vci.ubcs.starter.annotation.VciEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 @VciEnum(name = MdmEnumIdConstant.SYS_INTEGRATION_PUSH_TYPE,text = "绯荤粺鎺ュ彛鎺ㄩ�佹柟寮�",description = "")
 public enum sysIntegrationPushTypeEnum implements BaseEnum {
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeButtonClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeButtonClient.java
index 9170f02..0f6ddc8 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeButtonClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeButtonClient.java
@@ -18,7 +18,7 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.vci.ubcs.code.entity.CodeButtonEntity;
+import com.vci.ubcs.code.entity.CodeButton;
 import com.vci.ubcs.code.entity.CodeKeyattrrepeatEntity;
 import com.vci.ubcs.code.mapper.CodeButtonMapper;
 import com.vci.ubcs.code.service.ICodeButtonService;
@@ -48,13 +48,13 @@
 
     @Override
     @GetMapping(TOP)
-    public BladePage<CodeButtonEntity> top(Integer current, Integer size) {
+    public BladePage<CodeButton> top(Integer current, Integer size) {
         Query query = new Query();
         query.setCurrent(current);
         query.setSize(size);
 //		IPage<CodeKeyattrrepeatEntity> page = codeKeyattrrepeatMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
 
-        IPage<CodeButtonEntity> page = codeButtonMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
+        IPage<CodeButton> page = codeButtonMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
 //		IPage<CodeKeyattrrepeatEntity> page = codebuttonService.page(Condition.getPage(query));
 //        return null;
         return BladePage.of(page);
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java
index a36576b..d89b166 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java
@@ -18,12 +18,12 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
 import lombok.AllArgsConstructor;
 import org.springblade.core.mp.support.BladePage;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
 import com.vci.ubcs.code.service.ICodePhaseattrService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -40,15 +40,15 @@
 @AllArgsConstructor
 public class CodePhaseattrClient implements ICodePhaseattrClient {
 
-    private final CodePhaseattrMapper codePhaseattrMapper;
+    private final CodePhaseAttrMapper codePhaseAttrMapper;
 
     @Override
     @GetMapping(TOP)
-    public BladePage<CodePhaseattrEntity> top(Integer current, Integer size) {
+    public BladePage<CodePhaseAttr> top(Integer current, Integer size) {
         Query query = new Query();
         query.setCurrent(current);
         query.setSize(size);
-        IPage<CodePhaseattrEntity> page = codePhaseattrMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
+        IPage<CodePhaseAttr> page = codePhaseAttrMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
 		return BladePage.of(page);
     }
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempbuttonClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempbuttonClient.java
index 7945cdd..981f26f 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempbuttonClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempbuttonClient.java
@@ -18,12 +18,12 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.vci.ubcs.code.mapper.CodeTempbuttonMapper;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
+import com.vci.ubcs.code.mapper.CodeClassifyTemplateButtonMapper;
 import lombok.AllArgsConstructor;
 import org.springblade.core.mp.support.BladePage;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
 import com.vci.ubcs.code.service.ICodeTempbuttonService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -41,15 +41,15 @@
 public class CodeTempbuttonClient implements ICodeTempbuttonClient {
 
 
-    private final CodeTempbuttonMapper codeTempbuttonMapper;
+    private final CodeClassifyTemplateButtonMapper codeTempbuttonMapper;
 
     @Override
     @GetMapping(TOP)
-    public BladePage<CodeTempbuttonEntity> top(Integer current, Integer size) {
+    public BladePage<CodeClassifyTemplateButton> top(Integer current, Integer size) {
         Query query = new Query();
         query.setCurrent(current);
         query.setSize(size);
-        IPage<CodeTempbuttonEntity> page = codeTempbuttonMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
+        IPage<CodeClassifyTemplateButton> page = codeTempbuttonMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
 
 		return BladePage.of(page);
     }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempphaseClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempphaseClient.java
index 24ff7cd..03b4fd3 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempphaseClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempphaseClient.java
@@ -18,13 +18,12 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.vci.ubcs.code.mapper.CodeTempphaseMapper;
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import com.vci.ubcs.code.mapper.CodeTemplatePhaseMapper;
 import lombok.AllArgsConstructor;
 import org.springblade.core.mp.support.BladePage;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import com.vci.ubcs.code.service.ICodeTempphaseService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
@@ -40,15 +39,15 @@
 @AllArgsConstructor
 public class CodeTempphaseClient implements ICodeTempphaseClient {
 
-    private final CodeTempphaseMapper codeTempphaseMapper;
+    private final CodeTemplatePhaseMapper codeTempphaseMapper;
 
     @Override
     @GetMapping(TOP)
-    public BladePage<CodeTempphaseEntity> top(Integer current, Integer size) {
+    public BladePage<CodeTemplatePhase> top(Integer current, Integer size) {
         Query query = new Query();
         query.setCurrent(current);
         query.setSize(size);
-        IPage<CodeTempphaseEntity> page = codeTempphaseMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
+        IPage<CodeTemplatePhase> page = codeTempphaseMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
 
 		return BladePage.of(page);
     }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeButtonClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeButtonClient.java
index 7166837..fe08afd 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeButtonClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeButtonClient.java
@@ -16,7 +16,7 @@
  */
 package com.vci.ubcs.code.feign;
 
-import com.vci.ubcs.code.entity.CodeButtonEntity;
+import com.vci.ubcs.code.entity.CodeButton;
 import org.springblade.core.mp.support.BladePage;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -44,6 +44,6 @@
      * @return BladePage
      */
     @GetMapping(TOP)
-    BladePage<CodeButtonEntity> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
+    BladePage<CodeButton> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodePhaseattrClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodePhaseattrClient.java
index 969bb62..fb43ec3 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodePhaseattrClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodePhaseattrClient.java
@@ -16,8 +16,9 @@
  */
 package com.vci.ubcs.code.feign;
 
+import com.vci.ubcs.code.entity.CodePhaseAttr;
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
 import org.springblade.core.mp.support.BladePage;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -44,6 +45,6 @@
      * @return BladePage
      */
     @GetMapping(TOP)
-    BladePage<CodePhaseattrEntity> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
+    BladePage<CodePhaseAttr> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempbuttonClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempbuttonClient.java
index b102e4a..cd6943b 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempbuttonClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempbuttonClient.java
@@ -16,8 +16,8 @@
  */
 package com.vci.ubcs.code.feign;
 
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
 import org.springblade.core.mp.support.BladePage;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -44,6 +44,6 @@
      * @return BladePage
      */
     @GetMapping(TOP)
-    BladePage<CodeTempbuttonEntity> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
+    BladePage<CodeClassifyTemplateButton> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempphaseClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempphaseClient.java
index 0b007f3..19b4b37 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempphaseClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempphaseClient.java
@@ -16,8 +16,8 @@
  */
 package com.vci.ubcs.code.feign;
 
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
 import org.springblade.core.mp.support.BladePage;
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -44,6 +44,6 @@
      * @return BladePage
      */
     @GetMapping(TOP)
-    BladePage<CodeTempphaseEntity> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
+    BladePage<CodeTemplatePhase> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeRuleLC.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeRuleLC.java
index 98a3e2c..27efdcf 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeRuleLC.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/lifecycle/CodeRuleLC.java
@@ -1,8 +1,9 @@
 package com.vci.ubcs.code.lifecycle;
 
 
-import com.vci.ubcs.com.vci.starter.web.enumpck.BaseEnum;
+
 import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
+import com.vci.ubcs.starter.web.enumpck.BaseEnum;
 
 /**
  * 缂栫爜瑙勫垯鐨勭敓鍛藉懆鏈�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeButtonMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeButtonMapper.java
index 4e1a71d..3b51c7e 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeButtonMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeButtonMapper.java
@@ -18,8 +18,8 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.vci.ubcs.code.entity.CodeButtonEntity;
-import com.vci.ubcs.code.vo.CodeButtonVO;
+import com.vci.ubcs.code.entity.CodeButton;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
 
 import java.util.List;
 
@@ -29,7 +29,7 @@
  * @author yuxc
  * @since 2023-03-29
  */
-public interface CodeButtonMapper extends BaseMapper<CodeButtonEntity> {
+public interface CodeButtonMapper extends BaseMapper<CodeButton> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
index a363528..ce03874 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
@@ -81,6 +81,9 @@
 	@MapKey("oid")
 	List<Map<String,Object>> selectAllLevelParentByOid(@Param("oid") String oid);
 
+	@MapKey("oid")
+	List<Map<String,Object>> selectAllLevelParents(@Param("oid") String oid);
+
 
 	@MapKey("oid")
 	List<Map<String,Object>> selectByFieldPath(@Param("fieldPath") String fieldPath);
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyProcessTempMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyProcessTempMapper.java
new file mode 100644
index 0000000..4176631
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyProcessTempMapper.java
@@ -0,0 +1,17 @@
+package com.vci.ubcs.code.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹搷浣滃眰
+ *
+ * @author ludc
+ * @since 2023-05-05
+ */
+public interface CodeClassifyProcessTempMapper extends BaseMapper<CodeClassifyProcessTemp> {
+
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java
new file mode 100644
index 0000000..c686357
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.code.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.code.entity.CodeClassify;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
+
+public interface CodeClassifyTemplateAttrMapper extends BaseMapper<CodeClassifyTemplateAttr> {
+
+
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateButtonMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateButtonMapper.java
new file mode 100644
index 0000000..df8b888
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateButtonMapper.java
@@ -0,0 +1,44 @@
+/*
+ *      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.mapper;
+
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
+
+import java.util.List;
+
+/**
+ * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 Mapper 鎺ュ彛
+ *
+ * @author yuxc
+ * @since 2023-04-20
+ */
+public interface CodeClassifyTemplateButtonMapper extends BaseMapper<CodeClassifyTemplateButton> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param CodeTempbutton
+	 * @return
+	 */
+	List<CodeClassifyTemplateButtonVO> selectCodeTempbuttonPage(IPage page, CodeClassifyTemplateButtonVO CodeTempbutton);
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java
index 5e87d10..10196de 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java
@@ -20,9 +20,11 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.vci.ubcs.code.entity.CodeClstemplateEntity;
 import com.vci.ubcs.code.vo.CodeClstemplateVO;
+import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘绠$悊 Mapper 鎺ュ彛
@@ -57,5 +59,17 @@
 	 */
 	int countAllLevelChildOid(@Param("oid") String oid);
 
+	/**
+	 * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+	 *
+	 * @param nameoid
+	 * @return
+	 */
+	@MapKey("REVISIONSEQ")
+	Map<String,Object> getNextRevision(@Param("nameoid") String nameoid);
 
+
+
+	List<CodeClstemplateEntity> selectCodeClassifyTemplateDOByTree(@Param("codeclassifyoid") String codeclassifyoid,
+																   @Param("lcstatus") String lcstatus);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeFixedValueMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeFixedValueMapper.java
index 6070d0f..393b5e4 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeFixedValueMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeFixedValueMapper.java
@@ -1,7 +1,14 @@
 package com.vci.ubcs.code.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.vci.ubcs.code.entity.CodeFixedValue;
+import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Page;
+
+import java.util.Collection;
+import java.util.List;
 
 /**
  * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
@@ -11,5 +18,20 @@
  */
 public interface CodeFixedValueMapper extends BaseMapper<CodeFixedValue> {
 
+	/**
+	 * 鑷畾涔夊垎椤垫煡璇�
+	 * @param codeFixedValueVO
+	 * @param page
+	 * @return
+	 */
+	List<CodeFixedValue> selectByPage(@Param("codeFixedValueVO") CodeFixedValueVO codeFixedValueVO, IPage<CodeFixedValueVO> page);
+
+	/**
+	 * 澶氭潯codefixedsecoid鐨勫垎椤垫煡璇�
+	 * @return
+	 */
+	List<CodeFixedValue> selectByPageByCodeFixedSecOid(@Param("secOids") Collection<String> secOids, IPage<CodeFixedValueVO> page);
+
+
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java
new file mode 100644
index 0000000..187b185
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java
@@ -0,0 +1,47 @@
+/*
+ *      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.mapper;
+
+import com.vci.ubcs.code.entity.CodePhaseAttr;
+import com.vci.ubcs.code.vo.CodePhaseattrVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� Mapper 鎺ュ彛
+ *
+ * @author yuxc
+ * @since 2023-04-20
+ */
+public interface CodePhaseAttrMapper extends BaseMapper<CodePhaseAttr> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param CodePhaseattr
+	 * @return
+	 */
+	List<CodePhaseattrVO> selectCodePhaseattrPage(IPage page, CodePhaseattrVO CodePhaseattr);
+
+	List<CodePhaseAttr> selectByPhasea(String oid);
+
+	List<CodePhaseAttr> selectByPhaseaIds(String oids);
+
+	List<CodePhaseAttr> listLinkAttrDOByTemplateAttrDOS(String id,String codeClassifyTemplateOid);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java
index 7765694..187b185 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java
@@ -16,7 +16,7 @@
  */
 package com.vci.ubcs.code.mapper;
 
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
 import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -28,7 +28,7 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface CodePhaseattrMapper extends BaseMapper<CodePhaseattrEntity> {
+public interface CodePhaseAttrMapper extends BaseMapper<CodePhaseAttr> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
@@ -39,6 +39,9 @@
 	 */
 	List<CodePhaseattrVO> selectCodePhaseattrPage(IPage page, CodePhaseattrVO CodePhaseattr);
 
+	List<CodePhaseAttr> selectByPhasea(String oid);
 
-	List<CodePhaseattrEntity> selectByPhasea(String oid);
+	List<CodePhaseAttr> selectByPhaseaIds(String oids);
+
+	List<CodePhaseAttr> listLinkAttrDOByTemplateAttrDOS(String id,String codeClassifyTemplateOid);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempbuttonMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempbuttonMapper.java
deleted file mode 100644
index aaad9cc..0000000
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempbuttonMapper.java
+++ /dev/null
@@ -1,43 +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.mapper;
-
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import com.vci.ubcs.code.vo.CodeTempbuttonVO;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import java.util.List;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 Mapper 鎺ュ彛
- *
- * @author yuxc
- * @since 2023-04-20
- */
-public interface CodeTempbuttonMapper extends BaseMapper<CodeTempbuttonEntity> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param CodeTempbutton
-	 * @return
-	 */
-	List<CodeTempbuttonVO> selectCodeTempbuttonPage(IPage page, CodeTempbuttonVO CodeTempbutton);
-
-
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTemplatePhaseMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTemplatePhaseMapper.java
new file mode 100644
index 0000000..fe88200
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTemplatePhaseMapper.java
@@ -0,0 +1,44 @@
+/*
+ *      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.mapper;
+
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
+
+import java.util.List;
+
+/**
+ * 缂栫爜搴撳畾涔�-妯℃澘闃舵 Mapper 鎺ュ彛
+ *
+ * @author yuxc
+ * @since 2023-04-20
+ */
+public interface CodeTemplatePhaseMapper extends BaseMapper<CodeTemplatePhase> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param CodeTempphase
+	 * @return
+	 */
+	List<CodeTemplatePhaseVO> selectCodeTempphasePage(IPage page, CodeTemplatePhaseVO CodeTempphase);
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempphaseMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempphaseMapper.java
deleted file mode 100644
index c1587f3..0000000
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempphaseMapper.java
+++ /dev/null
@@ -1,43 +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.mapper;
-
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import com.vci.ubcs.code.vo.CodeTempphaseVO;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import java.util.List;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵 Mapper 鎺ュ彛
- *
- * @author yuxc
- * @since 2023-04-20
- */
-public interface CodeTempphaseMapper extends BaseMapper<CodeTempphaseEntity> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param CodeTempphase
-	 * @return
-	 */
-	List<CodeTempphaseVO> selectCodeTempphasePage(IPage page, CodeTempphaseVO CodeTempphase);
-
-
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
index 1b80ffd..0162239 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
@@ -3,6 +3,7 @@
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -16,6 +17,6 @@
 	@MapKey("count")
 	Map<String,String> selectByCount(@Param("tableName") String tableName,@Param("oid") String oid,@Param("btm") String btm);
 
-
+	List<String> selectById(@Param("inSql") String inSql);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
index 4fe4c35..e8aeda0 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
@@ -5,8 +5,8 @@
 import com.vci.ubcs.code.dto.CodeBasicSecDTO;
 import com.vci.ubcs.code.entity.CodeBasicSec;
 import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.KeyValue;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.KeyValue;
 import org.springblade.core.tool.api.R;
 
 import java.util.Collection;
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeButtonService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeButtonService.java
index ea53f0a..2daf4a6 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeButtonService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeButtonService.java
@@ -17,8 +17,13 @@
 package com.vci.ubcs.code.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.vci.ubcs.code.vo.CodeButtonVO;
+import com.vci.ubcs.code.entity.CodeButton;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
 import org.springblade.core.tool.api.R;
+
+import java.util.Collection;
+import java.util.List;
 
 /**
  * 妯℃澘鎵╁睍姹� 鏈嶅姟绫�
@@ -38,6 +43,37 @@
 	IPage<CodeButtonVO> selectcodebuttonPage(IPage<CodeButtonVO> page, CodeButtonVO codebutton);
 
 	/**
+	 * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	Collection<CodeButtonVO> listCodeButtonByOids(Collection<String> oidCollections) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeButtonVO> codeButtonDO2VOs(Collection<CodeButton>  codeButtonDOs) throws VciBaseException;
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeButtonDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	CodeButtonVO codeButtonDO2VO(CodeButton codeButtonDO) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+	 * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	List<CodeButton> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
 	 * 鍚敤
 	 * @param oid 鏁版嵁浼犺緭
 	 * @return 鎵ц缁撴灉
@@ -55,5 +91,6 @@
 	 * @param ids 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈�
 	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
 	 */
-//	R deleteCodeButton(String ids);
+	//	R deleteCodeButton(String ids);
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyProcessTempService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyProcessTempService.java
new file mode 100644
index 0000000..e18befb
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyProcessTempService.java
@@ -0,0 +1,119 @@
+package com.vci.ubcs.code.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.code.dto.CodeClassifyProcessTempDTO;
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyProcessTempVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.wrapper.VciQueryWrapperForDO;
+import org.springblade.core.tool.api.R;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎湇鍔℃帴鍙�
+ *
+ * @author ludc
+ * @date 2023/5/5
+ */
+public interface ICodeClassifyProcessTempService extends IService<CodeClassifyProcessTemp> {
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	IPage<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyProcessTempDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTemp> codeClassifyProcessTempDOs) throws VciBaseException;
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyProcessTempDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	CodeClassifyProcessTempVO codeClassifyProcessTempDO2VO(CodeClassifyProcessTemp codeClassifyProcessTempDO) throws VciBaseException;
+
+	/**
+	 * 澧炲姞鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeClassifyProcessTempVO addSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
+
+	/**
+	 * 淇敼鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeClassifyProcessTempVO editSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
+
+	/**
+	 * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	R deleteCodeClassifyProcessTemp(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param oid 涓婚敭
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeClassifyProcessTempVO getObjectByOid(String oid) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	Collection<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(Collection<String> oidCollections) throws VciBaseException;
+
+	/**
+	 * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	IPage<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+	/**
+	 * 鑾峰彇娴佺▼鐨勬ā鏉跨殑淇℃伅
+	 * @param codeTemplateOid 妯℃澘鐨勪富閿�
+	 * @param processUse 鐢ㄩ��
+	 * @return 妯℃澘鐨勪俊鎭�
+	 */
+	List<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid, String processUse);
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄
+	 */
+	List<CodeClassifyProcessTempVO> selectByWrapper(LambdaQueryWrapper<CodeClassifyProcessTemp> queryWrapper);
+
+}
+
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java
index e07b507..9cd5583 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java
@@ -6,10 +6,10 @@
 import com.vci.ubcs.code.entity.CodeClassify;
 import com.vci.ubcs.code.vo.CodeOsattributeVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
-import com.vci.ubcs.code.vo.pagemodel.TreeQueryObject;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.Tree;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.Tree;
 import org.springblade.core.tool.api.R;
 
 import java.io.File;
@@ -89,9 +89,9 @@
 	 * @param lcStatus 鐘舵��
 	 * @return 鎵ц缁撴灉
 	 */
-    R updateLcStatus(String oid, String lcStatus);
+	R updateLcStatus(String oid, String lcStatus);
 
-    /**
+	/**
 	 * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
 	 * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
 	 * @return 涓氬姟瀵硅薄
@@ -198,4 +198,18 @@
 	 * @return 涓婚搴撴樉绀烘爲
 	 */
 	List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject);
+
+	/**
+	 * 鑾峰彇杩欎釜鍒嗙被涓嬬殑涓氬姟绫诲瀷锛屽綋鍓嶆病鏈夊氨鑾峰彇涓婄骇鐨勭涓�涓笟鍔$被鍨�
+	 * @param oid 褰撳墠鍒嗙被鐨刼id
+	 * @return oid,id,name,btmtypeid,btmtypename
+	 */
+	CodeClassify selectBtmOrParentBtm(String oid);
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	List<CodeClassify> selectAllLevelParents(String oid);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyTemplateAttrService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyTemplateAttrService.java
new file mode 100644
index 0000000..0defd89
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyTemplateAttrService.java
@@ -0,0 +1,62 @@
+package com.vci.ubcs.code.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+
+import java.sql.Wrapper;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф湇鍔℃帴鍙�
+ *
+ * @author ludc
+ * @date 2023/5/5
+ */
+public interface ICodeClassifyTemplateAttrService extends IService<CodeClassifyTemplateAttr> {
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
+	 * @param lambdaQueryWrapper 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(LambdaQueryWrapper<CodeClassifyTemplateAttr> lambdaQueryWrapper , PageHelper pageHelper) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOs) throws VciBaseException;
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	CodeClassifyTemplateAttrVO codeClassifyTemplateAttrDO2VO(CodeClassifyTemplateAttr codeClassifyTemplateAttrDO) throws VciBaseException;
+
+	/**
+	 * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, Object> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java
index 67c0d8d..35148e8 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java
@@ -2,16 +2,23 @@
 
 
 import com.baomidou.mybatisplus.extension.service.IService;
+
 import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
 import com.vci.ubcs.code.entity.CodeClassifyValue;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyValueVO;
-import com.vci.ubcs.code.vo.pagemodel.TreeQueryObject;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.Tree;
+
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.pagemodel.Tree;
 import org.springblade.core.tool.api.R;
+
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔℃帴鍙�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java
index b485109..e2c7fc4 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java
@@ -21,12 +21,15 @@
 import com.vci.ubcs.code.dto.CodeClstemplateDTO;
 import com.vci.ubcs.code.entity.CodeClstemplateEntity;
 import com.vci.ubcs.code.vo.CodeClstemplateVO;
-import com.vci.ubcs.code.vo.pagemodel.TreeQueryObject;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.Tree;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.Tree;
+import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘绠$悊 鏈嶅姟绫�
@@ -50,7 +53,7 @@
 	 * @param treeQueryObject 鏍戞煡璇㈠璞�
 	 * @return 鍒嗙被妯℃澘瀵硅薄 鏄剧ず鏍�
 	 */
-    List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject);
+	List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject);
 
 	/**
 	 * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
@@ -154,4 +157,30 @@
 	 * 鍗囩増
 	 */
 	R Upgrade(CodeClstemplateDTO codeClassifyDTO);
+	/**
+	 * 妯℃澘鍏嬮殕
+	 */
+	R copyTemplate(CodeClstemplateDTO codeClassifyDTO);
+
+	/**
+	 * 鍒嗙被妯℃澘鍒楄〃
+	 * @param plCodeClstemplate 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	DataGrid<CodeClstemplateVO> gridCodeClassifyTemplate(CodeClstemplateVO plCodeClstemplate, Query query);
+
+	/**
+	 * 澧炲姞鍒嗙被妯℃澘瀵硅薄
+	 * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	R<CodeClstemplateVO> addSave(CodeClstemplateDTO codeClassifyTemplateDTO);
+
+	/**
+	 * 淇敼鍒嗙被妯℃澘瀵硅薄
+	 * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	R<CodeClstemplateVO> editSave(CodeClstemplateDTO codeClassifyTemplateDTO);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java
index bb3787d..8b8a3b9 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java
@@ -1,7 +1,17 @@
 package com.vci.ubcs.code.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.code.dto.CodeFixedValueDTO;
 import com.vci.ubcs.code.entity.CodeFixedValue;
+import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import org.springblade.core.tool.api.R;
+import org.springframework.data.domain.Page;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 鍥哄畾鐮佹鐨勭爜鍊兼湇鍔℃帴鍙�
@@ -11,5 +21,85 @@
  */
 public interface ICodeFixedValueService extends IService<CodeFixedValue> {
 
+	/**
+	 * 鏌ヨ鎵�鏈夌殑鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param codeFixedValueVO 鏌ヨ鏉′欢
+	 * @param page 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	IPage<CodeFixedValueVO> gridCodeFixedValue(CodeFixedValueVO codeFixedValueVO,IPage<CodeFixedValueVO> page) throws VciBaseException;
+
+	/**
+	 * 澧炲姞鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	boolean addSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException;
+
+	/**
+	 * 淇敼鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	boolean editSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException;
+
+	/**
+	 * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	R deleteCodeFixedValue(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param oid 涓婚敭
+	 * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeFixedValueVO getObjectByOid(String oid) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	Collection<CodeFixedValueVO> listCodeFixedValueByOids(Collection<String> oidCollections) throws VciBaseException;
+
+	/**
+	 * 鍙傜収鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+	 * @param codeFixedValueVO 鏌ヨ鏉′欢
+	 * @param page 鍒嗛〉鍜屾帓搴�
+	 * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	IPage<CodeFixedValueVO> refDataGridCodeFixedValue(CodeFixedValueVO codeFixedValueVO, IPage<CodeFixedValueVO> page) throws VciBaseException;
+
+	/**
+	 * 浣跨敤鐮佹鐨勪富閿幏鍙栧浐瀹氱爜鐨勭爜鍊�
+	 * @param secOidCollection 鐮佹鐨勪富閿�
+	 * @return 鐮佸�兼樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鐨勬椂鍊欏嚭鐜颁簡閿欒浼氭姏鍑哄紓甯�
+	 */
+	Map<String,List<CodeFixedValueVO>> listCodeFixedValueBySecOids(Collection<String> secOidCollection) throws VciBaseException;
+
+	/**
+	 * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+	 * @param dtoList 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+	 * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+	 * @return 鎵ц缁撴灉
+	 */
+	R<CodeFixedValueVO> batchSave4Order(List<CodeFixedValueDTO> dtoList, String codefixedsecoid);
+
+	/**
+	 * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
+	 * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+	 * @return 鎵ц缁撴灉
+	 */
+	boolean batchDeleteBySecOid(String codefixedsecoid);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
index bfe5e4f..167d9b6 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
@@ -18,7 +18,7 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
 import com.vci.ubcs.code.vo.CodePhaseattrVO;
 
 /**
@@ -27,7 +27,7 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface ICodePhaseattrService extends IService<CodePhaseattrEntity> {
+public interface ICodePhaseattrService extends IService<CodePhaseAttr> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java
index dd5694a..3459537 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java
@@ -22,7 +22,8 @@
 import com.vci.ubcs.code.entity.CodeRule;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
+
+import com.vci.ubcs.starter.exception.VciBaseException;
 import org.springblade.core.tool.api.R;
 
 import java.util.Collection;
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempbuttonService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempbuttonService.java
index 024db8d..73221fe 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempbuttonService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempbuttonService.java
@@ -18,8 +18,18 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import com.vci.ubcs.code.vo.CodeTempbuttonVO;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鏈嶅姟绫�
@@ -27,7 +37,90 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface ICodeTempbuttonService extends IService<CodeTempbuttonEntity> {
+public interface ICodeTempbuttonService extends IService<CodeClassifyTemplateButton> {
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonVO 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO, Query query) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOs) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勪俊鎭�
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOs, boolean hasButtonVO) throws VciBaseException;
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyTemplateButtonDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	CodeClassifyTemplateButtonVO codeClassifyTemplateButtonDO2VO(CodeClassifyTemplateButton codeClassifyTemplateButtonDO) throws VciBaseException;
+
+	/**
+	 * 澧炲姞涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	boolean addSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
+
+	/**
+	 * 淇敼涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	boolean editSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
+
+	/**
+	 * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	R deleteCodeClassifyTemplateButton(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oid 涓婚敭
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeClassifyTemplateButtonVO getObjectByOid(String oid) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	Collection<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(Collection<String> oidCollections) throws VciBaseException;
+
+	/**
+	 * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
 
 	/**
 	 * 鑷畾涔夊垎椤�
@@ -36,8 +129,7 @@
 	 * @param CodeTempbutton
 	 * @return
 	 */
-	IPage<CodeTempbuttonVO> selectCodeTempbuttonPage(IPage<CodeTempbuttonVO> page, CodeTempbuttonVO CodeTempbutton);
-
+	IPage<CodeClassifyTemplateButtonVO> selectCodeTempbuttonPage(IPage<CodeClassifyTemplateButtonVO> page, CodeClassifyTemplateButtonVO CodeTempbutton);
 
 	/**
 	 * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java
index 2ee891a..9653220 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java
@@ -16,10 +16,21 @@
  */
 package com.vci.ubcs.code.service;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import com.vci.ubcs.code.vo.CodeTempphaseVO;
+import com.vci.ubcs.code.dto.CodeTemplatePhaseDTO;
+import com.vci.ubcs.code.entity.CodeClstempattrEntity;
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鏈嶅姟绫�
@@ -27,17 +38,16 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface ICodeTempphaseService extends IService<CodeTempphaseEntity> {
+public interface ICodeTempphaseService extends IService<CodeTemplatePhase> {
 
 	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param CodeTempphase
-	 * @return
+	 * 鏌ヨ鎵�鏈夌殑妯℃澘闃舵
+	 * @param codeTemplatePhaseVO 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
 	 */
-	IPage<CodeTempphaseVO> selectCodeTempphasePage(IPage<CodeTempphaseVO> page, CodeTempphaseVO CodeTempphase);
-
+	DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(CodeTemplatePhaseVO codeTemplatePhaseVO, Query query) throws VciBaseException;
 
 	/**
 	 * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
@@ -45,4 +55,93 @@
 	 * @return 鍙楀奖鍝嶇殑鏁版嵁
 	 */
 	int codeTemplateDeleteTrigger(String classifyTemplateOid);
+
+	/**
+	 * 妯℃澘淇敼瑙﹀彂鍔熻兘
+	 * @param codeClassifyTemplateAttrDOInsert 灞炴�х殑鏁版嵁瀵硅薄
+	 * @return 鍙楀奖鍝嶇殑鏁版嵁
+	 */
+	List<CodeClstempattrEntity> codeTemplateAttrModifyTrigger(List<CodeClstempattrEntity> codeClassifyTemplateAttrDOInsert);
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeTemplatePhaseDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhase> codeTemplatePhaseDOs) throws VciBaseException;
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeTemplatePhaseDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	CodeTemplatePhaseVO codeTemplatePhaseDO2VO(CodeTemplatePhase codeTemplatePhaseDO) throws VciBaseException;
+
+	/**
+	 * 澧炲姞妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeTemplatePhaseVO addSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
+
+	/**
+	 * 淇敼妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeTemplatePhaseVO editSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
+
+	/**
+	 * 鍒犻櫎妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	R deleteCodeTemplatePhase(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鑾峰彇妯℃澘闃舵
+	 * @param oid 涓婚敭
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeTemplatePhaseVO getObjectByOid(String oid) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	Collection<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(Collection<String> oidCollections) throws VciBaseException;
+
+	/**
+	 * 鍙傜収妯℃澘闃舵鍒楄〃
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+	/**
+	 * 闃舵涓嶅寘鍚殑灞炴��
+	 * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
+	 * @param pageHelper 鍒嗛〉瀵硅薄
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+	/**
+	 * 闃舵鍖呭惈鐨勫睘鎬�
+	 * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
+	 * @param pageHelper 鍒嗛〉瀵硅薄
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
index 55478c2..d6584b6 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -8,10 +8,9 @@
 import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
 import com.vci.ubcs.code.dto.CodeBasicSecDTO;
 import com.vci.ubcs.code.entity.CodeBasicSec;
-import com.vci.ubcs.code.entity.CodeClassify;
 import com.vci.ubcs.code.entity.CodeClassifyValue;
 import com.vci.ubcs.code.entity.CodeFixedValue;
-import com.vci.ubcs.code.enumpack.CodeSecTypeEnum;
+import com.vci.ubcs.code.enumpack.*;
 import com.vci.ubcs.code.lifecycle.CodeRuleLC;
 import com.vci.ubcs.code.mapper.CodeBasicSecMapper;
 import com.vci.ubcs.code.mapper.CodeClassifyValueMapper;
@@ -22,16 +21,17 @@
 import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
 import com.vci.ubcs.code.wrapper.CodeBasicSecWrapper;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.ubcs.com.vci.starter.web.enumpck.OsCodeFillTypeEnum;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.KeyValue;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.UIFormReferVO;
-import com.vci.ubcs.com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.ubcs.com.vci.starter.web.util.VciBaseUtil;
-import com.vci.ubcs.com.vci.starter.web.util.WebUtil;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.web.enumpck.OsCodeFillTypeEnum;
+import com.vci.ubcs.starter.web.pagemodel.KeyValue;
+import com.vci.ubcs.starter.web.pagemodel.UIFormReferVO;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.util.WebUtil;
 import com.vci.ubcs.system.entity.DictBiz;
 import com.vci.ubcs.system.feign.IDictBizClient;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.context.annotation.Lazy;
@@ -160,8 +160,8 @@
 	 */
 	@Override
 	public KeyValue checkAttrNullableBySecType(CodeBasicSecDTO codeBasicSecDTO) {
-		VciBaseUtil.alertNotNull(codeBasicSecDTO.getSectype(), "鐮佹鍒嗙被");
-		String secType = codeBasicSecDTO.getSectype();
+		VciBaseUtil.alertNotNull(codeBasicSecDTO.getSecType(), "鐮佹鍒嗙被");
+		String secType = codeBasicSecDTO.getSecType();
 		HashMap<String, String> attrMap = JSONObject.parseObject(JSONObject.toJSONString(codeBasicSecDTO), HashMap.class);
 		Map<String, String> notNullableAttr = getNotNullableAttr(secType);
 		if (notNullableAttr == null) {
@@ -204,6 +204,22 @@
 		//灏咲TO杞崲涓篋O
 		CodeBasicSec codeBasicSecDO = new CodeBasicSec();
 		BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDTO, codeBasicSecDO);
+		//text杞崲
+		codeBasicSecDO.setSecTypeText(CodeSecTypeEnum.getTextByValue(codeBasicSecDTO.getSecType()));
+		codeBasicSecDO.setCodeLevelTypeText(CodeLevelTypeEnum.getTextByValue(codeBasicSecDTO.getCodeLevelType()));
+		codeBasicSecDO.setCodeSecLengthTypeText(CodeSecLengthTypeEnum.getTextByValue(codeBasicSecDTO.getCodeSecLengthType()));
+		codeBasicSecDO.setValueCutTypeText(CodeCutTypeEnum.getValueByText(codeBasicSecDTO.getValueCutType()));
+		codeBasicSecDO.setCodeGetValueTypeText(CodeGetValueTypeEnum.getValueByText(codeBasicSecDTO.getCodeGetValueType()));
+		//濉厖涓�浜涢粯璁ゅ��
+		codeBasicSecDO.setOid(VciBaseUtil.getPk());
+		codeBasicSecDO.setRevisionOid(VciBaseUtil.getPk());
+		codeBasicSecDO.setNameOid(VciBaseUtil.getPk());
+		codeBasicSecDO.setBtmname(MdmBtmTypeConstant.CODE_BASIC_SEC);
+		codeBasicSecDO.setTs(new Date());
+		codeBasicSecDO.setCreateTime(new Date());
+		codeBasicSecDO.setCreator(AuthUtil.getUserId().toString());
+		codeBasicSecDO.setLastModifier(AuthUtil.getUserId().toString());
+		codeBasicSecDO.setLastModifyTime(new Date());
 		//鎺掑簭鍙凤紝榛樿绛変簬褰撳墠宸叉湁鐨勬暟閲忓姞1
 		Long total = codeBasicSecMapper.selectCount(Wrappers.<CodeBasicSec>query()
 			.lambda()
@@ -288,6 +304,7 @@
 			resBoolean = codeBasicSecMapper.updateById(codeBasicSecDO)>0;
 			//SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
 			if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
+				//杩欏効鐩墠闇�瑕佹敼 2023/4/24
 				DictBiz dictBiz = new DictBiz();
 				dictBiz.setCode(MdmBtmTypeConstant.CODE_BASIC_SEC);
 				dictBiz.setDictKey("codefileseparator");
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java
index 06ef202..08abbfc 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java
@@ -18,14 +18,23 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
-import com.vci.ubcs.code.entity.CodeButtonEntity;
+import com.vci.ubcs.code.entity.CodeButton;
 import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
 import com.vci.ubcs.code.mapper.CodeButtonMapper;
 import com.vci.ubcs.code.service.ICodeButtonService;
-import com.vci.ubcs.code.vo.CodeButtonVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 
 /**
  * 妯℃澘鎵╁睍姹� 鏈嶅姟瀹炵幇绫�
@@ -36,7 +45,7 @@
 @Service
 public class CodeButtonServiceImpl implements ICodeButtonService {
 
-	@Autowired
+	@Resource
 	CodeButtonMapper codeButtonMapper;
 
 	@Override
@@ -44,11 +53,89 @@
 		return page.setRecords(codeButtonMapper.selectcodebuttonPage(page, codebutton));
 	}
 
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	@Override
+	public Collection<CodeButtonVO> listCodeButtonByOids(Collection<String> oidCollections) throws VciBaseException {
+		VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+		List<CodeButton> codeButtonDOList = listCodeButtonDOByOidCollections(oidCollections);
+		return codeButtonDO2VOs(codeButtonDOList);
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeButtonVO> codeButtonDO2VOs(Collection<CodeButton>  codeButtonDOs) throws VciBaseException{
+		List<CodeButtonVO> voList = new ArrayList<CodeButtonVO>();
+		if(!CollectionUtils.isEmpty(codeButtonDOs)){
+			for(CodeButton s: codeButtonDOs){
+				CodeButtonVO vo =  codeButtonDO2VO(s);
+				if(vo != null){
+					voList.add(vo);
+				}
+			}
+		}
+		return voList;
+	}
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeButtonDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeButtonVO codeButtonDO2VO(CodeButton codeButtonDO) throws VciBaseException{
+		CodeButtonVO vo = new CodeButtonVO();
+		if(codeButtonDO != null){
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeButtonDO,vo);
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+			vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
+
+		}
+		return vo;
+	}
+
+	@Override
+	public List<CodeButton> selectByPrimaryKeyCollection(Collection<String> oids) {
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return codeButtonMapper.selectBatchIds(oids);
+	}
+
+	/**
+	 * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+	 * @param oidCollections 涓婚敭鐨勯泦鍚�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	private List<CodeButton> listCodeButtonDOByOidCollections(Collection<String> oidCollections){
+		List<CodeButton> codeButtonDOList = new ArrayList<CodeButton>();
+		if(!CollectionUtils.isEmpty(oidCollections)){
+			Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+			for(Collection<String> oids: oidCollectionsList){
+				List<CodeButton> tempDOList =  codeButtonMapper.selectBatchIds(oids);
+				if(!CollectionUtils.isEmpty(tempDOList)){
+					codeButtonDOList.addAll(tempDOList);
+				}
+			}
+		}
+		return  codeButtonDOList;
+	}
+
+
 	@Override
     public R enableCodeButton(String id) {
-		CodeButtonEntity codebutton = codeButtonMapper.selectById(id);
+		CodeButton codebutton = codeButtonMapper.selectById(id);
 		return changeLcStatus(codebutton,true);
     }
+
 	/**
 	 * 鍋滅敤
 	 *
@@ -57,11 +144,11 @@
 	 */
 	@Override
 	public R disableOrgDuty(String oid) {
-		CodeButtonEntity codebutton = codeButtonMapper.selectById(oid);
+		CodeButton codebutton = codeButtonMapper.selectById(oid);
 		return changeLcStatus(codebutton,false);
 	}
 
-//	@Override
+	//	@Override
 //	public R deleteCodeButton(String ids) {
 ////		VciBaseUtil.alertNotNull(codeButtonDTO,"涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�",codeButtonDTO.getOid(),"涓绘暟鎹腑鐨勬寜閽墿灞曠殑涓婚敭");
 //		if(StringUtils.isEmpty(ids)){
@@ -86,7 +173,7 @@
 	 * @param disable 鏄惁涓哄仠鐢�
 	 * @return 鎵ц鐨勭粨鏋�
 	 */
-	private R changeLcStatus(CodeButtonEntity buttonDTO, boolean disable){
+	private R changeLcStatus(CodeButton buttonDTO, boolean disable){
 //		VciBaseUtil.alertNotNull(buttonDTO,"鏁版嵁瀵硅薄",buttonDTO.getOid(),"涓婚敭");
 		if(disable){
 			buttonDTO.setLcstatus(FrameworkDataLCStatus.ENABLED.getValue());
@@ -97,7 +184,7 @@
 			R.success(FrameworkDataLCStatus.ENABLED.getValue()):R.fail(FrameworkDataLCStatus.DISABLED.getValue());
 	}
 
-//	/**
+	//	/**
 //	 * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
 //	 * @param codeButtonDTO 鏁版嵁浼犺緭瀵硅薄
 //	 * @param codeButtonDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java
new file mode 100644
index 0000000..f8f8a53
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java
@@ -0,0 +1,367 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.code.dto.CodeClassifyProcessTempDTO;
+import com.vci.ubcs.code.entity.CodeClassify;
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
+import com.vci.ubcs.code.mapper.CodeClassifyMapper;
+import com.vci.ubcs.code.mapper.CodeClassifyProcessTempMapper;
+import com.vci.ubcs.code.mapper.CodeClassifyTemplateAttrMapper;
+import com.vci.ubcs.code.service.ICodeClassifyProcessTempService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyProcessTempVO;
+import com.vci.ubcs.common.utils.PageDO2PageVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.util.BeanUtil;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.wrapper.VciQueryWrapperForDO;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cglib.beans.BeanMap;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.sql.Wrapper;
+import java.util.*;
+
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎湇鍔℃帴鍙�
+ *
+ * @author ludc
+ * @date 2023/5/5
+ */
+@Service
+public class CodeClassifyProcessTempServiceImpl extends ServiceImpl<CodeClassifyProcessTempMapper, CodeClassifyProcessTemp> implements ICodeClassifyProcessTempService {
+
+	/**
+	 * 鏁版嵁鎿嶄綔灞�
+	 */
+	@Resource
+	private CodeClassifyProcessTempMapper codeClassifyProcessTempMapper;
+
+	/**
+	 * 瀵硅薄鐨勬搷浣�
+	 */
+	@Autowired
+	private RevisionModelUtil revisionModelUtil;
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public IPage<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+		Query query = new Query();
+		if (pageHelper == null) {
+			pageHelper = new PageHelper(-1);
+			query.setSize(-1);
+		}else {
+			query.setSize(pageHelper.getLimit());
+			query.setCurrent(pageHelper.getPage());
+		}
+		query.setDescs("createTime");
+		CodeClassifyProcessTemp codeClassifyProcessTemp = new CodeClassifyProcessTemp();
+		BeanMap beanMap = BeanMap.create(codeClassifyProcessTemp);
+		beanMap.putAll(conditionMap);
+		IPage<CodeClassifyProcessTemp> doList = codeClassifyProcessTempMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeClassifyProcessTemp));
+		IPage<CodeClassifyProcessTempVO> pageList = new Page<CodeClassifyProcessTempVO>();
+		//DataGrid<CodeClassifyProcessTempVO> dataGrid=new DataGrid<>();
+		if (!CollectionUtils.isEmpty(doList.getRecords())) {
+			pageList.setRecords(codeClassifyProcessTempDO2VOs(doList.getRecords()));
+			//鍒嗛〉鍙傛暟杞埌pageVO瀵硅薄
+			pageList = PageDO2PageVO.pageDO2PageVO(doList,pageList);
+		}
+		return pageList;
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyProcessTempDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTemp> codeClassifyProcessTempDOs) throws VciBaseException{
+		List<CodeClassifyProcessTempVO> voList = new ArrayList<CodeClassifyProcessTempVO>();
+		if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOs)){
+			codeClassifyProcessTempDOs.forEach(temp -> {
+				CodeClassifyProcessTempVO tempVO = codeClassifyProcessTempDO2VO(temp);
+				BeanUtilForVCI.copyPropertiesIgnoreCase(temp,tempVO);
+				voList.add(tempVO);
+			});
+		}
+		return voList;
+	}
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyProcessTempDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public CodeClassifyProcessTempVO codeClassifyProcessTempDO2VO(CodeClassifyProcessTemp codeClassifyProcessTempDO) throws VciBaseException{
+		CodeClassifyProcessTempVO vo = new CodeClassifyProcessTempVO();
+		if(codeClassifyProcessTempDO != null){
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyProcessTempDO,vo);
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+			//澶勭悊鍏宠仈鐨勬ā鏉垮睘鎬�
+
+		}
+		return vo;
+	}
+
+	/**
+	 * 澧炲姞鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public CodeClassifyProcessTempVO addSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeClassifyProcessTempDTO.getProcessVersion(),"娴佺▼妯℃澘鐨勭増鏈彿",codeClassifyProcessTempDTO.getCodeprocessuse(),"妯℃澘娴佺▼鐨勭敤閫�");
+		if (StringUtils.isBlank(codeClassifyProcessTempDTO.getCodeprocessuse())){
+			throw new VciBaseException("妯℃澘娴佺▼鐢ㄩ�斾笉鑳戒负绌�");
+		}
+		Long count = countProcessTemplate(codeClassifyProcessTempDTO);
+		if(count > 0){
+			throw new VciBaseException("宸插瓨鍦ㄧ浉鍚岀殑娴佺▼妯℃澘");
+		}
+		//灏咲TO杞崲涓篋O
+		CodeClassifyProcessTemp codeClassifyProcessTempDO = new CodeClassifyProcessTemp();
+		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+		codeClassifyProcessTempMapper.insert(codeClassifyProcessTempDO);
+		//鍥犱负涓氬姟绫诲瀷鏈韩娌℃湁鎺у埗鐗堟湰锛屾墍鏈夊己鍒剁粰鐗堟湰revisionValue璁剧疆鍊硷紝骞冲彴涔熶細鍙樻垚绌恒�傘�傘�傘��
+		//鐗堟湰鍙蜂笉鑳戒娇鐢ㄩ粯璁ょ殑灞炴��
+		return codeClassifyProcessTempDO2VO(codeClassifyProcessTempDO);
+	}
+
+	/**
+	 * 淇敼鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public CodeClassifyProcessTempVO editSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"鏁版嵁瀵硅薄",codeClassifyProcessTempDTO.getOid(),"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉夸富閿�",codeClassifyProcessTempDTO.getProcessVersion(),"娴佺▼妯℃澘鐨勭増鏈彿",codeClassifyProcessTempDTO.getName(),"娴佺▼妯℃澘鐨勫悕绉�");
+		//灏咲TO杞崲涓篋O
+		CodeClassifyProcessTemp codeClassifyProcessTempDO = selectByOid(codeClassifyProcessTempDTO.getOid());
+		revisionModelUtil.copyFromDTOIgnore(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+		codeClassifyProcessTempMapper.updateById(codeClassifyProcessTempDO);
+		return codeClassifyProcessTempDO2VO(codeClassifyProcessTempDO);
+	}
+
+	/**
+	 * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R deleteCodeClassifyProcessTemp(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�",codeClassifyProcessTempDTO.getOid(),"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉跨殑涓婚敭");
+		CodeClassifyProcessTemp codeClassifyProcessTempDO = selectByOid(codeClassifyProcessTempDTO.getOid());
+		R baseResult = checkIsCanDeleteForDO(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+		if(!baseResult.isSuccess()) {
+		}else{
+			return baseResult;
+		}
+		//鎵ц鍒犻櫎鎿嶄綔
+		boolean batchCBO = codeClassifyProcessTempMapper.deleteById(codeClassifyProcessTempDO.getOid()) > 0;
+		return batchCBO?R.success(DELETE_SUCCESS):R.fail(DELETE_FAIL);
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param oid 涓婚敭
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeClassifyProcessTempVO getObjectByOid(String oid) throws VciBaseException{
+		return codeClassifyProcessTempDO2VO(selectByOid(oid));
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	@Override
+	public Collection<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(Collection<String> oidCollections) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+		List<CodeClassifyProcessTemp> codeClassifyProcessTempDOList = listCodeClassifyProcessTempDOByOidCollections(oidCollections);
+		return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempDOList);
+	}
+
+	/**
+	 * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public IPage<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, String>();
+		}
+		return gridCodeClassifyProcessTemp(conditionMap,pageHelper);
+
+	}
+
+	/**
+	 * 鑾峰彇娴佺▼鐨勬ā鏉跨殑淇℃伅
+	 *
+	 * @param codeTemplateOid 妯℃澘鐨勪富閿�
+	 * @param processUse      鐢ㄩ��
+	 * @return 妯℃澘鐨勪俊鎭�
+	 */
+	@Override
+	public List<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid, String processUse) {
+		if(StringUtils.isBlank(codeTemplateOid) || StringUtils.isBlank(processUse)){
+			return new ArrayList<>();
+		}
+		Map<String,String> conditionMap =new HashMap<>();
+		conditionMap.put("classifyTemplateOid",codeTemplateOid);
+		conditionMap.put("codeprocessuse",processUse);
+		LambdaQueryWrapper<CodeClassifyProcessTemp> wrapper = Wrappers.<CodeClassifyProcessTemp>query()
+			.lambda().eq(CodeClassifyProcessTemp::getClassifyTemplateOid, codeTemplateOid)
+			.eq(CodeClassifyProcessTemp::getCodeProcessUse, processUse);
+		return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempMapper.selectList(wrapper));
+	}
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄
+	 */
+	@Override
+	public List<CodeClassifyProcessTempVO> selectByWrapper(LambdaQueryWrapper<CodeClassifyProcessTemp> queryWrapper) {
+		List<CodeClassifyProcessTemp> codeClassifyProcessTempDOList= codeClassifyProcessTempMapper.selectList(queryWrapper);
+		return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempDOList);
+	}
+
+	/**
+	 * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+	 * @param oidCollections 涓婚敭鐨勯泦鍚�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	private List<CodeClassifyProcessTemp> listCodeClassifyProcessTempDOByOidCollections(Collection<String> oidCollections){
+		List<CodeClassifyProcessTemp> codeClassifyProcessTempDOList = new ArrayList<CodeClassifyProcessTemp>();
+		if(!CollectionUtils.isEmpty(oidCollections)){
+			Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+			for(Collection<String> oids: oidCollectionsList){
+				//List<CodeClassifyProcessTemp> tempDOList =  codeClassifyProcessTempMapper.selectByPrimaryKeyCollection(oids);
+				List<CodeClassifyProcessTemp> tempDOList =  codeClassifyProcessTempMapper.selectBatchIds(oids);
+				if(!CollectionUtils.isEmpty(tempDOList)){
+					codeClassifyProcessTempDOList.addAll(tempDOList);
+				}
+			}
+		}
+		return  codeClassifyProcessTempDOList;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+	 * @param codeClassifyProcessTempDTO 鏁版嵁浼犺緭瀵硅薄
+	 * @param codeClassifyProcessTempDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+	 */
+	private R checkIsCanDeleteForDO(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO, CodeClassifyProcessTemp codeClassifyProcessTempDO) {
+		CodeClassifyProcessTemp tempDO = new CodeClassifyProcessTemp();
+		BeanUtil.convert(codeClassifyProcessTempDTO,tempDO);
+		if (!checkTs(tempDO)) {
+			return R.fail(TS_NOT_PROCESS);
+		}
+		if(!checkIsLinked(codeClassifyProcessTempDO.getOid())) {
+			return R.success("success");
+		}else{
+			return R.fail(DATA_LINKED_NOT_DELETE);
+		}
+	}
+
+	/**
+	 * 妫�鏌s
+	 * @param tempDO
+	 * @return
+	 */
+	private boolean checkTs(CodeClassifyProcessTemp tempDO){
+		LambdaQueryWrapper<CodeClassifyProcessTemp> wrapper = Wrappers.<CodeClassifyProcessTemp>query()
+			.lambda().eq(CodeClassifyProcessTemp::getOid,tempDO.getOid()).select(CodeClassifyProcessTemp::getTs);
+		long dbTs = codeClassifyProcessTempMapper.selectById(wrapper).getTs().getTime();
+		long currentTs = tempDO.getTs().getTime();
+		if(dbTs == currentTs){
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁琚紩鐢�
+	 * @param oid 涓婚敭
+	 * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	private boolean checkIsLinked(String oid) throws VciBaseException{
+		//TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+		return false;
+	}
+
+	/**
+	 * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+	 * @param oid 涓婚敭
+	 * @return  鏁版嵁瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private CodeClassifyProcessTemp selectByOid(String oid) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyProcessTemp codeClassifyProcessTempDO = codeClassifyProcessTempMapper.selectById(oid.trim());
+		if(codeClassifyProcessTempDO == null || StringUtils.isBlank(codeClassifyProcessTempDO.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return codeClassifyProcessTempDO;
+	}
+
+	/**
+	 * 鑾峰彇娴佺▼妯℃澘鏄惁宸茬粡瀛樺湪浜�
+	 * @param codeClassifyProcessTempDTO 鏁版嵁浼犺緭瀵硅薄
+	 * @return 涓暟
+	 */
+	private Long countProcessTemplate(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) {
+		String templateName = codeClassifyProcessTempDTO.getName();
+		if (StringUtils.isBlank(templateName)){
+			throw new VciBaseException("妯℃澘娴佺▼鍚嶇О涓嶈兘涓虹┖");
+		}
+		LambdaQueryWrapper<CodeClassifyProcessTemp> wrapper = Wrappers.<CodeClassifyProcessTemp>query()
+			.lambda().eq(CodeClassifyProcessTemp::getCodeProcessUse, codeClassifyProcessTempDTO.getCodeprocessuse())
+			.eq(CodeClassifyProcessTemp::getClassifyTemplateOid, codeClassifyProcessTempDTO.getClassifyTemplateOid())
+			.eq(CodeClassifyProcessTemp::getId, codeClassifyProcessTempDTO.getId());
+		Long count = codeClassifyProcessTempMapper.selectCount(wrapper);
+		return count;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
index f26c5de..702a980 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -5,7 +5,6 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
-import com.vci.ubcs.code.bo.TreeWrapperOptions;
 import com.vci.ubcs.code.entity.CodeClassify;
 import com.vci.ubcs.code.entity.CodeClstemplateEntity;
 import com.vci.ubcs.code.entity.CodeOsbtmtypeEntity;
@@ -24,22 +23,22 @@
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
-import com.vci.ubcs.code.vo.pagemodel.TreeQueryObject;
-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.bo.ReadExcelOption;
-import com.vci.ubcs.com.vci.starter.poi.bo.WriteExcelOption;
-import com.vci.ubcs.com.vci.starter.poi.constant.ExcelLangCodeConstant;
-import com.vci.ubcs.com.vci.starter.poi.util.ExcelUtil;
-import com.vci.ubcs.com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.ubcs.com.vci.starter.util.LocalFileUtil;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.Tree;
-import com.vci.ubcs.com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.ubcs.com.vci.starter.web.util.LangBaseUtil;
-import com.vci.ubcs.com.vci.starter.web.util.VciBaseUtil;
-import org.springblade.core.log.exception.ServiceException;
+import com.vci.ubcs.starter.bo.WriteExcelData;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.poi.bo.ReadExcelOption;
+import com.vci.ubcs.starter.poi.bo.WriteExcelOption;
+import com.vci.ubcs.starter.poi.constant.ExcelLangCodeConstant;
+import com.vci.ubcs.starter.poi.util.ExcelUtil;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.util.LocalFileUtil;
+import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.Tree;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.LangBaseUtil;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.apache.poi.hssf.util.HSSFColor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -985,4 +984,41 @@
 		return treeCodeClassify(treeQueryObject);
 	}
 
+	/**
+	 * 鑾峰彇杩欎釜鍒嗙被涓嬬殑涓氬姟绫诲瀷锛屽綋鍓嶆病鏈夊氨鑾峰彇涓婄骇鐨勭涓�涓笟鍔$被鍨�
+	 * @param oid 褰撳墠鍒嗙被鐨刼id
+	 * @return oid,id,name,btmtypeid,btmtypename锛屾病鏈夊氨杩斿洖null
+	 */
+	@Override
+	public CodeClassify selectBtmOrParentBtm(String oid){
+		List<CodeClassify> oidList = selectAllLevelParents(oid);
+		return oidList.size()==0?null:oidList.get(0);
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈夊眰绾т笂绾у叧鑱斾笟鍔$被鍨嬫暟鎹�
+	 * @param oid 褰撳墠鍒嗙被鐨刼id
+	 * @return oid,id,name,btmtypeid,btmtypename
+	 */
+	@Override
+	public List<CodeClassify> selectAllLevelParents(String oid){
+//		String sql = "select oid,id,name,btmtypeid,btmtypename from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " where btmtypeid is not null start with oid= :oid connect by prior PARENTCODECLASSIFYOID=oid ";
+//		Map< String,String> conditionMap = new HashMap< String,String>();
+//		conditionMap.put("oid",oid);
+//		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		List<Map<String, Object>> dataList = codeClassifyMapper.selectAllLevelParents(oid);
+		List<CodeClassify> oidList = new ArrayList<CodeClassify>();
+		if(!CollectionUtils.isEmpty(dataList)){
+			for(Map data:dataList){
+				CodeClassify codeClassifyDO = new CodeClassify();
+				codeClassifyDO.setOid(VciBaseUtil.getStringValueFromObject(data.get("OID")));
+				codeClassifyDO.setId(VciBaseUtil.getStringValueFromObject(data.get("ID")));
+				codeClassifyDO.setName(VciBaseUtil.getStringValueFromObject(data.get("NAME")));
+				codeClassifyDO.setBtmTypeId(VciBaseUtil.getStringValueFromObject(data.get("BTMTYPEID")));
+				codeClassifyDO.setBtmTypeName(VciBaseUtil.getStringValueFromObject(data.get("BTMTYPENAME")));
+				oidList.add(codeClassifyDO);
+			}
+		}
+		return oidList;
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
new file mode 100644
index 0000000..0a05198
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
@@ -0,0 +1,133 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import com.vci.ubcs.code.mapper.CodeClassifyTemplateAttrMapper;
+import com.vci.ubcs.code.mapper.CodeClassifyTemplateButtonMapper;
+import com.vci.ubcs.code.mapper.CodeTemplatePhaseMapper;
+import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
+import com.vci.ubcs.code.service.ICodeTempphaseService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springframework.cglib.beans.BeanMap;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.sql.Wrapper;
+import java.util.*;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф湇鍔�
+ * @author ludc
+ * @date 2023/5/5
+ */
+@Service
+public class CodeClassifyTemplateAttrServiceImpl extends ServiceImpl<CodeClassifyTemplateAttrMapper, CodeClassifyTemplateAttr> implements ICodeClassifyTemplateAttrService {
+
+	/**
+	 * 鏁版嵁鎿嶄綔灞�
+	 */
+	@Resource
+	private CodeClassifyTemplateAttrMapper codeClassifyTemplateAttrMapper;
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
+	 * @param lambdaQueryWrapper 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(LambdaQueryWrapper<CodeClassifyTemplateAttr> lambdaQueryWrapper , PageHelper pageHelper) throws VciBaseException {
+		DataGrid<CodeClassifyTemplateAttrVO> dataGrid=new DataGrid<>();
+		//娌℃湁浼犻�掑弬鏁帮紝灏变笉鎵ц鏌ヨ閫昏緫
+		if(lambdaQueryWrapper == null){
+			dataGrid.setData(new ArrayList<>());
+			dataGrid.setTotal(0);
+			return dataGrid;
+		}
+		Query query = new Query();
+		if (pageHelper == null) {
+			pageHelper = new PageHelper(-1);
+			query.setSize(-1);
+		}else {
+			query.setCurrent(pageHelper.getPage());
+			query.setSize(pageHelper.getLimit());
+		}
+		//pageHelper.addDefaultAsc("ordernum");
+		query.setAscs("ordernum");
+
+		IPage<CodeClassifyTemplateAttr> doList = codeClassifyTemplateAttrMapper.selectPage(Condition.getPage(query), lambdaQueryWrapper);
+		if (!CollectionUtils.isEmpty(doList.getRecords())) {
+			dataGrid.setData(codeClassifyTemplateAttrDO2VOs(doList.getRecords()));
+			dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateAttrMapper.selectCount(lambdaQueryWrapper))));
+		}
+		return dataGrid;
+	}
+
+	/**
+	 * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, Object> conditionMap, PageHelper pageHelper) throws VciBaseException{
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, Object>();
+		}
+		return gridCodeClassifyTemplateAttr(Condition.getQueryWrapper(conditionMap,CodeClassifyTemplateAttr.class).lambda(),pageHelper);
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOs) throws VciBaseException{
+		List<CodeClassifyTemplateAttrVO> voList = new ArrayList<CodeClassifyTemplateAttrVO>();
+		if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOs)){
+			for(CodeClassifyTemplateAttr s: codeClassifyTemplateAttrDOs){
+				CodeClassifyTemplateAttrVO vo =  codeClassifyTemplateAttrDO2VO(s);
+				if(vo != null){
+					voList.add(vo);
+				}
+			}
+		}
+		return voList;
+	}
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeClassifyTemplateAttrVO codeClassifyTemplateAttrDO2VO(CodeClassifyTemplateAttr codeClassifyTemplateAttrDO) throws VciBaseException{
+		CodeClassifyTemplateAttrVO vo = new CodeClassifyTemplateAttrVO();
+		if(codeClassifyTemplateAttrDO != null){
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,vo);
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+			vo.setAttributeDataTypeText(VciFieldTypeEnum.getTextByValue(vo.getAttributedatatype()));
+		}
+		return vo;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
index 0e33f97..4db19dd 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
@@ -4,7 +4,6 @@
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.code.bo.TreeWrapperOptions;
 import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
 import com.vci.ubcs.code.entity.CodeClassifyValue;
 import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
@@ -12,13 +11,14 @@
 import com.vci.ubcs.code.service.ICodeBasicSecService;
 import com.vci.ubcs.code.service.ICodeClassifyValueService;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyValueVO;
-import com.vci.ubcs.code.vo.pagemodel.TreeQueryObject;
 import com.vci.ubcs.code.wrapper.CodeClassifyValueWrapper;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.Tree;
-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.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.web.pagemodel.Tree;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springblade.core.tool.api.R;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -30,8 +30,7 @@
 import java.util.stream.Collectors;
 
 import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.LC_STATUS;
-import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_CASCADE_LINKED_NOT_DELETE;
-import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
 
 @Service
 public class CodeClassifyValueServiceImpl  extends ServiceImpl<CodeClassifyValueMapper, CodeClassifyValue> implements ICodeClassifyValueService {
@@ -138,7 +137,9 @@
 	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
 	 */
 	private R checkIsCanDeleteForDO(CodeClassifyValueDTO codeClassifyValueDTO, CodeClassifyValue codeClassifyValueDO) {
-		//boService.checkTs(codeClassifyValueDTO);
+		if (!checkTs(codeClassifyValueDTO)) {
+			return R.fail(TS_NOT_PROCESS);
+		}
 		//鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
 		if(checkChildIsLinked(codeClassifyValueDO.getOid())){
 			return R.fail(DATA_CASCADE_LINKED_NOT_DELETE);
@@ -251,7 +252,7 @@
 	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
 	 */
 	@Override
-	public List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException{
+	public List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException {
 		if(treeQueryObject == null){
 			treeQueryObject = new TreeQueryObject();
 		}
@@ -339,5 +340,20 @@
 		return codeClassifyValueMapper.selectList(wrapper);
 	}
 
+	/**
+	 * 妫�鏌s
+	 * @param tempDO
+	 * @return
+	 */
+	private boolean checkTs(CodeClassifyValueDTO tempDO){
+		LambdaQueryWrapper<CodeClassifyValue> wrapper = Wrappers.<CodeClassifyValue>query()
+			.lambda().eq(CodeClassifyValue::getOid,tempDO.getOid()).select(CodeClassifyValue::getTs);
+		long dbTs = codeClassifyValueMapper.selectById(wrapper).getTs().getTime();
+		long currentTs = tempDO.getTs().getTime();
+		if(dbTs == currentTs){
+			return true;
+		}
+		return false;
+	}
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java
index 05ae817..404f4d4 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java
@@ -22,9 +22,10 @@
 import com.vci.ubcs.code.mapper.CodeClstempattrMapper;
 import com.vci.ubcs.code.service.ICodeClstempattrService;
 import com.vci.ubcs.code.vo.CodeClstempattrVO;
-import com.vci.ubcs.com.vci.starter.web.enumpck.VciFieldTypeEnum;
-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.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
index 632c040..ab690db 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
@@ -19,35 +19,38 @@
 import com.alibaba.nacos.api.utils.StringUtils;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.code.bo.TreeWrapperOptions;
 import com.vci.ubcs.code.dto.CodeClstemplateDTO;
-import com.vci.ubcs.code.entity.CodeClstempattrEntity;
-import com.vci.ubcs.code.entity.CodeClstemplateEntity;
+import com.vci.ubcs.code.entity.*;
 import com.vci.ubcs.code.enumpack.CodeClassifyTemplateLC;
 import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
-import com.vci.ubcs.code.mapper.CodeClstempattrMapper;
-import com.vci.ubcs.code.mapper.CodeClstemplateMapper;
+import com.vci.ubcs.code.mapper.*;
+import com.vci.ubcs.code.service.ICodeClassifyService;
 import com.vci.ubcs.code.service.ICodeClstemplateService;
 import com.vci.ubcs.code.vo.CodeClstempattrVO;
 import com.vci.ubcs.code.vo.CodeClstemplateVO;
-import com.vci.ubcs.code.vo.pagemodel.TreeQueryObject;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.Tree;
-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.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.Tree;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED;
-import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.LC_STATUS;
+import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.*;
 import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
 import static com.vci.ubcs.code.service.impl.CodeClassifyServiceImpl.PARENT_FIELD_NAME;
 
@@ -81,6 +84,23 @@
 	private CodeTempbuttonServiceImpl codeTempbuttonServiceImpl;
 	@Autowired(required = false)
 	private CodeClsflowtempServiceImpl codeClsflowtempServiceImpl;
+	@Autowired(required = false)
+	private CodeClsflowtempMapper codeClsflowtempMapper;
+	@Autowired(required = false)
+	private CodeTemplatePhaseMapper codeTempphaseMapper;
+	@Autowired(required = false)
+	private CodeClassifyTemplateButtonMapper codeTempbuttonMapper;
+	@Autowired(required = false)
+	private CodePhaseAttrMapper codePhaseattrMapper;
+	@Autowired(required = false)
+	private ICodeClassifyService codeClassifyService;
+	@Autowired(required = false)
+	private CodeClstemplateMapper codeClstemplateMapper;
+	@Autowired(required = false)
+	private CodePhaseattrServiceImpl codePhaseattrServiceImpl;
+
+
+
 	@Override
 	public IPage<CodeClstemplateVO> selectPlCodeClstemplatePage(IPage<CodeClstemplateVO> page, CodeClstemplateVO plCodeClstemplate) {
 		return page.setRecords(baseMapper.selectPlCodeClstemplatePage(page, plCodeClstemplate));
@@ -117,8 +137,12 @@
 //		VciParentQueryOption parentQueryOption = new VciParentQueryOption();
 //		parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
 //		queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
-		CodeClstemplateEntity codeClstemplateEntity = new CodeClstemplateEntity();
-		return baseMapper.selectList(Condition.getQueryWrapper(codeClstemplateEntity));
+//		CodeClstemplateEntity codeClstemplateEntity = new CodeClstemplateEntity();
+//		codeClstemplateEntity.set
+		return baseMapper.selectCodeClassifyTemplateDOByTree(
+			treeQueryObject.getConditionMap().get("codeclassifyoid"),
+			treeQueryObject.getConditionMap().get("lcStatus"));
+//		return baseMapper.selectList(Condition.getQueryWrapper(codeClstemplateEntity));
 //		return codeClassifyTemplateMapper.selectByWrapper(queryWrapperForDO);
 	}
 
@@ -208,19 +232,20 @@
 		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClstemplateDTO,codeClassifyTemplateDOCopyFromDTO);
 
 		//妫�鏌s
-		Map<String,Object> condition = new HashMap<>(2);
-		condition.put("oid",codeClstemplateDTO.getOid());
-		condition.put("ts",codeClstemplateDTO.getTs());
+//		Map<String,Object> condition = new HashMap<>(2);
+//		condition.put("oid",codeClstemplateDTO.getOid());
+//		condition.put("ts",codeClstemplateDTO.getTs());
 		CodeClstemplateEntity detail = baseMapper
-			.selectOne(Condition.getQueryWrapper(condition,CodeClstemplateEntity.class));
-		if(detail == null){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+			.selectById(codeClstemplateDTO.getOid());
+
+		if(!detail.getTs().toString().equals(codeClstemplateDTO.getTs().toString())){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
 			return R.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
 		}
 		//鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
 		if(checkChildIsLinked(codeClstemplateEntity.getOid())){
 			return R.fail(DATA_CASCADE_LINKED_NOT_DELETE);
 		}
-		return R.status(checkHasChild(codeClstemplateEntity.getOid()));
+		return R.success(String.valueOf(checkHasChild(codeClstemplateEntity.getOid())));
 	}
 
 	/**
@@ -271,6 +296,7 @@
 	 * @param codeClstemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
 	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
 	 */
+	@Transactional
 	@Override
 	public R deleteCodeClassifyTemplate(CodeClstemplateDTO codeClstemplateDTO) {
 		checkIsCanDelete(codeClstemplateDTO);
@@ -360,8 +386,8 @@
 	 * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
 	 * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
 	 * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
-	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
 	 */
+	@Transactional
 	@Override
 	public List<Tree> referTree(TreeQueryObject treeQueryObject) {
 		if(treeQueryObject == null){
@@ -416,6 +442,7 @@
 	 * @param lcStatus
 	 * @return
 	 */
+	@Transactional
 	@Override
 	public R updateLcStatus( String oid, String lcStatus){
 		CodeClstemplateEntity codeClassifyTemplateDO = baseMapper.selectById(oid);
@@ -438,6 +465,7 @@
 	 * 鍗囩増
 	 * @param codeClassifyDTO
 	 */
+	@Transactional
 	@Override
 	public R Upgrade(CodeClstemplateDTO codeClassifyDTO) {
 
@@ -452,93 +480,95 @@
 		//闇�瑕佹柊澧炵殑鍗囩骇妯℃澘
 //		ClientBusinessObject clientBusinessObject_template = boService.selectCBOByOid(codeClassifyDTO.getOid(), "codeclstemplate");
 		CodeClstemplateEntity codeCls_template = baseMapper.selectById(templateOldOid);
-		CodeClstemplateEntity codeCls_template_insert = null;
+		CodeClstemplateEntity codeCls_template_insert = new CodeClstemplateEntity();
 //			ClientBusinessObject clientBusinessObject_template_insert = null;
 //		try {
-////			clientBusinessObject_template_insert = clientBusinessObjectOperation.reviseBusinessObject(clientBusinessObject_template, "");
-////			codeCls_template_insert.setOid((new ObjectUtility()).getNewObjectID36());
-////			toBo.setRevisionid((new ObjectUtility()).getNewObjectID36());
-//			codeCls_template_insert.setNameOid(codeCls_template.getNameOid());
-//			codeCls_template_insert.setBtmname(codeCls_template.getBtmname());
-////			codeCls_template_insert.setIsLast(1);
-////			codeCls_template_insert.setIsFirstr(0);
-////			codeCls_template_insert.setIsFirstv(1);
-////			codeCls_template_insert.setIsLastV(1);
-//			codeCls_template_insert.setCreator(AuthUtil.getUser().getUserName());
-//			codeCls_template_insert.setCreateTime(new Date());
-//			codeCls_template_insert.setLastModifier(AuthUtil.getUser().getUserName());
-//			codeCls_template_insert.setLastModifyTime(new Date());
-//			codeCls_template_insert.setRevisionRule(codeCls_template.getRevisionRule());
-//			codeCls_template_insert.setVersionRule(codeCls_template.getVersionRule());
-//			RevisionValueObject rvObj = this.getNextRevision(fromBo.getBtmName(), fromBo.getNameoid(), item.revRuleName, item.revInput, revisionVal);
-//			codeCls_template_insert.setRevisionSeq(rvObj.getRevisionSeq());
-//			codeCls_template_insert.setRevisionValue(rvObj.getRevisionVal());
+//			clientBusinessObject_template_insert = clientBusinessObjectOperation.reviseBusinessObject(clientBusinessObject_template, "");
+		codeCls_template_insert.setOid(VciBaseUtil.getPk());
+		codeCls_template_insert.setRevisionOid(VciBaseUtil.getPk());
+		codeCls_template_insert.setNameOid(codeCls_template.getNameOid());
+		codeCls_template_insert.setBtmname(codeCls_template.getBtmname());
+		codeCls_template_insert.setLastR(String.valueOf(1));
+		codeCls_template_insert.setFirstR(String.valueOf(0));
+		codeCls_template_insert.setFirstV(String.valueOf(1));
+		codeCls_template_insert.setLastV(String.valueOf(1));
+		codeCls_template_insert.setCreator(AuthUtil.getUser().getUserName());
+		codeCls_template_insert.setCreateTime(new Date());
+		codeCls_template_insert.setLastModifier(AuthUtil.getUser().getUserName());
+		codeCls_template_insert.setLastModifyTime(new Date());
+		codeCls_template_insert.setRevisionRule(codeCls_template.getRevisionRule());
+		codeCls_template_insert.setVersionRule(codeCls_template.getVersionRule());
+		Map rvObj = baseMapper.getNextRevision(codeCls_template.getNameOid());
+		codeCls_template_insert.setRevisionSeq(Integer.parseInt(rvObj.get("REVISIONSEQ").toString()));
+		codeCls_template_insert.setRevisionValue(rvObj.get("REVISIONVAL").toString());
 //			VersionValueObject versionObj = this.getVersionValue(item.verRuleName);
-//			codeCls_template_insert.setVersionSeq(versionObj.getVersionSeq());
-//			codeCls_template_insert.setVersionValue(versionObj.getVersionVal());
-//			codeCls_template_insert.setLctId(codeCls_template.getLctId());
-//			codeCls_template_insert.setLcStatus(this.getLcFirstStatus(item.lifeCycle));
-//			codeCls_template_insert.setId(codeCls_template.getId());
-//			codeCls_template_insert.setName(codeCls_template.getName());
-//			codeCls_template_insert.setDescription(codeCls_template.getDescription());
-//			codeCls_template_insert.setOwner(AuthUtil.getUser().getUserName());
-////			codeCls_template_insert.setCheckinBy(userName);
-//			codeCls_template_insert.setCopyFromVersion(codeCls_template.getOid());
+		codeCls_template_insert.setVersionSeq(Integer.parseInt(rvObj.get("VERSIONSEQ").toString()));
+		codeCls_template_insert.setVersionValue(rvObj.get("VERSIONVAL").toString());
+		codeCls_template_insert.setLctid(codeCls_template.getLctid());
+		codeCls_template_insert.setLcStatus("Editing");
+		codeCls_template_insert.setId(codeCls_template.getId());
+		codeCls_template_insert.setName(codeCls_template.getName());
+		codeCls_template_insert.setDescription(codeCls_template.getDescription());
+		codeCls_template_insert.setOwner(AuthUtil.getUser().getUserName());
+//			codeCls_template_insert.setCheckinBy(userName);
+		codeCls_template_insert.setCopyFromVersion(codeCls_template.getOid());
 //		}catch (VCIError e){
 //			e.printStackTrace();
 //			logger.error("===============>鍒嗙被妯℃澘-鍗囩増澶嶅埗鍑洪敊oid锛� "+templateOldOid+",mes"+e.error_message);
 //			return BaseResult.error("鍗囩増鍑洪敊");
 //		}
-//
-//
-//		CodeClassifyTemplateDO codeClassifyTemplateDO = new CodeClassifyTemplateDO();
+		int insertCount = baseMapper.insert(codeCls_template_insert);
+//		CodeClstemplateEntity codeClassifyTemplateDO = new CodeClstemplateEntity();
 //		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyTemplateDO);
 //		WebUtil.copyValueToObjectFromCbos(clientBusinessObject_template_insert,codeClassifyTemplateDO);
-//		//modify by weidy@2022-2-27
-//		//鍗囩増鍚庝笉鑳戒娇鐢╥nsert鏂规硶锛屽洜涓洪偅涓案杩滄槸鏂板涓�鏉℃暟鎹紝
-//		//涓婃柟鍏堜粠dto杞粰do锛岀劧鍚庢妸鍗囩増鐨勫垵濮嬪寲鐨勫睘鎬ф嫹璐濈粰do锛屾渶鍚庡啀浠巇o鎷疯礉鍒癱bo涓�
+		//modify by weidy@2022-2-27
+		//鍗囩増鍚庝笉鑳戒娇鐢╥nsert鏂规硶锛屽洜涓洪偅涓案杩滄槸鏂板涓�鏉℃暟鎹紝
+		//涓婃柟鍏堜粠dto杞粰do锛岀劧鍚庢妸鍗囩増鐨勫垵濮嬪寲鐨勫睘鎬ф嫹璐濈粰do锛屾渶鍚庡啀浠巇o鎷疯礉鍒癱bo涓�
 //		WebUtil.copyValueToCboFromObj(clientBusinessObject_template_insert,codeClassifyTemplateDO);
-//		//鍗囩増杩囧悗鐨勬ā鏉縪id
-//		String templateNewOid = codeClassifyTemplateDO.getOid();
-//
-//		//闇�瑕佸鍒剁殑妯℃澘灞炴��
-//		//鏌ヨ鑰佹ā鏉夸笅杈圭殑鎵�鏈夊睘鎬э紝璧嬪�兼柊妯℃澘oid
+		//鍗囩増杩囧悗鐨勬ā鏉縪id
+		String templateNewOid = codeCls_template_insert.getOid();
+
+		//闇�瑕佸鍒剁殑妯℃澘灞炴��
+		//鏌ヨ鑰佹ā鏉夸笅杈圭殑鎵�鏈夊睘鎬э紝璧嬪�兼柊妯℃澘oid
 //		VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
 //		codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
+		Map<String,Object> condition = new HashMap<>(1);
+		condition.put("classifyTemplateOid",templateOldOid);
+		List<CodeClstempattrEntity> codeClstempattrEntities = codeClstempattrMapper.selectByMap(condition);
 //		List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
-//		for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO :codeClassifyTemplateAttrDOList){
+		for (CodeClstempattrEntity codeClassifyTemplateAttrDO :codeClstempattrEntities){
 //			String attrOid = VciBaseUtil.getPk();
-//			codeClassifyTemplateAttrDO.setOid(attrOid);
-//			codeClassifyTemplateAttrDO.setClassifyTemplateOid(templateNewOid);
-//		}
-//
-//		//澶嶅埗妯℃澘娴佺▼
-//		List<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOList = copyTemplateProcess(templateOldOid,templateNewOid);
-//
-//		//澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
-//		Map phase_attrMap = copyTemplatePhase_attr(templateOldOid,templateNewOid);
-//
-//		List<CodeTemplatePhaseDO> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhaseDO>)phase_attrMap.get("phase");//妯℃澘闃舵
-//		List<CodePhaseAttrDO> codePhaseAttrDOList = (ArrayList<CodePhaseAttrDO>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
-//
-//		//澶嶅埗妯℃澘鎸夐挳
-//		List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = copyTemplateButton(templateOldOid,templateNewOid);
-//
-//		//涓�璧蜂繚瀛樻暟鎹�
+			codeClassifyTemplateAttrDO.setOid(null);
+			codeClassifyTemplateAttrDO.setClassifytemplateoid(templateNewOid);
+			codeClstempattrMapper.insert(codeClassifyTemplateAttrDO);
+		}
+
+		//澶嶅埗妯℃澘娴佺▼
+		List<CodeClsflowtempEntity>  codeClassifyProcessTempDOList = copyTemplateProcess(templateOldOid,templateNewOid);
+		//澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
+		Map phase_attrMap = copyTemplatePhase_attr(templateOldOid,templateNewOid);
+
+		List<CodeTemplatePhase> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhase>)phase_attrMap.get("phase");//妯℃澘闃舵
+		List<CodePhaseAttr> codePhaseAttrDOList = (ArrayList<CodePhaseAttr>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
+
+		//澶嶅埗妯℃澘鎸夐挳
+		List<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOList = copyTemplateButton(templateOldOid,templateNewOid);
+
+		//涓�璧蜂繚瀛樻暟鎹�
 //		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-//		//淇濆瓨妯℃澘
+		//淇濆瓨妯℃澘
 //		BatchCBO batchCBOTemplate = new BatchCBO();
-//		//batchCBO淇濆瓨鐨勬椂鍊欐病鏈夎兘澶熻嚜鍔╱pdate婧愭暟鎹殑isLastR
-//		//batchCBOTemplate.getCreateCbos().add(clientBusinessObject_template_insert);
-//		//浣跨敤saveRevisionBuisnessObject鍙互瑙e喅杩欎釜闂锛岃繖閲屽厛鏆傛椂鎵ц涓ゆ淇濆瓨
+		//batchCBO淇濆瓨鐨勬椂鍊欐病鏈夎兘澶熻嚜鍔╱pdate婧愭暟鎹殑isLastR
+		//batchCBOTemplate.getCreateCbos().add(clientBusinessObject_template_insert);
+		//浣跨敤saveRevisionBuisnessObject鍙互瑙e喅杩欎釜闂锛岃繖閲屽厛鏆傛椂鎵ц涓ゆ淇濆瓨
 //		try {
 //			clientBusinessObjectOperation.saveRevisionBuinessObject(clientBusinessObject_template_insert);
 //		} catch (VCIError vciError) {
 //			throw new VciBaseException("鍗囩増淇濆瓨鍑洪敊浜�",new String[0],vciError);
 //		}
-//		// end --modify by lihang @20220408
-//		//codeClassifyTemplateMapper.insert(codeClassifyTemplateDO);
-//		//淇濆瓨妯℃澘灞炴��
+		// end --modify by lihang @20220408
+		//codeClassifyTemplateMapper.insert(codeClassifyTemplateDO);
+		//淇濆瓨妯℃澘灞炴��
 //		if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)){
 //			BatchCBO batchCBOTemplateAttr = codeClassifyTemplateAttrDaoI.batchInsert(codeClassifyTemplateAttrDOList);
 //			batchCBOTemplate.copyFromOther(batchCBOTemplateAttr);
@@ -570,8 +600,433 @@
 //		WebUtil.setPersistence(true);//鎵ц淇濆瓨
 //
 //		boService.persistenceBatch(batchCBOTemplate);//涓�璧锋墽琛屼繚瀛�
-//
+
 //		return BaseResult.success("鍗囩増鎴愬姛锛�");
 		return R.success("鍗囩増鎴愬姛锛�");
 	}
+
+	@Override
+	@Transactional
+	public R copyTemplate(CodeClstemplateDTO codeClassifyDTO) {
+		//鏃х殑妯℃澘oid
+		String oldOid = codeClassifyDTO.getOid();
+		//鏂扮殑妯℃澘oid
+		String newOid = VciBaseUtil.getPk();
+		//鍒嗙被oid,澶嶅埗杩囨潵鐨勬柊鐨勫垎绫籵id
+		String codeClassifyOid = codeClassifyDTO.getCodeClassifyOid();
+
+		//澶嶅埗妯℃澘
+		CodeClstemplateEntity codeClassifyTemplateDO_old = baseMapper.selectById(oldOid);//鏃фā鏉�
+
+		//楠岃瘉锛屼笟鍔$被鍨嬫槸涓嶆槸涓�鑷�
+		CodeClassify codeClassifyDO_old = codeClassifyService.selectBtmOrParentBtm(codeClassifyTemplateDO_old.getCodeClassifyOid());
+		if(codeClassifyDO_old==null){
+			return R.fail("澶嶅埗鐨勬ā鏉挎墍灞炲垎绫讳互鍙婁笂绾ф病鏈変笟鍔$被鍨嬶紝璇烽噸鏂伴�夋嫨!");
+		}
+
+		//鎵惧綋鍓嶅垎绫讳笅鐨勪笟鍔$被鍨�
+		CodeClassify codeClassifyDO_new = codeClassifyService.selectBtmOrParentBtm(codeClassifyOid);
+		if(codeClassifyDO_new==null){
+			return R.fail("褰撳墠鍒嗙被娌℃湁涓氬姟绫诲瀷锛岃閲嶆柊閫夋嫨!");
+		}
+
+		if(!codeClassifyDO_old.getBtmTypeId().equals(codeClassifyDO_new.getBtmTypeId())){
+			return R.fail("閫夋嫨鐨勫垎绫诲拰褰撳墠鍒嗙被涓氬姟绫诲瀷涓嶄竴鑷达紝璇烽噸鏂伴�夋嫨!");
+		}
+
+		codeClassifyTemplateDO_old.setId(codeClassifyDTO.getId());//鑻辨枃鍚嶇О
+		codeClassifyTemplateDO_old.setName(codeClassifyDTO.getName());//涓枃鍚嶇О
+		codeClassifyTemplateDO_old.setDescription(codeClassifyDTO.getDescription());//鎻忚堪
+		codeClassifyTemplateDO_old.setCodeClassifyOid(codeClassifyOid);//鍒嗙被oid
+		codeClassifyTemplateDO_old.setOid(newOid);
+		List<CodeClstemplateEntity> codeClassifyTemplateDOList = new ArrayList<CodeClstemplateEntity>();
+		codeClassifyTemplateDOList.add(codeClassifyTemplateDO_old);
+
+		//澶嶅埗妯℃澘灞炴��
+		List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = copyTemplateAttr(oldOid,newOid);
+
+		//澶嶅埗妯℃澘娴佺▼
+		List<CodeClsflowtempEntity> codeClassifyProcessTempDOList = copyTemplateProcess(oldOid,newOid);
+
+		//澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
+		Map  phase_attrMap = copyTemplatePhase_attr(oldOid,newOid);
+
+		List<CodeTemplatePhase> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhase>)phase_attrMap.get("phase");//妯℃澘闃舵
+		List<CodePhaseAttr> codePhaseAttrDOList = (ArrayList<CodePhaseAttr>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
+
+		//澶嶅埗妯℃澘鎸夐挳
+		List<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOList = copyTemplateButton(oldOid,newOid);
+
+//		baseMapper.insert(codeClassifyTemplateDOList);
+		this.saveBatch(codeClassifyTemplateDOList);
+		codeTempbuttonServiceImpl.saveBatch(codeClassifyTemplateButtonDOList);
+		codeClsflowtempServiceImpl.saveBatch(codeClassifyProcessTempDOList);
+		codeClstempattrService.saveBatch(codeClassifyTemplateAttrDOList);
+		codeTempphaseServiceImpl.saveBatch(codeClassifyPhaseDOList);
+		codePhaseattrServiceImpl.saveBatch(codePhaseAttrDOList);
+		//涓�璧蜂繚瀛樻暟鎹�
+//		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+//		//淇濆瓨妯℃澘
+//		BatchCBO batchCBOTemplate = codeClassifyTemplateMapper.batchInsert(codeClassifyTemplateDOList);
+//		//淇濆瓨妯℃澘灞炴��
+//		if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)) {
+//			BatchCBO batchCBOTemplateAttr = codeClassifyTemplateAttrDaoI.batchInsert(codeClassifyTemplateAttrDOList);
+//			batchCBOTemplate.copyFromOther(batchCBOTemplateAttr);
+//		}
+//
+//		//淇濆瓨妯℃澘娴佺▼
+//		if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOList)) {
+//			BatchCBO batchCBOTemplateProcessAttr = codeClassifyProcessTempDaoI.batchInsert(codeClassifyProcessTempDOList);
+//			batchCBOTemplate.copyFromOther(batchCBOTemplateProcessAttr);
+//		}
+//
+//		//妯℃澘闃舵
+//		if(!CollectionUtils.isEmpty(codeClassifyPhaseDOList)) {
+//			BatchCBO batchCBOTemplatePhaseAttr = codeTemplatePhaseDaoI.batchInsert(codeClassifyPhaseDOList);
+//			batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttr);
+//		}
+//
+//		//妯℃澘闃舵灞炴��
+//		if(!CollectionUtils.isEmpty(codePhaseAttrDOList)) {
+//			BatchCBO batchCBOTemplatePhaseAttrAttr = codePhaseAttrDaoI.batchInsert(codePhaseAttrDOList);
+//			batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttrAttr);
+//		}
+//
+//		//妯℃澘鎸夐挳
+//		if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOList)) {
+//			BatchCBO batchCBOTemplateButtonAttr = codeClassifyTemplateButtonDaoI.batchInsert(codeClassifyTemplateButtonDOList);
+//			batchCBOTemplate.copyFromOther(batchCBOTemplateButtonAttr);
+//		}
+//
+//
+//		WebUtil.setPersistence(true);//鎵ц淇濆瓨
+//
+//		boService.persistenceBatch(batchCBOTemplate);//涓�璧锋墽琛屼繚瀛�
+		return R.success("澶嶅埗鎴愬姛锛�");
+	}
+
+
+	private HashMap<String,Object> getVersionValue(int verRuleName) {
+		HashMap<String,Object> obj = new HashMap<>(2);
+		obj.put("VersionSeq",1);
+		if (verRuleName == 0) {
+			obj.put("VersionVal","1");
+		} else if (verRuleName == 1) {
+			obj.put("VersionVal","a");
+		} else if (verRuleName == 2) {
+			obj.put("VersionVal","0");
+		}
+
+		return obj;
+	}
+
+	/**
+	 * 澶嶅埗妯℃澘娴佺▼
+	 */
+	public List<CodeClsflowtempEntity> copyTemplateProcess(String templateOldOid,String templateNewOid){
+//		VciQueryWrapperForDO processWrapper = new VciQueryWrapperForDO(CodeClassifyProcessTempDO.class);
+//		processWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
+		Map<String,Object> condition = new HashMap<>(1);
+		condition.put("classifyTemplateOid",templateOldOid);
+		List<CodeClsflowtempEntity> codeClsflowtempEntities = codeClsflowtempMapper.selectByMap(condition);
+//		List<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOList = codeClassifyProcessTempDaoI.selectByWrapper(processWrapper);//瑕佷繚瀛樼殑鏂扮殑妯℃澘娴佺▼
+		for (CodeClsflowtempEntity codeClassifyProcessTempDO:codeClsflowtempEntities){
+//			String newOid = VciBaseUtil.getPk();
+			codeClassifyProcessTempDO.setOid(null);
+			//codeClassifyProcessTempDO.setCodeClassifyOid(templateNewOid);
+			codeClassifyProcessTempDO.setClassifytemplateoid(templateNewOid);
+//			codeClsflowtempMapper.insert(codeClassifyProcessTempDO);
+			//modify by lihang - @20220406 璁剧疆妯℃澘涓婚敭浣嶇疆鍑洪敊锛屽鑷村崌鐗堢殑妯℃澘涓殑娴佺▼鏄┖鐨勩��
+		}
+		return codeClsflowtempEntities;
+	}
+
+
+	/**
+	 * 澶嶅埗妯℃澘闃舵锛屾ā鏉垮睘鎬�
+	 * @param templateOldOid
+	 * @param templateNewOid
+	 * @return map phase:(List<CodeTemplatePhaseDO>) phaseAttr:(List<CodePhaseAttrDO>)
+	 */
+	public Map copyTemplatePhase_attr(String templateOldOid,String templateNewOid){
+		//妯℃澘闃舵
+//		VciQueryWrapperForDO phaseWrapper = new VciQueryWrapperForDO(CodeTemplatePhaseDO.class);
+//		phaseWrapper.addQueryMap("codeClassifyTemplateOid",templateOldOid);
+		Map<String,Object> condition = new HashMap<>(1);
+		condition.put("codeclassifyTemplateOid",templateOldOid);
+		List<CodeTemplatePhase> codeTempphaseEntities = codeTempphaseMapper.selectByMap(condition);
+//		List<CodeTemplatePhaseDO>  codeClassifyPhaseDOList = codeTemplatePhaseDaoI.selectByWrapper(phaseWrapper);//瑕佷繚瀛樼殑鏂扮殑妯℃澘娴佺▼
+		Map<String,String> phaseKeyMap = new HashMap<String,String>();//闇�瑕佸鍒剁殑妯℃澘闃舵灞炴��,key:value,妯℃澘闃舵鑰乷id:妯℃澘灞炴�ф柊oid
+		List<String> phaseOidList = new ArrayList<String>();
+		for (CodeTemplatePhase codeTemplatePhaseDO:codeTempphaseEntities){
+			String oldoid = codeTemplatePhaseDO.getOid();
+			String newOid = VciBaseUtil.getPk();
+			codeTemplatePhaseDO.setOid(newOid);
+			codeTemplatePhaseDO.setCodeClassifyTemplateOid(templateNewOid);
+			phaseKeyMap.put(oldoid,newOid);
+			phaseOidList.add(oldoid);
+		}
+
+		//妯℃澘闃舵鐨勫睘鎬�
+		List<CodePhaseAttr> codePhaseAttrDOList = new ArrayList<CodePhaseAttr>();
+
+		if(!CollectionUtils.isEmpty(phaseOidList)){//size()==0涓嬭竟鏂规硶浼氭姤閿�
+//			Map<String,String> conditionMap =  new HashMap<>();
+//			conditionMap.put("codephaseoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(phaseOidList.toArray(new String[0])) + ")");
+//			codePhaseAttrDOList = codePhaseAttrDaoI.selectByCondition(conditionMap,new PageHelper(-1));
+			codePhaseAttrDOList = codePhaseattrMapper.selectByPhaseaIds(VciBaseUtil.toInSql(phaseOidList.toArray(new String[0])));
+		}
+		for (CodePhaseAttr codePhaseAttrDO:codePhaseAttrDOList){
+			String oldPhaseoid = codePhaseAttrDO.getCodePhaseOid();
+//			String newOid = VciBaseUtil.getPk();
+			codePhaseAttrDO.setOid(null);
+			codePhaseAttrDO.setCodePhaseOid(phaseKeyMap.get(oldPhaseoid));
+//			codePhaseattrMapper.insert(codePhaseAttrDO);
+		}
+		Map phaseMap = new HashMap();
+		phaseMap.put("phase",codeTempphaseEntities);
+		phaseMap.put("phaseAttr",codePhaseAttrDOList);
+		return phaseMap;
+	}
+
+	/**
+	 * 澶嶅埗妯℃澘鎸夐挳
+	 */
+	public List<CodeClassifyTemplateButton> copyTemplateButton(String templateOldOid,String templateNewOid){
+
+		Map<String,Object> condition = new HashMap<>(1);
+		condition.put("classifyTemplateOid",templateOldOid);
+//		VciQueryWrapperForDO buttonWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateButtonDO.class);
+//		buttonWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
+		List<CodeClassifyTemplateButton> codeTempbuttonEntities = codeTempbuttonMapper.selectByMap(condition);
+//		List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = codeClassifyTemplateButtonDaoI.selectByWrapper(buttonWrapper);
+		for (CodeClassifyTemplateButton codeClassifyTemplateButtonDO:codeTempbuttonEntities){
+//			String newOid = VciBaseUtil.getPk();
+			codeClassifyTemplateButtonDO.setOid(null);
+			codeClassifyTemplateButtonDO.setClassifytemplateoid(templateNewOid);
+		}
+		return codeTempbuttonEntities;
+	}
+
+
+	/**
+	 * 澶嶅埗妯℃澘灞炴��
+	 */
+	public List<CodeClstempattrEntity> copyTemplateAttr(String templateOldOid,String templateNewOid){
+
+//		VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+//		codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
+
+		Map<String,Object> condition = new HashMap<>(1);
+		condition.put("classifyTemplateOid",templateOldOid);
+
+//		List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
+		List<CodeClstempattrEntity> codeClstempattrEntities = codeClstempattrMapper.selectByMap(condition);
+
+		for (CodeClstempattrEntity codeClassifyTemplateAttrDO :codeClstempattrEntities){
+//			String attrOid = VciBaseUtil.getPk();
+			codeClassifyTemplateAttrDO.setOid(null);
+			codeClassifyTemplateAttrDO.setClassifytemplateoid(templateNewOid);
+//			codeClstempattrMapper.insert(codeClassifyTemplateAttrDO);
+		}
+		return codeClstempattrEntities;
+	}
+
+
+	/**
+	 * 鍒嗙被妯℃澘鍒楄〃
+	 *
+	 * @param plCodeClstemplate 鏌ヨ鏉′欢
+	 * @param query   鍒嗛〉瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeClstemplateVO> gridCodeClassifyTemplate(CodeClstemplateVO plCodeClstemplate, Query query) throws VciBaseException {
+		DataGrid<CodeClstemplateVO> dataGrid=new DataGrid<CodeClstemplateVO>();
+		//娌℃湁浼犲垎绫籭d锛屼笉鎵ц鏌ヨ閫昏緫锛岀洿鎺ヨ繑鍥�
+//		if(conditionMap.size()==0){
+//			dataGrid.setData(new ArrayList<>());
+//			dataGrid.setTotal(0);
+//			return dataGrid;
+//		}
+//		if (pageHelper == null) {
+//			pageHelper = new PageHelper(-1);
+//		}
+//		pageHelper.addDefaultDesc("revisionSeq");
+
+
+
+		List<CodeClstemplateVO> doList = codeClstemplateMapper.selectPlCodeClstemplatePage(Condition.getPage(query), plCodeClstemplate);
+		if (!CollectionUtils.isEmpty(doList)) {
+//			QueryWrapper<CodeClstemplateVO> codeClstemplateVOQueryWrapper = new QueryWrapper<>();
+//			codeClstemplateVOQueryWrapper.allEq(plCodeClstemplate);
+			List<CodeClstemplateEntity> codeClstemplateEntity = new ArrayList<>();
+			BeanUtils.copyProperties(doList,codeClstemplateEntity);
+			dataGrid.setData(codeClassifyTemplateDO2VOs(codeClstemplateEntity));
+			dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClstemplateMapper.selectCount(Condition.getQueryWrapper(plCodeClstemplate)))));
+		}
+		return dataGrid;
+	}
+
+
+	/**
+	 * 澧炲姞鍒嗙被妯℃澘瀵硅薄
+	 * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public R<CodeClstemplateVO> addSave(CodeClstemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+		//灏咲TO杞崲涓篋O
+		CodeClstemplateEntity codeClassifyTemplateDO = new CodeClstemplateEntity();
+		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDO);
+
+		//鏌ヨ鍒嗙被浠ュ強涓婄骇鍒嗙被鐨勪笟鍔$被鍨媌tmtypeid銆乥tmtypename
+		List<CodeClassify> codeClassifyDOList = codeClassifyService.selectAllLevelParents(codeClassifyTemplateDTO.getCodeClassifyOid());
+
+		//鎵�鏈夊垎绫婚兘娌℃湁涓氬姟绫诲瀷锛岃繑鍥炴彁绀�
+		if(codeClassifyDOList.size()==0){
+			return R.fail("娣诲姞妯℃澘娣诲姞澶辫触,鍒嗙被鍜屼笂绾у垎绫婚兘娌℃湁鍏宠仈涓氬姟绫诲瀷锛�");
+		}
+
+		//璁剧疆btmtypeid鍜宯ame
+		CodeClassify codeClassifyDO = codeClassifyDOList.get(0);
+		codeClassifyTemplateDO.setBtmTypeId(codeClassifyDO.getBtmTypeId());
+		codeClassifyTemplateDO.setBtmTypeName(codeClassifyDO.getBtmTypeName());
+		codeClassifyTemplateDO.setLcStatus(FRAMEWORK_RELEASE_EDITING);
+		codeClassifyTemplateDO.setTs(new Date());
+		codeClassifyTemplateDO.setOwner(AuthUtil.getUser().getUserName());
+		codeClassifyTemplateDO.setLctid("codeClsTempLc");
+		codeClassifyTemplateDO.setVersionValue("1");
+		codeClassifyTemplateDO.setVersionSeq(1);
+		codeClassifyTemplateDO.setRevisionValue("1");
+		codeClassifyTemplateDO.setRevisionSeq(1);
+		codeClassifyTemplateDO.setVersionRule("0");
+		codeClassifyTemplateDO.setRevisionRule("numberversionrule");
+		codeClassifyTemplateDO.setLastModifyTime(new Date());
+		codeClassifyTemplateDO.setLastModifier(AuthUtil.getUser().getUserName());
+		codeClassifyTemplateDO.setCreator(AuthUtil.getUser().getUserName());
+		codeClassifyTemplateDO.setCreateTime(new Date());
+		codeClassifyTemplateDO.setLastV("1");
+		codeClassifyTemplateDO.setLastR("1");
+		codeClassifyTemplateDO.setFirstV("1");
+		codeClassifyTemplateDO.setFirstR("1");
+		codeClassifyTemplateDO.setBtmname("codeclstemplate");
+
+		baseMapper.insert(codeClassifyTemplateDO);
+		//榛樿娣诲姞妯℃澘灞炴��
+//        List<CodeClassifyTemplateAttrDO> attrDOList = new ArrayList<>();
+
+//        CodeClassifyTemplateAttrDO codeAttr = new CodeClassifyTemplateAttrDO();
+//        codeAttr.setId("id");
+//        codeAttr.setName("浼佷笟缂栫爜");
+//        codeAttr.setAttributeDataType("VTString");
+//        codeAttr.setAttrTableWidth(150);
+//        codeAttr.setOrderNum(1);
+//        codeAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
+//        codeAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
+//        codeAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
+//        attrDOList.add(codeAttr);
+//
+//
+//        CodeClassifyTemplateAttrDO groupAttr = new CodeClassifyTemplateAttrDO();
+//        groupAttr.setId("name");
+//        groupAttr.setName("闆嗗洟鐮�");
+//        groupAttr.setAttributeDataType("VTString");
+//        groupAttr.setAttrTableWidth(150);
+//        groupAttr.setOrderNum(2);
+//        groupAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
+//        groupAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
+//        groupAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
+//        attrDOList.add(groupAttr);
+//
+//        CodeClassifyTemplateAttrDO descAttr = new CodeClassifyTemplateAttrDO();
+//        descAttr.setId("description");
+//        descAttr.setName("鎻忚堪");
+//        descAttr.setAttrTableWidth(150);
+//        descAttr.setAttributeDataType("VTString");
+//        descAttr.setOrderNum(3);
+//        descAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
+//        descAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
+//        descAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
+//        attrDOList.add(descAttr);
+//
+//        CodeClassifyTemplateAttrDO statusAttr = new CodeClassifyTemplateAttrDO();
+//        statusAttr.setId("lcstatus");
+//        statusAttr.setName("鐘舵��");
+//        statusAttr.setAttrTableWidth(70);
+//        statusAttr.setOrderNum(4);
+//        statusAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
+//        statusAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
+//        statusAttr.setAttributeDataType("VTString");
+//        statusAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
+//        attrDOList.add(statusAttr);
+//
+//
+//        CodeClassifyTemplateAttrDO secAttr = new CodeClassifyTemplateAttrDO();
+//        secAttr.setId("secretgrade");
+//        secAttr.setName("瀵嗙骇");
+//        secAttr.setAttrTableWidth(70);
+//        secAttr.setAttributeDataType(VciFieldTypeEnum.VTInteger.name());
+//        secAttr.setEnumId("Enumsecretgrade");
+//        secAttr.setEnumName("瀵嗙骇");
+//        secAttr.setOrderNum(4);
+//        secAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
+//        secAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
+//        secAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
+//        attrDOList.add(secAttr);
+
+		return R.data(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
+	}
+
+	/**
+	 * 淇敼鍒嗙被妯℃澘瀵硅薄
+	 * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public R editSave(CodeClstemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateDTO.getOid(),"鍒嗙被妯℃澘瀵硅薄涓婚敭");
+		//妫�鏌s
+		CodeClstemplateEntity codeClassifyTemplateDOCopyFromDTO = new CodeClstemplateEntity();
+		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDOCopyFromDTO);
+		CodeClstemplateEntity codeClassifyTemplateDO = null;
+		if(codeClassifyTemplateDOCopyFromDTO.getOid() == null){
+			baseMapper.insert(codeClassifyTemplateDOCopyFromDTO);
+			return R.data(codeClassifyTemplateDOCopyFromDTO);
+		}else{
+//			Map<String,Object> condition = new HashMap<>(2);
+//			condition.put("oid",codeClassifyTemplateDOCopyFromDTO.getOid());
+//			condition.put("ts",codeClassifyTemplateDOCopyFromDTO.getTs());
+			CodeClstemplateEntity detail = baseMapper
+				.selectById(codeClassifyTemplateDOCopyFromDTO.getOid());
+			//		boolean tsBoolean = boService.checkTs(codeClassifyTemplateAttrDOListemplateDOCopyFromDTO);
+			if(detail.getTs().compareTo(codeClassifyTemplateDOCopyFromDTO.getTs()) != 0){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+				return R.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
+			}
+
+			//灏咲TO杞崲涓篋O
+			codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
+			String lcstatus = codeClassifyTemplateDO.getLcStatus();
+			String versionvalue = codeClassifyTemplateDO.getVersionValue();
+
+			//鍙湁缂栬緫涓墠鑳戒慨鏀�
+			if(!CodeClassifyTemplateLC.EDITING.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
+				return R.fail("鍙湁缂栬緫涓殑锛屾ā鏉挎墠鑳戒慨鏀癸紒");
+			}
+			revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateDTO,codeClassifyTemplateDO);
+			//涓嶄慨鏀圭増鏈彿鍜岀姸鎬�
+			codeClassifyTemplateDO.setLcStatus(lcstatus);
+			codeClassifyTemplateDO.setVersionValue(versionvalue);
+			codeClassifyTemplateDO.setTs(new Date());
+			codeClassifyTemplateDO.setLastModifier(AuthUtil.getUser().getUserName());
+			codeClassifyTemplateDO.setLastModifyTime(new Date());
+			baseMapper.updateById(codeClassifyTemplateDO);
+		}
+		return R.data(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
+	}
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
index 1bf6076..5c7939a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
@@ -1,19 +1,347 @@
 package com.vci.ubcs.code.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dto.CodeFixedValueDTO;
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
 import com.vci.ubcs.code.entity.CodeFixedValue;
 import com.vci.ubcs.code.mapper.CodeFixedValueMapper;
 import com.vci.ubcs.code.service.ICodeFixedValueService;
+import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
+import com.vci.ubcs.code.wrapper.CodeFixedValueWrapper;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+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.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
 
 /**
  * 鍥哄畾鐮佹鐨勭爜鍊兼湇鍔�
- * @author weidy
+ * @author ludc
  * @date 2022-01-24
  */
 @Service
 public class CodeFixedValueServiceImpl extends ServiceImpl<CodeFixedValueMapper, CodeFixedValue> implements ICodeFixedValueService {
 
+	/**
+	 * 鏁版嵁鎿嶄綔灞�
+	 */
+	@Resource
+	private CodeFixedValueMapper codeFixedValueMapper;
+
+	/**
+	 * 瀵硅薄鐨勬搷浣�
+	 */
+	@Resource
+	private RevisionModelUtil revisionModelUtil;
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param codeFixedValueVO 鏌ヨ鏉′欢
+	 * @param page 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public IPage<CodeFixedValueVO> gridCodeFixedValue(CodeFixedValueVO codeFixedValueVO,IPage<CodeFixedValueVO> page) throws VciBaseException{
+		String secOid = codeFixedValueVO.getCodeFixedSecOid();
+		if(StringUtils.isBlank(secOid)){
+			return null;
+		}
+		List<CodeFixedValue> doList = codeFixedValueMapper.selectByPage(codeFixedValueVO,page);
+		return page.setRecords(CodeFixedValueWrapper.build().listVO(doList));
+	}
+
+	/**
+	 * 澧炲姞鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public boolean addSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeFixedValueDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+		//灏咲TO杞崲涓篋O
+		CodeFixedValue codeFixedValueDO = new CodeFixedValue();
+		BeanUtilForVCI.copyPropertiesIgnoreCase(codeFixedValueDTO,codeFixedValueDO);
+		//濉厖涓�浜涢粯璁ゅ��
+		codeFixedValueDO.setOid(VciBaseUtil.getPk());
+		codeFixedValueDO.setRevisionOid(VciBaseUtil.getPk());
+		codeFixedValueDO.setNameOid(VciBaseUtil.getPk());
+		codeFixedValueDO.setBtmname(MdmBtmTypeConstant.CODE_FIXED_VALUE);
+		codeFixedValueDO.setCreateTime(new Date());
+		codeFixedValueDO.setCreator(AuthUtil.getUserId().toString());
+		codeFixedValueDO.setLastModifier(AuthUtil.getUserId().toString());
+		codeFixedValueDO.setLastModifyTime(new Date());
+		codeFixedValueDO.setTs(new Date());
+		Long count = this.codeFixedValueMapper.selectCount(Wrappers.<CodeFixedValue>query()
+			.lambda().eq(CodeFixedValue::getCodeFixedSecOid, codeFixedValueDO.getCodeFixedSecOid())
+		)+1L;
+		codeFixedValueDO.setOrderNum(count.intValue());
+		boolean resBoolean = this.codeFixedValueMapper.insert(codeFixedValueDO) > 0;
+		return resBoolean;
+	}
+
+	/**
+	 * 淇敼鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean editSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeFixedValueDTO,"鏁版嵁瀵硅薄",codeFixedValueDTO.getOid(),"鍥哄畾鐮佹鐨勭爜鍊间富閿�");
+		//灏咲TO杞崲涓篋O
+		CodeFixedValue codeFixedValueDO = selectByOid(codeFixedValueDTO.getOid());
+		revisionModelUtil.copyFromDTOIgnore(codeFixedValueDTO,codeFixedValueDO);
+		//濉厖涓�浜涢粯璁ゅ��
+		codeFixedValueDO.setLastModifier(AuthUtil.getUserId().toString());
+		codeFixedValueDO.setLastModifyTime(new Date());
+		codeFixedValueDO.setTs(new Date());
+		boolean resBoolean = codeFixedValueMapper.updateById(codeFixedValueDO) > 0;
+		return resBoolean;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+	 * @param codeFixedValueDTO 鏁版嵁浼犺緭瀵硅薄
+	 * @param codeFixedValueDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+	 */
+	private R checkIsCanDeleteForDO(CodeFixedValueDTO codeFixedValueDTO, CodeFixedValue codeFixedValueDO) {
+		if (checkTs(codeFixedValueDTO)) {
+			return R.fail(TS_NOT_PROCESS);
+		}
+		if(!checkIsLinked(codeFixedValueDO.getOid())) {
+			return R.status(true);
+		}else{
+			return R.fail(DATA_LINKED_NOT_DELETE);
+		}
+	}
+
+	/**
+	 * 妫�鏌s
+	 * @param tempDO
+	 * @return
+	 */
+	private boolean checkTs(CodeFixedValueDTO tempDO){
+		LambdaQueryWrapper<CodeFixedValue> wrapper = Wrappers.<CodeFixedValue>query()
+			.lambda().eq(CodeFixedValue::getOid,tempDO.getOid()).select(CodeFixedValue::getTs);
+		long dbTs = codeFixedValueMapper.selectById(wrapper).getTs().getTime();
+		long currentTs = tempDO.getTs().getTime();
+		if(dbTs == currentTs){
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁琚紩鐢�
+	 * @param oid 涓婚敭
+	 * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	private boolean checkIsLinked(String oid) throws VciBaseException{
+		//TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+		return false;
+	}
+
+	/**
+	 * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R deleteCodeFixedValue(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException {
+		VciBaseUtil.alertNotNull(codeFixedValueDTO,"鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�",codeFixedValueDTO.getOid(),"鍥哄畾鐮佹鐨勭爜鍊肩殑涓婚敭");
+		CodeFixedValue codeFixedValueDO = selectByOid(codeFixedValueDTO.getOid());
+		R baseResult = checkIsCanDeleteForDO(codeFixedValueDTO,codeFixedValueDO);
+		if(!baseResult.isSuccess()) {
+			return baseResult;
+		}
+		//鎵ц鍒犻櫎鎿嶄綔
+		boolean resBoolean = codeFixedValueMapper.deleteById(codeFixedValueDO.getOid())>0;
+		return R.status(resBoolean);
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param oid 涓婚敭
+	 * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public CodeFixedValueVO getObjectByOid(String oid) throws VciBaseException{
+		return CodeFixedValueWrapper.build().entityVO(selectByOid(oid));
+	}
+
+	/**
+	 * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+	 * @param oid 涓婚敭
+	 * @return  鏁版嵁瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private CodeFixedValue selectByOid(String oid) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeFixedValue codeFixedValueDO = codeFixedValueMapper.selectById(oid.trim());
+		if(codeFixedValueDO == null || StringUtils.isBlank(codeFixedValueDO.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return codeFixedValueDO;
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	@Override
+	public Collection<CodeFixedValueVO> listCodeFixedValueByOids(Collection<String> oidCollections) throws VciBaseException {
+		VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+		List<CodeFixedValue> codeFixedValueDOList = listCodeFixedValueDOByOidCollections(oidCollections);
+		return CodeFixedValueWrapper.build().listVO(codeFixedValueDOList);
+	}
+
+	/**
+	 * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+	 * @param oidCollections 涓婚敭鐨勯泦鍚�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	private List<CodeFixedValue> listCodeFixedValueDOByOidCollections(Collection<String> oidCollections){
+		List<CodeFixedValue> codeFixedValueDOList = new ArrayList<>();
+		if(!CollectionUtils.isEmpty(oidCollections)){
+			Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+			for(Collection<String> oids: oidCollectionsList){
+				List<CodeFixedValue> tempDOList =  codeFixedValueMapper.selectBatchIds(oids);
+				if(!CollectionUtils.isEmpty(tempDOList)){
+					codeFixedValueDOList.addAll(tempDOList);
+				}
+			}
+		}
+		return  codeFixedValueDOList;
+	}
+
+	/**
+	 * 鍙傜収鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+	 * @param codeFixedValueVO 鏌ヨ鏉′欢
+	 * @param page 鍒嗛〉鍜屾帓搴�
+	 * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public IPage<CodeFixedValueVO> refDataGridCodeFixedValue(CodeFixedValueVO codeFixedValueVO,IPage<CodeFixedValueVO> page) throws VciBaseException{
+		return gridCodeFixedValue(codeFixedValueVO,page);
+	}
+
+	/**
+	 * 浣跨敤鐮佹鐨勪富閿幏鍙栧浐瀹氱爜鐨勭爜鍊�
+	 *
+	 * @param secOidCollection 鐮佹鐨勪富閿�
+	 * @return 鐮佸�兼樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鐨勬椂鍊欏嚭鐜颁簡閿欒浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public Map<String, List<CodeFixedValueVO>> listCodeFixedValueBySecOids(Collection<String> secOidCollection) throws VciBaseException {
+		if(CollectionUtils.isEmpty(secOidCollection)){
+			return  new HashMap<>();
+		}
+		List<CodeFixedValueVO> voList = new ArrayList<>();
+		VciBaseUtil.switchCollectionForOracleIn(secOidCollection).forEach(secOids->{
+			Query query = new Query();
+			query.setDescs("orderNum");
+			query.setSize(-1);
+			query.setCurrent(1);
+			List<CodeFixedValue> valueDOS = this.codeFixedValueMapper.selectByPageByCodeFixedSecOid(secOids,Condition.getPage(query));
+			voList.addAll(CodeFixedValueWrapper.build().listVO(Optional.ofNullable(valueDOS).orElseGet(() -> new ArrayList<>())));
+		});
+		return voList.stream().collect(Collectors.groupingBy(CodeFixedValueVO::getCodeFixedSecOid));
+	}
+
+	/**
+	 * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+	 * @param dtoList 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+	 * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R<CodeFixedValueVO> batchSave4Order(List<CodeFixedValueDTO> dtoList, String codefixedsecoid) {
+		VciBaseUtil.alertNotNull(codefixedsecoid,"鍥哄畾鐮佹涓婚敭");
+		List<CodeFixedValue> doList = codeFixedValueMapper.selectList(Wrappers.<CodeFixedValue>query()
+			.lambda().eq(CodeFixedValue::getCodeFixedSecOid,codefixedsecoid)
+		);
+		List<CodeFixedValue> updateList = new ArrayList<>();
+		List<String> deleteOidList = new ArrayList<>();
+		dtoList.forEach(dto -> {
+			if (StringUtils.isNotBlank(dto.getOid())){
+				List<CodeFixedValue> valueDOList = doList.stream().filter(value -> {
+					return value.getOid().equals(dto.getOid());
+				}).collect(Collectors.toList());
+				valueDOList.forEach(valueDO -> {
+					valueDO.setId(dto.getId());
+					valueDO.setName(dto.getName());
+					valueDO.setOrderNum(dto.getOrderNum());
+					updateList.add(valueDO);
+				});
+			}else{
+				throw new VciBaseException("鍥哄畾鐮佹涓婚敭涓嶈兘涓虹┖");
+			}
+		});
+		if (doList.size() != dtoList.size()){
+			List<String> oidList = dtoList.stream().map(CodeFixedValueDTO::getOid).collect(Collectors.toList());
+			List<CodeFixedValue> deleteList = new ArrayList<>();
+			for (CodeFixedValue value : doList) {
+				if (!oidList.contains(value.getOid())){
+					deleteList.add(value);
+				}
+			}
+			deleteOidList = deleteList.stream().map(CodeFixedValue::getOid).collect(Collectors.toList());
+		}
+		boolean resBooleanUpdate = this.updateBatchById(updateList);
+		if (!CollectionUtils.isEmpty(deleteOidList)) {
+			codeFixedValueMapper.deleteBatchIds(deleteOidList);
+		}
+		return R.status(resBooleanUpdate);
+	}
+
+	/**
+	 * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
+	 * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean batchDeleteBySecOid(String codefixedsecoid) {
+		VciBaseUtil.alertNotNull(codefixedsecoid,"鍥哄畾鐮佹涓婚敭");
+		List<CodeFixedValue> doList = codeFixedValueMapper.selectList(Wrappers.<CodeFixedValue>query()
+			.lambda().eq(CodeFixedValue::getCodeFixedSecOid,codefixedsecoid)
+		);
+		boolean resBoolean = codeFixedValueMapper.deleteBatchIds(doList.stream().map(CodeFixedValue::getOid).collect(Collectors.toList())) > 0;
+		return resBoolean;
+	}
 
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyattrrepeatServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyattrrepeatServiceImpl.java
index 7c44be8..0d51c52 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyattrrepeatServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyattrrepeatServiceImpl.java
@@ -22,8 +22,8 @@
 import com.vci.ubcs.code.mapper.CodeKeyattrrepeatMapper;
 import com.vci.ubcs.code.service.ICodeKeyattrrepeatService;
 import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
-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.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java
index 742dc51..06962aa 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java
@@ -18,8 +18,8 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
-import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
 import com.vci.ubcs.code.service.ICodePhaseattrService;
 import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import org.springframework.stereotype.Service;
@@ -31,7 +31,7 @@
  * @since 2023-04-20
  */
 @Service
-public class CodePhaseattrServiceImpl extends ServiceImpl<CodePhaseattrMapper, CodePhaseattrEntity> implements ICodePhaseattrService {
+public class CodePhaseattrServiceImpl extends ServiceImpl<CodePhaseAttrMapper, CodePhaseAttr> implements ICodePhaseattrService {
 
 	@Override
 	public IPage<CodePhaseattrVO> selectCodePhaseattrPage(IPage<CodePhaseattrVO> page, CodePhaseattrVO CodePhaseattr) {
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
index fd7c939..3049bac 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
@@ -36,12 +36,12 @@
 import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
 import com.vci.ubcs.code.wrapper.CodeClassifyWrapper;
 import com.vci.ubcs.code.wrapper.CodeRuleWrapper;
-import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
-import com.vci.ubcs.com.vci.starter.revision.service.RevisionModelUtil;
-import com.vci.ubcs.com.vci.starter.web.pagemodel.KeyValue;
-import com.vci.ubcs.com.vci.starter.web.util.BeanUtilForVCI;
-import com.vci.ubcs.com.vci.starter.web.util.VciBaseUtil;
-import com.vci.ubcs.com.vci.starter.web.util.WebUtil;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.web.pagemodel.KeyValue;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.util.WebUtil;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
@@ -113,12 +113,13 @@
 	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
 	 */
 	@Override
-	public boolean addSave(CodeRuleDTO codeRuleDTO) throws VciBaseException{
+	public boolean addSave(CodeRuleDTO codeRuleDTO) throws VciBaseException {
 		VciBaseUtil.alertNotNull(codeRuleDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
 		//灏咲TO杞崲涓篋O
 		CodeRule codeRule = Objects.requireNonNull(BeanUtil.copy(codeRuleDTO, CodeRule.class));
 		String userId = AuthUtil.getUserId().toString();
 		codeRule.setOid(VciBaseUtil.getPk());
+
 		codeRule.setRevisionOid(VciBaseUtil.getPk());
 		codeRule.setNameOid(VciBaseUtil.getPk());
 		codeRule.setBtmname("coderule");
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java
index c8577ed..258e9a9 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java
@@ -17,19 +17,44 @@
 package com.vci.ubcs.code.service.impl;
 
 import com.alibaba.nacos.common.utils.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import com.vci.ubcs.code.mapper.CodeTempbuttonMapper;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
+import com.vci.ubcs.code.entity.CodeClassifyValue;
+import com.vci.ubcs.code.mapper.CodeClassifyTemplateButtonMapper;
+import com.vci.ubcs.code.service.ICodeButtonService;
 import com.vci.ubcs.code.service.ICodeTempbuttonService;
-import com.vci.ubcs.code.vo.CodeTempbuttonVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.util.BeanUtil;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.util.WebUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cglib.beans.BeanMap;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.annotation.Resource;
+import java.lang.reflect.Field;
+import java.util.*;
 import java.util.stream.Collectors;
+
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鏈嶅姟瀹炵幇绫�
@@ -38,11 +63,301 @@
  * @since 2023-04-20
  */
 @Service
-public class CodeTempbuttonServiceImpl extends ServiceImpl<CodeTempbuttonMapper, CodeTempbuttonEntity> implements ICodeTempbuttonService {
+public class CodeTempbuttonServiceImpl extends ServiceImpl<CodeClassifyTemplateButtonMapper, CodeClassifyTemplateButton> implements ICodeTempbuttonService {
+
+	/**
+	 * 鏁版嵁鎿嶄綔灞�
+	 */
+	@Autowired
+	private CodeClassifyTemplateButtonMapper codeClassifyTemplateButtonMapper;
+
+	/**
+	 * 鎸夐挳鐨勬湇鍔�
+	 */
+	@Autowired
+	private ICodeButtonService buttonService;
+
+	/**
+	 * 瀵硅薄鐨勬搷浣�
+	 */
+	@Autowired
+	private RevisionModelUtil revisionModelUtil;
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonVO 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO, Query query) throws VciBaseException {
+		query.setDescs("createTime");
+
+		if(StringUtils.isBlank(codeClassifyTemplateButtonVO.getClassifytemplateoid())){
+			return null;
+		}
+		IPage<CodeClassifyTemplateButton> doList = codeClassifyTemplateButtonMapper.selectPage(Condition.getPage(query),Condition.getQueryWrapper(codeClassifyTemplateButtonVO));
+		DataGrid<CodeClassifyTemplateButtonVO> dataGrid=new DataGrid<CodeClassifyTemplateButtonVO>();
+		if (!CollectionUtils.isEmpty(doList.getRecords())) {
+			dataGrid.setData(codeClassifyTemplateButtonDO2VOs(doList.getRecords()));
+			dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateButtonMapper.selectCount(Condition.getQueryWrapper(codeClassifyTemplateButtonVO)))));
+		}
+		return dataGrid;
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOs) throws VciBaseException{
+		return codeClassifyTemplateButtonDO2VOs(codeClassifyTemplateButtonDOs,false);
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勪俊鎭�
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOs, boolean hasButtonVO) throws VciBaseException{
+		List<CodeClassifyTemplateButtonVO> voList = new ArrayList<CodeClassifyTemplateButtonVO>();
+		if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOs)){
+			for(CodeClassifyTemplateButton s: codeClassifyTemplateButtonDOs){
+				CodeClassifyTemplateButtonVO vo =  codeClassifyTemplateButtonDO2VO(s);
+				if(vo != null){
+					voList.add(vo);
+				}
+			}
+		}
+		if(hasButtonVO && !CollectionUtils.isEmpty(voList)){
+			//鑾峰彇鎸夐挳鐨勬樉绀哄璞�
+			List<CodeButtonVO> buttonVOList = new ArrayList<>();
+			VciBaseUtil.switchCollectionForOracleIn(voList.stream().map(CodeClassifyTemplateButtonVO::getClassifybuttonoid).collect(Collectors.toList())).stream().forEach(buttonOids->{
+				buttonVOList.addAll(buttonService.listCodeButtonByOids(buttonOids));
+			});
+			Map<String, CodeButtonVO> buttonVOMap = Optional.ofNullable(buttonVOList).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+			voList.stream().forEach(vo->{
+				vo.setButtonVO(buttonVOMap.getOrDefault(vo.getClassifybuttonoid(),null));
+			});
+		}
+		return voList;
+	}
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyTemplateButtonDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeClassifyTemplateButtonVO codeClassifyTemplateButtonDO2VO(CodeClassifyTemplateButton codeClassifyTemplateButtonDO) throws VciBaseException{
+		CodeClassifyTemplateButtonVO vo = new CodeClassifyTemplateButtonVO();
+		if(codeClassifyTemplateButtonDO != null){
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateButtonDO,vo);
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+		}
+		return vo;
+	}
 
 	@Override
-	public IPage<CodeTempbuttonVO> selectCodeTempbuttonPage(IPage<CodeTempbuttonVO> page, CodeTempbuttonVO CodeTempbutton) {
+	public IPage<CodeClassifyTemplateButtonVO> selectCodeTempbuttonPage(IPage<CodeClassifyTemplateButtonVO> page, CodeClassifyTemplateButtonVO CodeTempbutton) {
 		return page.setRecords(baseMapper.selectCodeTempbuttonPage(page, CodeTempbutton));
+	}
+
+	/**
+	 * 澧炲姞涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean addSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeClassifyTemplateButtonDTO.getClassifytemplateoid(),"妯℃澘鐨勪富閿�");
+		//灏咲TO杞崲涓篋O
+		CodeClassifyTemplateButton codeClassifyTemplateButtonDO = new CodeClassifyTemplateButton();
+		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+		if(codeClassifyTemplateButtonDO.getOrderNum()== null){
+			//鏌ヨ鍏ㄩ儴
+			Long count = codeClassifyTemplateButtonMapper.selectCount(Wrappers.<CodeClassifyTemplateButton>query()
+				.lambda().eq(CodeClassifyTemplateButton::getClassifytemplateoid,codeClassifyTemplateButtonDTO.getClassifytemplateoid())
+			);
+			if(count == null){
+				count = 0L;
+			}
+			codeClassifyTemplateButtonDO.setOrderNum(Long.valueOf(count + 1L).intValue());
+		}
+		return codeClassifyTemplateButtonMapper.insert(codeClassifyTemplateButtonDO)>0;
+	}
+
+	/**
+	 * 淇敼涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean editSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateButtonDTO.getOid(),"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽富閿�");
+		//灏咲TO杞崲涓篋O
+		CodeClassifyTemplateButton codeClassifyTemplateButtonDO = selectByOid(codeClassifyTemplateButtonDTO.getOid());
+		revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+		return codeClassifyTemplateButtonMapper.updateById(codeClassifyTemplateButtonDO)>0;
+	}
+
+	/**
+	 * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R deleteCodeClassifyTemplateButton(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�",codeClassifyTemplateButtonDTO.getOid(),"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽殑涓婚敭");
+		CodeClassifyTemplateButton codeClassifyTemplateButtonDO = selectByOid(codeClassifyTemplateButtonDTO.getOid());
+		R baseResult = checkIsCanDeleteForDO(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+		if(!baseResult.isSuccess()) {
+		}else{
+			return baseResult;
+		}
+		//鎵ц鍒犻櫎鎿嶄綔
+		boolean b = codeClassifyTemplateButtonMapper.deleteById(codeClassifyTemplateButtonDO.getOid()) > 0;
+		return R.status(b);
+	}
+
+	/**
+	 * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+	 * @param codeClassifyTemplateButtonDTO 鏁版嵁浼犺緭瀵硅薄
+	 * @param codeClassifyTemplateButtonDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+	 */
+	private R checkIsCanDeleteForDO(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO, CodeClassifyTemplateButton codeClassifyTemplateButtonDO) {
+		CodeClassifyTemplateButton tsDO = new CodeClassifyTemplateButton();
+		BeanUtil.convert(codeClassifyTemplateButtonDTO,tsDO);
+		if (checkTs(tsDO)) {
+			return R.fail(TS_NOT_PROCESS);
+		}
+		if(!checkIsLinked(codeClassifyTemplateButtonDO.getOid())) {
+			return R.success("success");
+		}else{
+			return R.fail(DATA_LINKED_NOT_DELETE);
+		}
+	}
+
+	/**
+	 * 妫�鏌s
+	 * @param tempDO
+	 * @return
+	 */
+	private boolean checkTs(CodeClassifyTemplateButton tempDO){
+		LambdaQueryWrapper<CodeClassifyTemplateButton> wrapper = Wrappers.<CodeClassifyTemplateButton>query()
+			.lambda().eq(CodeClassifyTemplateButton::getOid,tempDO.getOid()).select(CodeClassifyTemplateButton::getTs);
+		long dbTs = codeClassifyTemplateButtonMapper.selectById(wrapper).getTs().getTime();
+		long currentTs = tempDO.getTs().getTime();
+		if(dbTs == currentTs){
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oid 涓婚敭
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeClassifyTemplateButtonVO getObjectByOid(String oid) throws VciBaseException{
+		return codeClassifyTemplateButtonDO2VO(selectByOid(oid));
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	@Override
+	public Collection<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(Collection<String> oidCollections) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+		List<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOList = listCodeClassifyTemplateButtonDOByOidCollections(oidCollections);
+		return codeClassifyTemplateButtonDO2VOs(codeClassifyTemplateButtonDOList);
+	}
+
+	/**
+	 * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, String>();
+		}
+		CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = new CodeClassifyTemplateButtonVO();
+		BeanMap beanMap = BeanMap.create(codeClassifyTemplateButtonVO);
+		beanMap.putAll(conditionMap);
+		Query query = new Query();
+		query.setSize(pageHelper.getLimit());
+		query.setCurrent(pageHelper.getPage());
+
+		return gridCodeClassifyTemplateButton(codeClassifyTemplateButtonVO,query);
+	}
+
+	/**
+	 * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+	 * @param oidCollections 涓婚敭鐨勯泦鍚�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	private List<CodeClassifyTemplateButton> listCodeClassifyTemplateButtonDOByOidCollections(Collection<String> oidCollections){
+		List<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOList = new ArrayList<CodeClassifyTemplateButton>();
+		if(!CollectionUtils.isEmpty(oidCollections)){
+			Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+			for(Collection<String> oids: oidCollectionsList){
+				List<CodeClassifyTemplateButton> tempDOList =  codeClassifyTemplateButtonMapper.selectBatchIds(oids);
+				if(!CollectionUtils.isEmpty(tempDOList)){
+					codeClassifyTemplateButtonDOList.addAll(tempDOList);
+				}
+			}
+		}
+		return  codeClassifyTemplateButtonDOList;
+	}
+
+
+	/**
+	 * 鏍¢獙鏄惁琚紩鐢�
+	 * @param oid 涓婚敭
+	 * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	private boolean checkIsLinked(String oid) throws VciBaseException{
+		//TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+		return false;
+	}
+
+	/**
+	 * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+	 * @param oid 涓婚敭
+	 * @return  鏁版嵁瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private CodeClassifyTemplateButton selectByOid(String oid) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTemplateButton codeClassifyTemplateButtonDO = codeClassifyTemplateButtonMapper.selectById(oid.trim());
+		if(codeClassifyTemplateButtonDO == null || StringUtils.isBlank(codeClassifyTemplateButtonDO.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return codeClassifyTemplateButtonDO;
 	}
 
 	/**
@@ -57,10 +372,10 @@
 		if(StringUtils.isNotBlank(classifyTemplateOid)){
 			Map<String,Object> conditionMap = new HashMap<>();
 			conditionMap.put("classifyTemplateOid",classifyTemplateOid);
-			List<CodeTempbuttonEntity> codeTempbuttonEntities = baseMapper.selectByMap(conditionMap);
+			List<CodeClassifyTemplateButton> codeTempbuttonEntities = baseMapper.selectByMap(conditionMap);
 			if(!CollectionUtils.isEmpty(codeTempbuttonEntities)){
 				updateCount += baseMapper.deleteBatchIds(codeTempbuttonEntities.stream()
-					.map(CodeTempbuttonEntity::getOid).collect(Collectors.toList()));
+					.map(CodeClassifyTemplateButton::getOid).collect(Collectors.toList()));
 			}
 		}
 		return updateCount;
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java
index 07bd3f5..9cdaaf5 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java
@@ -16,22 +16,48 @@
  */
 package com.vci.ubcs.code.service.impl;
 
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
-import com.vci.ubcs.code.mapper.CodeTempphaseMapper;
 import com.vci.ubcs.code.service.ICodeTempphaseService;
-import com.vci.ubcs.code.vo.CodeTempphaseVO;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dto.CodeTemplatePhaseDTO;
+import com.vci.ubcs.code.entity.*;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
+import com.vci.ubcs.code.mapper.CodeTemplatePhaseMapper;
+import com.vci.ubcs.code.mapper.CommonsMapper;
+import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
+import com.vci.ubcs.code.service.ICodePhaseattrService;
+import com.vci.ubcs.code.service.ICodeTempphaseService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.util.MybatisParameterUtils;
+import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.util.BeanUtil;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.util.WebUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cglib.beans.BeanMap;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
+
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鏈嶅姟瀹炵幇绫�
@@ -40,15 +66,88 @@
  * @since 2023-04-20
  */
 @Service
-public class CodeTempphaseServiceImpl extends ServiceImpl<CodeTempphaseMapper, CodeTempphaseEntity> implements ICodeTempphaseService {
-
+public class CodeTempphaseServiceImpl extends ServiceImpl<CodeTemplatePhaseMapper, CodeTemplatePhase> implements ICodeTempphaseService {
 
 	@Autowired(required = false)
-	private CodePhaseattrMapper codePhaseattrMapper;
+	private CodePhaseAttrMapper codePhaseAttrMapper;
 
+	@Autowired(required = false)
+	private CodeTemplatePhaseMapper codeTemplatePhaseMapper;
+
+	@Autowired(required = false)
+	private CommonsMapper commonsMapper;
+
+	@Autowired(required = false)
+	private ICodePhaseattrService codePhaseattrService;
+
+	/**
+	 * 瀵硅薄鐨勬搷浣�
+	 */
+	@Autowired(required = false)
+	private RevisionModelUtil revisionModelUtil;
+
+	/**
+	 * 妯℃澘灞炴�х殑鏈嶅姟
+	 */
+	@Autowired
+	private ICodeClassifyTemplateAttrService tempAttrService;
+
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑妯℃澘闃舵
+	 * @param codeTemplatePhaseVO 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
 	@Override
-	public IPage<CodeTempphaseVO> selectCodeTempphasePage(IPage<CodeTempphaseVO> page, CodeTempphaseVO CodeTempphase) {
-		return page.setRecords(baseMapper.selectCodeTempphasePage(page, CodeTempphase));
+	public DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(CodeTemplatePhaseVO codeTemplatePhaseVO, Query query) throws VciBaseException {
+		query.setDescs("createTime");
+		query.setSize(-1);
+
+		IPage<CodeTemplatePhase> doList = codeTemplatePhaseMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeTemplatePhaseVO));
+		DataGrid<CodeTemplatePhaseVO> dataGrid=new DataGrid<CodeTemplatePhaseVO>();
+		if (!CollectionUtils.isEmpty(doList.getRecords())) {
+			dataGrid.setData(codeTemplatePhaseDO2VOs(doList.getRecords()));
+			dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeTemplatePhaseMapper.selectCount(Condition.getQueryWrapper(codeTemplatePhaseVO)))));
+		}
+		return dataGrid;
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeTemplatePhaseDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhase> codeTemplatePhaseDOs) throws VciBaseException{
+		List<CodeTemplatePhaseVO> voList = new ArrayList<CodeTemplatePhaseVO>();
+		if(!CollectionUtils.isEmpty(codeTemplatePhaseDOs)){
+			for(CodeTemplatePhase s: codeTemplatePhaseDOs){
+				CodeTemplatePhaseVO vo =  codeTemplatePhaseDO2VO(s);
+				if(vo != null){
+					voList.add(vo);
+				}
+			}
+		}
+		return voList;
+	}
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeTemplatePhaseDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeTemplatePhaseVO codeTemplatePhaseDO2VO(CodeTemplatePhase codeTemplatePhaseDO) throws VciBaseException{
+		CodeTemplatePhaseVO vo = new CodeTemplatePhaseVO();
+		if(codeTemplatePhaseDO != null){
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDO,vo);
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+		}
+		return vo;
 	}
 
 	/**
@@ -61,18 +160,350 @@
 	public int codeTemplateDeleteTrigger(String templateOid) {
 		int updateCount = 0;
 		Map<String,Object> condition = new HashMap<>(1);
-		condition.put("classifyTemplateOid",templateOid);
-		List<CodeTempphaseEntity> codeTempphaseEntities = baseMapper.selectByMap(condition);
+		condition.put("codeclassifytemplateoid",templateOid);
+		List<CodeTemplatePhase> codeTempphaseEntities = baseMapper.selectByMap(condition);
 		if(!CollectionUtils.isEmpty(codeTempphaseEntities)) {
-			updateCount += baseMapper.deleteBatchIds(codeTempphaseEntities.stream().map(CodeTempphaseEntity::getOid).collect(Collectors.toList()));
+			updateCount += baseMapper.deleteBatchIds(codeTempphaseEntities.stream().map(CodeTemplatePhase::getOid).collect(Collectors.toList()));
 //			batchCBO.copyFromOther(codeTemplatePhaseMapper.batchDeleteByOids(templatePhaseDOS.stream().map(CodeTemplatePhaseDO::getOid).collect(Collectors.toList())));
 //			conditionMap.put("codePhaseOid", QueryOptionConstant.IN + "(select oid from " + getPhaseTable() + " where codeClassifyTemplateOid='" + classifyTemplateOid + "')");
-			List<CodePhaseattrEntity> phaseAttrDOS = codePhaseattrMapper.selectByPhasea(templateOid);
+			List<CodePhaseAttr> phaseAttrDOS = codePhaseAttrMapper.selectByPhasea(templateOid);
 			if(!CollectionUtils.isEmpty(phaseAttrDOS)){
-				updateCount += codePhaseattrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseattrEntity::getOid).collect(Collectors.toList()));
+				updateCount += codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseAttr::getOid).collect(Collectors.toList()));
 			}
 		}
 		return updateCount;
 	}
 
+	/**
+	 * 妯℃澘淇敼瑙﹀彂鍔熻兘
+	 * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+	 * @return 鍙楀奖鍝嶇殑鏁版嵁
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public List<CodeClstempattrEntity> codeTemplateAttrModifyTrigger(List<CodeClstempattrEntity> attrDOList){
+		//灞炴�т慨鏀圭殑鏃跺�欙紝闇�瑕佸悓姝ヤ慨鏀瑰搴斿睘鎬х殑鍚嶇О
+//		BatchCBO batchCBO = new BatchCBO();
+		List<CodePhaseAttr> phaseAttrDOS =codePhaseAttrMapper.listLinkAttrDOByTemplateAttrDOS(VciBaseUtil.toInSql(attrDOList.stream()
+			.map(CodeClstempattrEntity::getId).collect(Collectors.toList()).toArray(new String[0])),attrDOList.get(0).getClassifytemplateoid());
+		if(!CollectionUtils.isEmpty(phaseAttrDOS)){
+			//璇存槑鏈夊睘鎬�,鎴戜滑鍘绘浛鎹竴涓�
+			Map<String, CodeClstempattrEntity> attrDOMap = attrDOList.stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
+			phaseAttrDOS.stream().forEach(phaseAttrDO->{
+				if(attrDOMap.containsKey(phaseAttrDO.getId())){
+					CodeClstempattrEntity attrDO = attrDOMap.get(phaseAttrDO.getId());
+					phaseAttrDO.setId(attrDO.getId());
+					phaseAttrDO.setName(attrDO.getName());
+					phaseAttrDO.setAttributegroup(attrDO.getAttributegroup());
+				}
+			});
+//			codePhaseattrMapper.
+			codePhaseattrService.saveBatch(phaseAttrDOS);
+//			BatchCBO updateCBO =
+//			codePhaseAttrMapper.batchUpdate(phaseAttrDOS);
+//			batchCBO.copyFromOther(updateCBO);
+		}
+		return attrDOList;
+	}
+
+	/**
+	 * 澧炲姞妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public CodeTemplatePhaseVO addSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getAttributes(),"鍖呭惈鐨勫睘鎬�");
+		//灏咲TO杞崲涓篋O
+		CodeTemplatePhase codeTemplatePhaseDO = new CodeTemplatePhase();
+		codeTemplatePhaseDO.setOid(VciBaseUtil.getPk());
+		BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+		//WebUtil.setPersistence(false);
+		boolean resBoolean = codeTemplatePhaseMapper.insert(codeTemplatePhaseDO) > 0;
+		List<CodePhaseAttr> attrDOList = new ArrayList<>();
+		codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
+			CodePhaseAttr attrDO = new CodePhaseAttr();
+			BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
+			attrDO.setOid(VciBaseUtil.getPk());
+			attrDO.setCodePhaseOid(codeTemplatePhaseDO.getOid());
+			attrDOList.add(attrDO);
+		});
+		codePhaseattrService.saveBatch(attrDOList);
+		//WebUtil.setPersistence(true);
+		return codeTemplatePhaseDO2VO(codeTemplatePhaseDO);
+	}
+
+	/**
+	 * 淇敼妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public CodeTemplatePhaseVO editSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getOid(),"妯℃澘闃舵涓婚敭",codeTemplatePhaseDTO.getAttributes(),"鍖呭惈鐨勫睘鎬�");
+		//灏咲TO杞崲涓篋O
+		CodeTemplatePhase codeTemplatePhaseDO = selectByOid(codeTemplatePhaseDTO.getOid());
+		revisionModelUtil.copyFromDTOIgnore(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+		//WebUtil.setPersistence(false);
+		codeTemplatePhaseMapper.updateById(codeTemplatePhaseDO);
+		//鎶婁互鍓嶇殑鍒犻櫎
+		List<CodePhaseAttr> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseDO.getOid());
+		if(!CollectionUtils.isEmpty(phaseAttrDOS)){
+			codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseAttr::getOid).collect(Collectors.toList()));
+		}
+		List<CodePhaseAttr> attrDOList = new ArrayList<>();
+		codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
+			CodePhaseAttr attrDO = new CodePhaseAttr();
+			BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
+			attrDO.setOid(VciBaseUtil.getPk());
+			attrDO.setCodePhaseOid(codeTemplatePhaseDO.getOid());
+			attrDOList.add(attrDO);
+		});
+		codePhaseattrService.saveBatch(attrDOList);
+		//WebUtil.setPersistence(true);
+		return codeTemplatePhaseDO2VO(codeTemplatePhaseDO);
+	}
+
+	/**
+	 * 鍒犻櫎妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R deleteCodeTemplatePhase(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"妯℃澘闃舵鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getOid(),"妯℃澘闃舵鐨勪富閿�");
+		CodeTemplatePhase codeTemplatePhaseDO = selectByOid(codeTemplatePhaseDTO.getOid());
+		R baseResult = checkIsCanDeleteForDO(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+		if(!baseResult.isSuccess()) {
+		}else{
+			return baseResult;
+		}
+		//鎵ц鍒犻櫎鎿嶄綔
+		//WebUtil.setPersistence(false);
+		boolean batchCBO = codeTemplatePhaseMapper.deleteById(codeTemplatePhaseDO.getOid())>0;
+		//闇�瑕佸垹闄ゅ睘鎬�
+		List<CodePhaseAttr> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseDO.getOid());
+		boolean deleteCBO = false;
+		if(!CollectionUtils.isEmpty(phaseAttrDOS)) {
+			deleteCBO = codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseAttr::getOid).collect(Collectors.toList()))>0;
+		}
+		//WebUtil.setPersistence(true);
+		return (batchCBO || deleteCBO)?R.success(DELETE_SUCCESS):R.fail(DELETE_FAIL);
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇妯℃澘闃舵
+	 * @param oid 涓婚敭
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeTemplatePhaseVO getObjectByOid(String oid) throws VciBaseException{
+		return codeTemplatePhaseDO2VO(selectByOid(oid));
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	@Override
+	public Collection<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(Collection<String> oidCollections) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+		List<CodeTemplatePhase> codeTemplatePhaseDOList = listCodeTemplatePhaseDOByOidCollections(oidCollections);
+		return codeTemplatePhaseDO2VOs(codeTemplatePhaseDOList);
+	}
+
+	/**
+	 * 鍙傜収妯℃澘闃舵鍒楄〃
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, String>();
+		}
+		CodeTemplatePhaseVO codeTemplatePhaseVO = new CodeTemplatePhaseVO();
+		BeanMap beanMap = BeanMap.create(codeTemplatePhaseVO);
+		beanMap.putAll(conditionMap);
+		Query query = new Query();
+		query.setSize(pageHelper.getLimit());
+		query.setCurrent(pageHelper.getPage());
+
+		return gridCodeTemplatePhase(codeTemplatePhaseVO,query);
+	}
+
+	/**
+	 * 闃舵涓嶅寘鍚殑灞炴��
+	 *
+	 * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
+	 * @param pageHelper   鍒嗛〉瀵硅薄
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, String>();
+		}
+		if(!conditionMap.containsKey("classifyTemplateOid")){
+			return new DataGrid<>("娌℃湁妯℃澘鐨勪富閿�");
+		}
+		//闇�瑕佸垽鏂樁娈电殑涓婚敭鏄惁瀛樺湪
+		String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
+		LambdaQueryWrapper<CodeClassifyTemplateAttr> queryWrapper = null;
+		if(StringUtils.isNotBlank(codePhaseOid)){
+			//鎺掗櫎闃舵涓婁娇鐢ㄧ殑
+			conditionMap.remove("codePhaseOid");
+			List<String> ids = commonsMapper.selectById("(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" + codePhaseOid + "')");
+			if(ids.size()<=1000){
+				queryWrapper = Wrappers.<CodeClassifyTemplateAttr>query().lambda().notIn(CodeClassifyTemplateAttr::getId, ids);
+			}else {
+				queryWrapper = MybatisParameterUtils.cutNotInParameter(queryWrapper,CodeClassifyTemplateAttr::getId,ids);
+			}
+			//conditionMap.put("id", QueryOptionConstant.NOTIN + ids);
+		}
+		return tempAttrService.gridCodeClassifyTemplateAttr(queryWrapper,pageHelper);
+	}
+
+	/**
+	 * 闃舵鍖呭惈鐨勫睘鎬�
+	 *
+	 * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
+	 * @param pageHelper   鍒嗛〉瀵硅薄
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, String>();
+		}
+		String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
+		if(StringUtils.isBlank(codePhaseOid)){
+			return new DataGrid<>();
+		}
+		conditionMap.remove("codePhaseOid");
+		CodeTemplatePhase phaseDO = selectByOid(codePhaseOid);
+		List<String> ids = commonsMapper.selectById("(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" +codePhaseOid + "')");
+		LambdaQueryWrapper<CodeClassifyTemplateAttr> queryWrapper = null;
+		//			Wrappers.<CodeClassifyTemplateAttrVO>query()
+		//			.in("id", ids)
+		if(ids.size()<=1000){
+			queryWrapper = Wrappers.<CodeClassifyTemplateAttr>query().lambda().in(CodeClassifyTemplateAttr::getId, ids);
+		}else {
+			queryWrapper = MybatisParameterUtils.cutInParameter(queryWrapper,CodeClassifyTemplateAttr::getId,ids);
+		}
+		queryWrapper.eq(CodeClassifyTemplateAttr::getClassifyTemplateOid,phaseDO.getCodeClassifyTemplateOid());
+		return tempAttrService.gridCodeClassifyTemplateAttr(queryWrapper,pageHelper);
+	}
+
+	/**
+	 * 闃舵灞炴�х殑琛ㄥ悕
+	 * @return 琛ㄥ悕
+	 */
+	private String getPhaseAttrTable(){
+		return VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_PHASE_ATTR_TABLENAME);
+	}
+
+	/**
+	 * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+	 * @param oidCollections 涓婚敭鐨勯泦鍚�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	private List<CodeTemplatePhase> listCodeTemplatePhaseDOByOidCollections(Collection<String> oidCollections){
+		List<CodeTemplatePhase> codeTemplatePhaseDOList = new ArrayList<CodeTemplatePhase>();
+		if(!CollectionUtils.isEmpty(oidCollections)){
+			Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+			for(Collection<String> oids: oidCollectionsList){
+				List<CodeTemplatePhase> tempDOList =  codeTemplatePhaseMapper.selectBatchIds(oids);
+				if(!CollectionUtils.isEmpty(tempDOList)){
+					codeTemplatePhaseDOList.addAll(tempDOList);
+				}
+			}
+		}
+		return  codeTemplatePhaseDOList;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+	 * @param codeTemplatePhaseDTO 鏁版嵁浼犺緭瀵硅薄
+	 * @param codeTemplatePhaseDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+	 */
+	private R checkIsCanDeleteForDO(CodeTemplatePhaseDTO codeTemplatePhaseDTO, CodeTemplatePhase codeTemplatePhaseDO) {
+		CodeTemplatePhase tsDO = new CodeTemplatePhase();
+		BeanUtil.convert(codeTemplatePhaseDTO,tsDO);
+		if (checkTs(tsDO)) {
+			return R.fail(TS_NOT_PROCESS);
+		}
+		if(!checkIsLinked(codeTemplatePhaseDO.getOid())) {
+			return R.success("succcess");
+		}else{
+			return R.fail(DATA_LINKED_NOT_DELETE);
+		}
+	}
+
+	/**
+	 * 妫�鏌s
+	 * @param tempDO
+	 * @return
+	 */
+	private boolean checkTs(CodeTemplatePhase tempDO){
+		LambdaQueryWrapper<CodeTemplatePhase> wrapper = Wrappers.<CodeTemplatePhase>query()
+			.lambda().eq(CodeTemplatePhase::getOid,tempDO.getOid()).select(CodeTemplatePhase::getTs);
+		long dbTs = codePhaseAttrMapper.selectById(wrapper).getTs().getTime();
+		long currentTs = tempDO.getTs().getTime();
+		if(dbTs == currentTs){
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁琚紩鐢�
+	 * @param oid 涓婚敭
+	 * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	private boolean checkIsLinked(String oid) throws VciBaseException{
+		//TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+		return false;
+	}
+
+	/**
+	 * 浣跨敤闃舵涓婚敭鑾峰彇鍖呭惈鐨勫睘鎬�
+	 * @param codePhaseOid 闃舵鐨勪富閿�
+	 * @return 鍖呭惈灞炴�х殑鏁版嵁瀵硅薄
+	 */
+	private List<CodePhaseAttr> listPhaseAttrDOByPhaseOid(String codePhaseOid){
+		if(StringUtils.isBlank(codePhaseOid)||StringUtils.isEmpty(codePhaseOid)){
+			return null;
+		}
+		List<CodePhaseAttr> phaseAttrDOS = codePhaseAttrMapper.selectByPhasea(codePhaseOid);
+		return phaseAttrDOS;
+	}
+
+	/**
+	 * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+	 * @param oid 涓婚敭
+	 * @return  鏁版嵁瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private CodeTemplatePhase selectByOid(String oid) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeTemplatePhase codeTemplatePhaseDO = codeTemplatePhaseMapper.selectById(oid.trim());
+		if(codeTemplatePhaseDO == null || StringUtils.isBlank(codeTemplatePhaseDO.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return codeTemplatePhaseDO;
+	}
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeBasicSecWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeBasicSecWrapper.java
index 3e2edaa..9864da5 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeBasicSecWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeBasicSecWrapper.java
@@ -19,7 +19,6 @@
 
 import com.vci.ubcs.code.entity.CodeBasicSec;
 import com.vci.ubcs.code.enumpack.*;
-import com.vci.ubcs.code.lifecycle.CodeRuleLC;
 import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
@@ -34,7 +33,7 @@
  * @author ludc
  * @since 2023-04-03
  */
-public class CodeBasicSecWrapper extends BaseEntityWrapper<CodeBasicSec, CodeBasicSecVO>  {
+public class CodeBasicSecWrapper extends BaseEntityWrapper<CodeBasicSec, CodeBasicSecVO> {
 
 	public static CodeBasicSecWrapper build() {
 		return new CodeBasicSecWrapper();
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java
index 08d3bb8..a516a4d 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java
@@ -16,11 +16,9 @@
  */
 package com.vci.ubcs.code.wrapper;
 
-import com.vci.ubcs.code.entity.CodeButtonEntity;
-import com.vci.ubcs.code.vo.CodeButtonVO;
-import com.vci.ubcs.system.cache.DictBizCache;
 import com.vci.ubcs.system.cache.DictCache;
-import com.vci.ubcs.system.enums.DictEnum;
+import com.vci.ubcs.code.entity.CodeButton;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.tool.utils.BeanUtil;
@@ -36,17 +34,17 @@
  * @author yuxc
  * @since 2023-03-29
  */
-public class CodeButtonWrapper extends BaseEntityWrapper<CodeButtonEntity, CodeButtonVO> {
+public class CodeButtonWrapper extends BaseEntityWrapper<CodeButton, CodeButtonVO> {
 
 	public static CodeButtonWrapper build() {
 		return new CodeButtonWrapper();
  	}
 
 	@Override
-	public CodeButtonVO entityVO(CodeButtonEntity codebutton) {
+	public CodeButtonVO entityVO(CodeButton codebutton) {
 		CodeButtonVO codebuttonVO = Objects.requireNonNull(BeanUtil.copy(codebutton, CodeButtonVO.class));
-		codebuttonVO.setUsedpositiontypeName(DictBizCache.getValue("codeButtonPosition", codebutton.getUsedpositiontype()));
-		codebuttonVO.setLcstatusName(DictBizCache.getValue("codeLcstatus", codebutton.getLcstatus()));
+		codebuttonVO.setUsedpositiontypeText(DictCache.getValue("codeButtonPosition", codebutton.getUsedpositiontype()));
+		codebuttonVO.setLcStatusText(DictCache.getValue("codeLcstatus", codebutton.getLcstatus()));
 		return codebuttonVO;
 	}
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeFixedValueWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeFixedValueWrapper.java
new file mode 100644
index 0000000..84d7706
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeFixedValueWrapper.java
@@ -0,0 +1,35 @@
+package com.vci.ubcs.code.wrapper;
+
+import com.vci.ubcs.code.entity.CodeBasicSec;
+import com.vci.ubcs.code.entity.CodeFixedValue;
+import com.vci.ubcs.code.enumpack.*;
+import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+public class CodeFixedValueWrapper extends BaseEntityWrapper<CodeFixedValue, CodeFixedValueVO> {
+
+	public static CodeFixedValueWrapper build() {
+		return new CodeFixedValueWrapper();
+	}
+
+	@Override
+	public CodeFixedValueVO entityVO(CodeFixedValue codeFixedValue) {
+		CodeFixedValueVO codeFixedValueVO = Objects.requireNonNull(BeanUtil.copy(codeFixedValue, CodeFixedValueVO.class));
+
+		//codeFixedValueVO.setLcStatusText(CodeRuleLC.getTextByValue(codeBasicSec.getLcStatus()));
+
+		return codeFixedValueVO;
+	}
+
+	@Override
+	public List<CodeFixedValueVO> listVO(List<CodeFixedValue> list) {
+		return (List)list.stream().map(this::entityVO).collect(Collectors.toList());
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java
index bb71c95..ec3fb90 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java
@@ -16,9 +16,9 @@
  */
 package com.vci.ubcs.code.wrapper;
 
+import com.vci.ubcs.code.entity.CodePhaseAttr;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
 import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import java.util.Objects;
 
@@ -28,14 +28,14 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public class CodePhaseattrWrapper extends BaseEntityWrapper<CodePhaseattrEntity, CodePhaseattrVO>  {
+public class CodePhaseattrWrapper extends BaseEntityWrapper<CodePhaseAttr, CodePhaseattrVO>  {
 
 	public static CodePhaseattrWrapper build() {
 		return new CodePhaseattrWrapper();
  	}
 
 	@Override
-	public CodePhaseattrVO entityVO(CodePhaseattrEntity CodePhaseattr) {
+	public CodePhaseattrVO entityVO(CodePhaseAttr CodePhaseattr) {
 		CodePhaseattrVO CodePhaseattrVO = Objects.requireNonNull(BeanUtil.copy(CodePhaseattr, CodePhaseattrVO.class));
 
 		//User createUser = UserCache.getUser(CodePhaseattr.getCreateUser());
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempbuttonWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempbuttonWrapper.java
index 6b524eb..2543ef7 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempbuttonWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempbuttonWrapper.java
@@ -16,10 +16,10 @@
  */
 package com.vci.ubcs.code.wrapper;
 
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import com.vci.ubcs.code.vo.CodeTempbuttonVO;
 import java.util.Objects;
 
 /**
@@ -28,22 +28,22 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public class CodeTempbuttonWrapper extends BaseEntityWrapper<CodeTempbuttonEntity, CodeTempbuttonVO>  {
+public class CodeTempbuttonWrapper extends BaseEntityWrapper<CodeClassifyTemplateButton, CodeClassifyTemplateButtonVO>  {
 
 	public static CodeTempbuttonWrapper build() {
 		return new CodeTempbuttonWrapper();
  	}
 
 	@Override
-	public CodeTempbuttonVO entityVO(CodeTempbuttonEntity CodeTempbutton) {
-		CodeTempbuttonVO CodeTempbuttonVO = Objects.requireNonNull(BeanUtil.copy(CodeTempbutton, CodeTempbuttonVO.class));
+	public CodeClassifyTemplateButtonVO entityVO(CodeClassifyTemplateButton CodeTempbutton) {
+		CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = Objects.requireNonNull(BeanUtil.copy(CodeTempbutton, CodeClassifyTemplateButtonVO.class));
 
 		//User createUser = UserCache.getUser(CodeTempbutton.getCreateUser());
 		//User updateUser = UserCache.getUser(CodeTempbutton.getUpdateUser());
 		//CodeTempbuttonVO.setCreateUserName(createUser.getName());
 		//CodeTempbuttonVO.setUpdateUserName(updateUser.getName());
 
-		return CodeTempbuttonVO;
+		return codeClassifyTemplateButtonVO;
 	}
 
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempphaseWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempphaseWrapper.java
index 665c33d..cad28fa 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempphaseWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempphaseWrapper.java
@@ -16,10 +16,11 @@
  */
 package com.vci.ubcs.code.wrapper;
 
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import com.vci.ubcs.code.vo.CodeTempphaseVO;
+
 import java.util.Objects;
 
 /**
@@ -28,22 +29,22 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public class CodeTempphaseWrapper extends BaseEntityWrapper<CodeTempphaseEntity, CodeTempphaseVO>  {
+public class CodeTempphaseWrapper extends BaseEntityWrapper<CodeTemplatePhase, CodeTemplatePhaseVO>  {
 
 	public static CodeTempphaseWrapper build() {
 		return new CodeTempphaseWrapper();
  	}
 
 	@Override
-	public CodeTempphaseVO entityVO(CodeTempphaseEntity CodeTempphase) {
-		CodeTempphaseVO CodeTempphaseVO = Objects.requireNonNull(BeanUtil.copy(CodeTempphase, CodeTempphaseVO.class));
+	public CodeTemplatePhaseVO entityVO(CodeTemplatePhase CodeTempphase) {
+		CodeTemplatePhaseVO CodeTemplatePhaseVO = Objects.requireNonNull(BeanUtil.copy(CodeTempphase, CodeTemplatePhaseVO.class));
 
 		//User createUser = UserCache.getUser(CodeTempphase.getCreateUser());
 		//User updateUser = UserCache.getUser(CodeTempphase.getUpdateUser());
-		//CodeTempphaseVO.setCreateUserName(createUser.getName());
-		//CodeTempphaseVO.setUpdateUserName(updateUser.getName());
+		//CodeTemplatePhaseVO.setCreateUserName(createUser.getName());
+		//CodeTemplatePhaseVO.setUpdateUserName(updateUser.getName());
 
-		return CodeTempphaseVO;
+		return CodeTemplatePhaseVO;
 	}
 
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 0000000..29c4455
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+com.vci.ubcs.starter.revision.service.RevisionModelUtil
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml
index 01bf33c..6fd8fa8 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml
@@ -36,7 +36,7 @@
         <result property="getValueClass" column="GETVALUECLASS" jdbcType="VARCHAR"/>
         <result property="codeDateFormatStr" column="CODEDATEFORMATSTR" jdbcType="VARCHAR"/>
         <result property="codeSecLengthType" column="CODESECLENGTHTYPE" jdbcType="VARCHAR"/>
-        <result property="codeFillLength" column="CODESECLENGTH" jdbcType="VARCHAR"/>
+        <result property="codeSecLength" column="CODESECLENGTH" jdbcType="VARCHAR"/>
         <result property="codeLevelType" column="CODELEVELTYPE" jdbcType="VARCHAR"/>
         <result property="codeLevelValue" column="CODELEVELVALUE" jdbcType="INTEGER"/>
         <result property="valueCutLength" column="VALUECUTLENGTH" jdbcType="INTEGER"/>
@@ -66,6 +66,7 @@
         <result property="referAttributeId" column="REFERATTRIBUTEID" jdbcType="VARCHAR"/>
         <result property="referBtmName" column="REFERBTMNAME" jdbcType="VARCHAR"/>
         <result property="referBtmId" column="REFERBTMID" jdbcType="VARCHAR"/>
+        <result property="referCodeClassifyOidName" column="c__name" jdbcType="VARCHAR"/>
     </resultMap>
 
     <select id="selectCodeBasicSecPage" resultMap="CodeBasicsecMap">
@@ -143,188 +144,24 @@
             <if test="codeBasicSec.oid != null and codeBasicSec.oid != ''">
                 and PL_CODE_BASICSEC.OID = #{codeBasicSec.oid}
             </if>
-            <if test="codeBasicSec.revisionOid != null and codeBasicSec.revisionOid != ''">
-                and PL_CODE_BASICSEC.REVISIONOID = #{codeBasicSec.revisionOid}
-            </if>
-            <if test="codeBasicSec.nameOid != null and codeBasicSec.nameOid != ''">
-                and PL_CODE_BASICSEC.NAMEOID = #{codeBasicSec.nameOid}
-            </if>
-            <if test="codeBasicSec.btmname != null and codeBasicSec.btmname != ''">
-                and PL_CODE_BASICSEC.BTMNAME = #{codeBasicSec.btmname}
-            </if>
-            <if test="codeBasicSec.lastR != null and codeBasicSec.lastR != ''">
-                and PL_CODE_BASICSEC.LASTR = #{codeBasicSec.lastR}
-            </if>
-            <if test="codeBasicSec.firstR != null and codeBasicSec.firstR != ''">
-                and PL_CODE_BASICSEC.FIRSTR = #{codeBasicSec.firstR}
-            </if>
-            <if test="codeBasicSec.lastV != null and codeBasicSec.lastv != ''">
-                and PL_CODE_BASICSEC.LASTV = #{codeBasicSec.lastV}
-            </if>
-            <if test="codeBasicSec.firstV != null and codeBasicSec.firstV != ''">
-                and PL_CODE_BASICSEC.FIRSTV = #{codeBasicSec.firstV}
-            </if>
-            <if test="codeBasicSec.creator != null and codeBasicSec.creator != ''">
-                and PL_CODE_BASICSEC.CREATOR = #{codeBasicSec.creator}
-            </if>
-            <if test="codeBasicSec.createTime != null and codeBasicSec.createTime != ''">
-                and PL_CODE_BASICSEC.CREATETIME = #{codeBasicSec.createTime}
-            </if>
-            <if test="codeBasicSec.lastModifier != null and codeBasicSec.lastModifier != ''">
-                and PL_CODE_BASICSEC.LASTMODIFIER = #{codeBasicSec.lastModifier}
-            </if>
-            <if test="codeBasicSec.lastModifyTime != null and codeBasicSec.lastModifyTime != ''">
-                and PL_CODE_BASICSEC.LASTMODIFYTIME = #{codeBasicSec.lastModifyTime}
-            </if>
-            <if test="codeBasicSec.revisionRule != null and codeBasicSec.revisionRule != ''">
-                and PL_CODE_BASICSEC.REVISIONRULE = #{codeBasicSec.revisionRule}
-            </if>
-            <if test="codeBasicSec.versionRule != null and codeBasicSec.versionRule != ''">
-                and PL_CODE_BASICSEC.VERSIONRULE = #{codeBasicSec.versionRule}
-            </if>
-            <if test="codeBasicSec.revisionSeq != null">
-                and PL_CODE_BASICSEC.REVISIONSEQ = #{codeBasicSec.revisionSeq}
-            </if>
-            <if test="codeBasicSec.revisionValue != null and codeBasicSec.revisionValue != ''">
-                and PL_CODE_BASICSEC.REVISIONVALUE = #{codeBasicSec.revisionValue}
-            </if>
-            <if test="codeBasicSec.versionSeq != null">
-                and PL_CODE_BASICSEC.VERSIONSEQ = #{codeBasicSec.versionSeq}
-            </if>
-            <if test="codeBasicSec.versionValue != null and codeBasicSec.versionValue != ''">
-                and PL_CODE_BASICSEC.VERSIONVALUE = #{codeBasicSec.versionValue}
-            </if>
-            <if test="codeBasicSec.lctid != null and codeBasicSec.lctid != ''">
-                and PL_CODE_BASICSEC.LCTID = #{codeBasicSec.lctid}
-            </if>
-            <if test="codeBasicSec.lcStatus != null and codeBasicSec.lcStatus != ''">
-                and PL_CODE_BASICSEC.LCSTATUS = #{codeBasicSec.lcStatus}
-            </if>
             <if test="codeBasicSec.ts != null and codeBasicSec.ts != ''">
                 and PL_CODE_BASICSEC.TS = #{codeBasicSec.ts}
             </if>
             <if test="codeBasicSec.id != null and codeBasicSec.id != ''">
-                and PL_CODE_BASICSEC.ID = #{codeBasicSec.id}
+
+                and PL_CODE_BASICSEC.ID like CONCAT(CONCAT('%', #{codeBasicSec.id}), '%')
             </if>
             <if test="codeBasicSec.name != null and codeBasicSec.name != ''">
-                and PL_CODE_BASICSEC.NAME = #{codeBasicSec.name}
+                and PL_CODE_BASICSEC.NAME like CONCAT(CONCAT('%', #{codeBasicSec.name}), '%')
             </if>
             <if test="codeBasicSec.description != null and codeBasicSec.description != ''">
-                and PL_CODE_BASICSEC.DESCRIPTION = #{codeBasicSec.description}
-            </if>
-            <if test="codeBasicSec.owner != null and codeBasicSec.owner != ''">
-                and PL_CODE_BASICSEC.OWNER = #{codeBasicSec.owner}
-            </if>
-            <if test="codeBasicSec.copyFromVersion != null and codeBasicSec.copyFromVersion != ''">
-                and PL_CODE_BASICSEC.COPYFROMVERSION = #{codeBasicSec.copyFromVersion}
+                and PL_CODE_BASICSEC.DESCRIPTION like CONCAT(CONCAT('%', #{codeBasicSec.description}), '%')
             </if>
             <if test="codeBasicSec.secType != null and codeBasicSec.sectype != ''">
-                and PL_CODE_BASICSEC.SECTYPE = #{codeBasicSec.sectype}
+                and PL_CODE_BASICSEC.SECTYPE = #{codeBasicSec.secType}
             </if>
             <if test="codeBasicSec.pkCodeRule != null and codeBasicSec.pkCodeRule != ''">
                 and PL_CODE_BASICSEC.PKCODERULE = #{codeBasicSec.pkCodeRule}
-            </if>
-            <if test="codeBasicSec.orderNum != null">
-                and PL_CODE_BASICSEC.ORDERNUM = #{codeBasicSec.orderNum}
-            </if>
-            <if test="codeBasicSec.getValueClass != null and codeBasicSec.getValueClass != ''">
-                and PL_CODE_BASICSEC.GETVALUECLASS = #{codeBasicSec.getValueClass}
-            </if>
-            <if test="codeBasicSec.codeDateFormatStr != null and codeBasicSec.codeDateFormatStr != ''">
-                and PL_CODE_BASICSEC.CODEDATEFORMATSTR = #{codeBasicSec.codeDateFormatStr}
-            </if>
-            <if test="codeBasicSec.codeSecLengthType != null and codeBasicSec.codeSecLengthType != ''">
-                and PL_CODE_BASICSEC.CODESECLENGTHTYPE = #{codeBasicSec.codeSecLengthType}
-            </if>
-            <if test="codeBasicSec.codeSecLength != null and codeBasicSec.codeSecLength != ''">
-                and PL_CODE_BASICSEC.CODESECLENGTH = #{codeBasicSec.codeSecLength}
-            </if>
-            <if test="codeBasicSec.codeLevelType != null and codeBasicSec.codeLevelType != ''">
-                and PL_CODE_BASICSEC.CODELEVELTYPE = #{codeBasicSec.codeLevelType}
-            </if>
-            <if test="codeBasicSec.codeLevelValue != null">
-                and PL_CODE_BASICSEC.CODELEVELVALUE = #{codeBasicSec.codeLevelValue}
-            </if>
-            <if test="codeBasicSec.valueCutLength != null">
-                and PL_CODE_BASICSEC.VALUECUTLENGTH = #{codeBasicSec.valueCutLength}
-            </if>
-            <if test="codeBasicSec.valueCutType != null and codeBasicSec.valueCutType != ''">
-                and PL_CODE_BASICSEC.VALUECUTTYPE = #{codeBasicSec.valueCutType}
-            </if>
-            <if test="codeBasicSec.codeGetValueType != null and codeBasicSec.codeGetValueType != ''">
-                and PL_CODE_BASICSEC.CODEGETVALUETYPE = #{codeBasicSec.codeGetValueType}
-            </if>
-            <if test="codeBasicSec.referCodeClassifyOid != null and codeBasicSec.referCodeClassifyOid != ''">
-                and PL_CODE_BASICSEC.REFERCODECLASSIFYOID = #{codeBasicSec.referCodeClassifyOid}
-            </if>
-            <if test="codeBasicSec.referConfig != null and codeBasicSec.referConfig != ''">
-                and PL_CODE_BASICSEC.REFERCONFIG = #{codeBasicSec.referConfig}
-            </if>
-            <if test="codeBasicSec.referValueInfo != null and codeBasicSec.referValueInfo != ''">
-                and PL_CODE_BASICSEC.REFERVALUEINFO = #{codeBasicSec.referValueInfo}
-            </if>
-            <if test="codeBasicSec.filterSql != null and codeBasicSec.filterSql != ''">
-                and PL_CODE_BASICSEC.FILTERSQL = #{codeBasicSec.filterSql}
-            </if>
-            <if test="codeBasicSec.serialStart != null and scodeBasicSec.serialStart != ''">
-                and PL_CODE_BASICSEC.SERIALSTART = #{codeBasicSec.serialStart}
-            </if>
-            <if test="codeBasicSec.serialStep != null">
-                and PL_CODE_BASICSEC.SERIALSTEP = #{codeBasicSec.serialStep}
-            </if>
-            <if test="codeBasicSec.codeFillType != null and codeBasicSec.codeFillType != ''">
-                and PL_CODE_BASICSEC.CODEFILLTYPE = #{codeBasicSec.codeFillType}
-            </if>
-            <if test="codeBasicSec.codeFillTypeText != null and codeBasicSec.codeFillTypeText != ''">
-                and PL_CODE_BASICSEC.CODEFILLTYPETEXT = #{codeBasicSec.codeFillTypeText}
-            </if>
-            <if test="codeBasicSec.codeFillSeparator != null and codeBasicSec.codeFillSeparator != ''">
-                and PL_CODE_BASICSEC.CODEFILLSEPARATOR = #{codeBasicSec.codeFillSeparator}
-            </if>
-            <if test="codeBasicSec.codeFillLength != null and codeBasicSec.codeFillLength != ''">
-                and PL_CODE_BASICSEC.CODEFILLLENGTH = #{codeBasicSec.codeFillLength}
-            </if>
-            <if test="codeBasicSec.codeFillLimit != null">
-                and PL_CODE_BASICSEC.CODEFILLLIMIT = #{codeBasicSec.codeFillLimit}
-            </if>
-            <if test="codeBasicSec.codeFillFlag != null and codeBasicSec.codeFillFlag != ''">
-                and PL_CODE_BASICSEC.CODEFILLFLAG = #{codeBasicSec.codeFillFlag}
-            </if>
-            <if test="codeBasicSec.customCodeSerialClass != null and codeBasicSec.customCodeSerialClass != ''">
-                and PL_CODE_BASICSEC.CUSTOMCODESERIALCLASS = #{codeBasicSec.customCodeSerialClass}
-            </if>
-            <if test="codeBasicSec.matchClassifyValueFlag != null and codeBasicSec.matchClassifyValueFlag != ''">
-                and PL_CODE_BASICSEC.MATCHCLASSIFYVALUEFLAG = #{codeBasicSec.matchClassifyValueFlag}
-            </if>
-            <if test="codeBasicSec.parentClassifySecOid != null and codeBasicSec.parentClassifySecOid != ''">
-                and PL_CODE_BASICSEC.PARENTCLASSIFYSECOID = #{codeBasicSec.parentClassifySecOid}
-            </if>
-            <if test="codeBasicSec.nullableFlag != null and codeBasicSec.nullableFlag != ''">
-                and PL_CODE_BASICSEC.NULLABLEFLAG = #{codeBasicSec.nullableFlag}
-            </if>
-            <if test="codeBasicSec.componentCodeFlag != null and codeBasicSec.componentCodeFlag != ''">
-                and PL_CODE_BASICSEC.COMPONENTCODEFLAG = #{codeBasicSec.componentCodeFlag}
-            </if>
-            <if test="codeBasicSec.serialDependFlag != null and codeBasicSec.serialDependFlag != ''">
-                and PL_CODE_BASICSEC.SERIALDEPENDFLAG = #{codeBasicSec.serialDependFlag}
-            </if>
-            <if test="codeBasicSec.displayFlag != null and codeBasicSec.displayFlag != ''">
-                and PL_CODE_BASICSEC.DISPLAYFLAG = #{codeBasicSec.displayFlag}
-            </if>
-            <if test="codeBasicSec.serialDependOrder != null">
-                and PL_CODE_BASICSEC.SERIALDEPENDORDER = #{codeBasicSec.serialDependOrder}
-            </if>
-            <if test="codeBasicSec.referAttributeName != null and codeBasicSec.referAttributeName != ''">
-                and PL_CODE_BASICSEC.REFERATTRIBUTENAME = #{codeBasicSec.referAttributeName}
-            </if>
-            <if test="codeBasicSec.referAttributeId != null and codeBasicSec.referAttributeId != ''">
-                and PL_CODE_BASICSEC.REFERATTRIBUTEID = #{codeBasicSec.referAttributeId}
-            </if>
-            <if test="codeBasicSec.referBtmName != null and codeBasicSec.referBtmName != ''">
-                and PL_CODE_BASICSEC.REFERBTMNAME = #{codeBasicSec.referBtmName}
-            </if>
-            <if test="codeBasicSec.referBtmId != null and codeBasicSec.referBtmId != ''">
-                and PL_CODE_BASICSEC.REFERBTMID = #{codeBasicSec.referBtmId}
             </if>
         </where>
 
@@ -360,18 +197,15 @@
         </foreach>
     </insert>
 
-
     <select id="countByCondition" resultType="java.lang.Long">
 
 
     </select>
 
-
     <select id="getOidByCodeclassifysecOid" resultType="java.lang.String">
         SELECT OID
-        FROM PLATFORMBTM_CODEBASICSEC START WITH OID = #{codeClassifySecOid}
+        FROM PL_CODE_BASICSEC START WITH OID = #{codeClassifySecOid}
         CONNECT BY PRIOR PARENTCLASSIFYSECOID = OID
     </select>
-
 
 </mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeButtonMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeButtonMapper.xml
index 3a5ebf2..94cafa2 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeButtonMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeButtonMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.vci.ubcs.code.mapper.CodeButtonMapper">
 
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="codebuttonResultMap" type="com.vci.ubcs.code.entity.CodeButtonEntity">
+    <resultMap id="codebuttonResultMap" type="com.vci.ubcs.code.entity.CodeButton">
         <result column="OID" property="oid"/>
         <result column="REVISIONOID" property="revisionoid"/>
         <result column="NAMEOID" property="nameoid"/>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml
index b77a539..f1fa535 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml
@@ -153,4 +153,12 @@
         where a.paths = #{fieldPath}
     </select>
 
+    <select id="selectAllLevelParents" resultType="java.util.HashMap">
+        select oid, id, name, btmtypeid, btmtypename
+            from PL_CODE_CLASSIFY
+            where btmtypeid is not null
+                start with oid = #{oid}
+            connect by prior PARENTCODECLASSIFYOID = oid
+    </select>
+
 </mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyProcessTempMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyProcessTempMapper.xml
new file mode 100644
index 0000000..4f2bef5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyProcessTempMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.code.mapper.CodeClassifyProcessTempMapper">
+
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml
new file mode 100644
index 0000000..2b4c352
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.code.mapper.CodeClassifyTemplateAttrMapper">
+
+
+
+
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateButtonMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateButtonMapper.xml
new file mode 100644
index 0000000..ab7df9a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateButtonMapper.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.code.mapper.CodeClassifyTemplateButtonMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="CodeTempbuttonResultMap" type="com.vci.ubcs.code.entity.CodeClassifyTemplateButton">
+        <result column="OID" property="oid"/>
+        <result column="REVISIONOID" property="revisionOid"/>
+        <result column="NAMEOID" property="nameOid"/>
+        <result column="BTMNAME" property="btmname"/>
+        <result column="LASTR" property="lastR"/>
+        <result column="FIRSTR" property="firstR"/>
+        <result column="LASTV" property="lastV"/>
+        <result column="FIRSTV" property="firstV"/>
+        <result column="CREATOR" property="creator"/>
+        <result column="CREATETIME" property="createTime"/>
+        <result column="LASTMODIFIER" property="lastModifier"/>
+        <result column="LASTMODIFYTIME" property="lastModifyTime"/>
+        <result column="REVISIONRULE" property="revisionRule"/>
+        <result column="VERSIONRULE" property="versionRule"/>
+        <result column="REVISIONSEQ" property="revisionSeq"/>
+        <result column="REVISIONVALUE" property="revisionValue"/>
+        <result column="VERSIONSEQ" property="versionSeq"/>
+        <result column="VERSIONVALUE" property="versionValue"/>
+        <result column="LCTID" property="lctid"/>
+        <result column="LCSTATUS" property="lcStatus"/>
+        <result column="TS" property="ts"/>
+        <result column="ID" property="id"/>
+        <result column="NAME" property="name"/>
+        <result column="DESCRIPTION" property="description"/>
+        <result column="OWNER" property="owner"/>
+        <result column="COPYFROMVERSION" property="copyFromVersion"/>
+        <result column="CLASSIFYTEMPLATEOID" property="classifytemplateoid"/>
+        <result column="CLASSIFYBUTTONOID" property="classifybuttonoid"/>
+        <result column="BUTTONUSE" property="buttonuse"/>
+        <result column="ORDERNUM" property="ordernum"/>
+    </resultMap>
+
+
+    <select id="selectCodeTempbuttonPage" resultMap="CodeTempbuttonResultMap">
+        select * from PL_CODE_TEMPBUTTON where is_deleted = 0
+    </select>
+
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClsflowtempMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClsflowtempMapper.xml
index ec46665..ca09a93 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClsflowtempMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClsflowtempMapper.xml
@@ -8,7 +8,7 @@
         <result column="REVISIONOID" property="revisionOid"/>
         <result column="NAMEOID" property="nameOid"/>
         <result column="BTMNAME" property="btmname"/>
-        <result column="ISLASTR" property="islastr"/>
+        <result column="LASTR" property="lastR"/>
         <result column="FIRSTR" property="firstR"/>
         <result column="LASTV" property="lastV"/>
         <result column="FIRSTV" property="firstV"/>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstempattrMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstempattrMapper.xml
index 38e31b7..39256e3 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstempattrMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstempattrMapper.xml
@@ -85,79 +85,17 @@
 
 
     <select id="selectCodeClstempattrPage" resultMap="CodeClstempattrResultMap">
-        select * from PL_CODE_CLSTEMPATTR where is_deleted = 0
+        select * from PL_CODE_CLSTEMPATTR where 1=1
     </select>
 
     <select id="selectByClassifytemplateoid" resultMap="CodeClstempattrResultMap">
         select * from PL_CODE_CLSTEMPATTR where classifytemplateoid in (${classifytemplateoid})
     </select>
 
-    <select id="selectRefByOid" resultType="com.vci.ubcs.code.entity.CodeClstempattrEntity">
-        select codeclstempattr0.EXPLAIN                as explain,
-               codeclstempattr0.SAMEREPEATATTRFLAG     as samerepeatattrflag,
-               codeclstempattr0.LASTMODIFIER           as lastmodifier,
-               codeclstempattr0.ATTRTABLEWIDTH         as attrtablewidth,
-               codeclstempattr0.CONTROLLENGTH          as controllength,
-               codeclstempattr0.CLASSIFYTEMPLATEOID    as classifytemplateoid,
-               codeclstempattr0.VERIFYRULE             as verifyrule,
-               codeclstempattr0.ENUMNAME               as enumname,
-               codeclstempattr0.TABLEDISPLAYFLAG       as tabledisplayflag,
-               codeclstempattr0.PARENTQUERYATTR        as parentqueryattr,
-               codeclstempattr0.ID                     as id,
-               codeclstempattr0.FILTERSOURCEATTRNAME   as filtersourceattrname,
-               codeclstempattr0.VALUEAREA              as valuearea,
-               codeclstempattr0.TABLEDISPLAYSTYLE      as tabledisplaystyle,
-               codeclstempattr0.TABLEDISPLAYJS         as tabledisplayjs,
-               codeclstempattr0.FORMDISPLAYFLAG        as formdisplayflag,
-               codeclstempattr0.DEFAULTVALUE           as defaultvalue,
-               codeclstempattr0.FORMHREF               as formhref,
-               codeclstempattr0.BTMNAME                as btmname,
-               codeclstempattr0.READONLYFLAG           as readonlyflag,
-               codeclstempattr0.NAME                   as name,
-               codeclstempattr0.COMPONENTRULE          as componentrule,
-               codeclstempattr0.SORTATTRFLAG           as sortattrflag,
-               codeclstempattr0.REFERBTMNAME           as referbtmname,
-               codeclstempattr0.ENUMID                 as enumid,
-               codeclstempattr0.FORMDISPLAYSTYLE       as formdisplaystyle,
-               codeclstempattr0.SCALELENGTH            as scalelength,
-               codeclstempattr0.PARENTNAME             as parentname,
-               codeclstempattr0.PRECISIONLENGTH        as precisionlength,
-               codeclstempattr0.PREFIXVALUE            as prefixvalue,
-               codeclstempattr0.FILTERSOURCEATTR       as filtersourceattr,
-               codeclstempattr0.TEXTAREAFLAG           as textareaflag,
-               codeclstempattr0.BARCODEFLAG            as barcodeflag,
-               codeclstempattr0.DESCRIPTION            as description,
-               codeclstempattr0.KEYATTRFLAG            as keyattrflag,
-               codeclstempattr0.QRCODEFLAG             as qrcodeflag,
-               codeclstempattr0.OID                    as oid,
-               codeclstempattr0.CLASSIFYINVOKELEVEL    as classifyinvokelevel,
-               codeclstempattr0.CLASSIFYINVOKEATTRNAME as classifyinvokeattrname,
-               codeclstempattr0.CLASSIFYINVOKEATTR     as classifyinvokeattr,
-               codeclstempattr0.REFERBTMID             as referbtmid,
-               codeclstempattr0.CLASSIFYINVOKEEDITFLAG as classifyinvokeeditflag,
-               codeclstempattr0.CODEDATEFORMAT         as codedateformat,
-               codeclstempattr0.SENIORQUERYATTRFLAG    as seniorqueryattrflag,
-               codeclstempattr0.OWNER                  as owner,
-               codeclstempattr0.ATTRIBUTEDATATYPE      as attributedatatype,
-               codeclstempattr0.CREATOR                as creator,
-               codeclstempattr0.CREATETIME             as createtime,
-               codeclstempattr0.ENUMEDITFLAG           as enumeditflag,
-               codeclstempattr0.ATTRIBUTEGROUP         as attributegroup,
-               codeclstempattr0.PARENTCODE             as parentcode,
-               codeclstempattr0.SUFFIXVALUE            as suffixvalue,
-               codeclstempattr0.ORDERNUM               as ordernum,
-               codeclstempattr0.REFERCONFIG            as referconfig,
-               codeclstempattr0.REQUIREFLAG            as requireflag,
-               codeclstempattr0.LIBRARYIDENTIFICATION  as libraryidentification,
-               codeclstempattr0.ENUMSTRING             as enumstring,
-               codeclstempattr0.IMAGEFLAG              as imageflag,
-               codeclstempattr0.LASTMODIFYTIME         as lastmodifytime,
-               codeclstempattr0.TABLEHREF              as tablehref,
-               codeclstempattr0.QUERYATTRFLAG          as queryattrflag,
-               codeclstempattr0.TS                     as ts,
-               classifytemplateoid.name                as classifyTemplateOidName
-        from platformbtm_codeclstempattr codeclstempattr0
-                 left join platformbtm_codeclstemplate classifytemplateoid
+    <select id="selectRefByOid" resultMap="CodeClstempattrResultMap">
+        select  codeclstempattr0.OID                    as oid
+        from PL_CODE_CLSTEMPATTR codeclstempattr0
+                 left join PL_CODE_CLSTEMPLATE classifytemplateoid
                            on codeclstempattr0.classifyTemplateOid = classifytemplateoid.oid
         where codeclstempattr0.classifytemplateoid = #{oid}
     </select>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstemplateMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstemplateMapper.xml
index 521b9e1..a29bde1 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstemplateMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstemplateMapper.xml
@@ -37,7 +37,7 @@
 
 
     <select id="selectPlCodeClstemplatePage" resultMap="plCodeClstemplateResultMap">
-        select * from PL_CODE_CLSTEMPLATE where is_deleted = 0
+        select * from PL_CODE_CLSTEMPLATE where is_deleted = 0 order by revisionSeq
     </select>
 
     <select id="selectAllLevelChildOid" resultType="java.lang.String" >
@@ -45,7 +45,59 @@
     </select>
 
     <select id="countAllLevelChildOid" resultType="java.lang.Integer" >
-        select count(OID) countsize from platformbtm_codeclstemplate START WITH codeClassifyOid = #{oid} CONNECT BY PRIOR codeClassifyOid = OID
+        select count(OID) countsize from PL_CODE_CLSTEMPLATE START WITH codeClassifyOid = #{oid} CONNECT BY PRIOR codeClassifyOid = OID
     </select>
+    <select id="getNextRevision" resultType="map" >
+        select max(revisionSeq) + 1 revisionSeq,
+               max(revisionSeq) + 1 revisionVal,
+               max(VersionSeq) + 1 VersionSeq,
+               max(VersionSeq) + 1 VersionVal
+        from PL_CODE_CLSTEMPLATE
+        where nameoid = #{nameoid}
+    </select>
+
+    <select id="selectCodeClassifyTemplateDOByTree" resultMap="plCodeClstemplateResultMap">
+        SELECT codeclstemplate0.CODECLASSIFYOID AS codeclassifyoid,
+               codeclstemplate0.LASTMODIFIER    AS lastmodifier,
+               codeclstemplate0.REVISIONSEQ     AS revisionseq,
+               codeclstemplate0.VERSIONVALUE    AS versionvalue,
+               codeclstemplate0.DESCRIPTION     AS description,
+               codeclstemplate0.OID             AS oid,
+               codeclstemplate0.VERSIONSEQ      AS versionseq,
+               --codeclstemplate0.CHECKINBY       AS checkinby,
+               codeclstemplate0.BTMTYPENAME     AS btmtypename,
+               codeclstemplate0.REVISIONRULE    AS revisionrule,
+               codeclstemplate0.ID              AS id,
+               codeclstemplate0.OWNER           AS owner,
+               --codeclstemplate0.CHECKOUTBY      AS checkoutby,
+               codeclstemplate0.BTMTYPEID       AS btmtypeid,
+               codeclstemplate0.CREATOR         AS creator,
+               codeclstemplate0.CREATETIME      AS createtime,
+               codeclstemplate0.FIRSTV        AS isfirstv,
+               codeclstemplate0.REVISIONOID     AS revisionoid,
+               codeclstemplate0.BTMNAME         AS btmname,
+               --codeclstemplate0.CHECKOUTTIME    AS checkouttime,
+               codeclstemplate0.REVISIONVALUE   AS revisionvalue,
+               codeclstemplate0.VERSIONRULE     AS versionrule,
+               codeclstemplate0.NAME            AS name,
+               codeclstemplate0.LASTR         AS islastr,
+               codeclstemplate0.LASTMODIFYTIME  AS lastmodifytime,
+               codeclstemplate0.COPYFROMVERSION AS copyfromversion,
+               codeclstemplate0.NAMEOID         AS nameoid,
+               codeclstemplate0.LCSTATUS        AS lcstatus,
+               codeclstemplate0.LASTV         AS islastv,
+               --codeclstemplate0.CHECKINTIME     AS checkintime,
+               codeclstemplate0.FIRSTR        AS isfirstr,
+               codeclstemplate0.TS              AS ts,
+               codeclassifyoid.name             AS codeClassifyOidName
+        FROM PL_CODE_CLSTEMPLATE codeclstemplate0
+                 LEFT JOIN PL_CODE_CLASSIFY codeclassifyoid
+                           ON codeclstemplate0.codeClassifyOid = codeclassifyoid.oid
+        WHERE codeclstemplate0.codeclassifyoid = #{codeclassifyoid}
+          and codeclstemplate0.lcstatus = #{lcstatus}
+          AND (codeclstemplate0.lastr = '1' AND codeclstemplate0.lastv = '1')
+    </select>
+
+
 
 </mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeFixedValueMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeFixedValueMapper.xml
index f4287d6..d642a2e 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeFixedValueMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeFixedValueMapper.xml
@@ -3,5 +3,114 @@
 <mapper namespace="com.vci.ubcs.code.mapper.CodeFixedValueMapper">
 
 
+    <resultMap type="com.vci.ubcs.code.entity.CodeFixedValue" id="CodeFixedvalueMap">
+        <result property="oid" column="OID" jdbcType="VARCHAR"/>
+        <result property="revisionOid" column="REVISIONOID" jdbcType="VARCHAR"/>
+        <result property="nameOid" column="NAMEOID" jdbcType="VARCHAR"/>
+        <result property="btmname" column="BTMNAME" jdbcType="VARCHAR"/>
+        <result property="lastR" column="LASTR" jdbcType="VARCHAR"/>
+        <result property="firstR" column="FIRSTR" jdbcType="VARCHAR"/>
+        <result property="lastV" column="LASTV" jdbcType="VARCHAR"/>
+        <result property="firstV" column="FIRSTV" jdbcType="VARCHAR"/>
+        <result property="creator" column="CREATOR" jdbcType="VARCHAR"/>
+        <result property="createTime" column="CREATETIME" jdbcType="VARCHAR"/>
+        <result property="lastModifier" column="LASTMODIFIER" jdbcType="VARCHAR"/>
+        <result property="lastModifyTime" column="LASTMODIFYTIME" jdbcType="VARCHAR"/>
+        <result property="revisionRule" column="REVISIONRULE" jdbcType="VARCHAR"/>
+        <result property="versionRule" column="VERSIONRULE" jdbcType="VARCHAR"/>
+        <result property="revisionSeq" column="REVISIONSEQ" jdbcType="INTEGER"/>
+        <result property="revisionValue" column="REVISIONVALUE" jdbcType="VARCHAR"/>
+        <result property="versionSeq" column="VERSIONSEQ" jdbcType="INTEGER"/>
+        <result property="versionValue" column="VERSIONVALUE" jdbcType="VARCHAR"/>
+        <result property="lctid" column="LCTID" jdbcType="VARCHAR"/>
+        <result property="lcStatus" column="LCSTATUS" jdbcType="VARCHAR"/>
+        <result property="ts" column="TS" jdbcType="VARCHAR"/>
+        <result property="id" column="ID" jdbcType="VARCHAR"/>
+        <result property="name" column="NAME" jdbcType="VARCHAR"/>
+        <result property="description" column="DESCRIPTION" jdbcType="VARCHAR"/>
+        <result property="owner" column="OWNER" jdbcType="VARCHAR"/>
+        <result property="copyFromVersion" column="COPYFROMVERSION" jdbcType="VARCHAR"/>
+        <result property="codeFixedSecOid" column="CODEFIXEDSECOID" jdbcType="VARCHAR"/>
+        <result property="orderNum" column="ORDERNUM" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <select id="selectByPage" resultMap="CodeFixedvalueMap">
+        SELECT
+            PL_CODE_FIXEDVALUE.oid,
+            PL_CODE_FIXEDVALUE.revisionoid,
+            PL_CODE_FIXEDVALUE.nameoid,
+            PL_CODE_FIXEDVALUE.btmname,
+            PL_CODE_FIXEDVALUE.lastr,
+            PL_CODE_FIXEDVALUE.firstr,
+            PL_CODE_FIXEDVALUE.lastv,
+            PL_CODE_FIXEDVALUE.firstv,
+            PL_CODE_FIXEDVALUE.creator,
+            PL_CODE_FIXEDVALUE.createtime,
+            PL_CODE_FIXEDVALUE.lastmodifier,
+            PL_CODE_FIXEDVALUE.lastmodifytime,
+            PL_CODE_FIXEDVALUE.revisionrule,
+            PL_CODE_FIXEDVALUE.versionrule,
+            PL_CODE_FIXEDVALUE.revisionseq,
+            PL_CODE_FIXEDVALUE.revisionvalue,
+            PL_CODE_FIXEDVALUE.versionseq,
+            PL_CODE_FIXEDVALUE.versionvalue,
+            PL_CODE_FIXEDVALUE.lctid,
+            PL_CODE_FIXEDVALUE.lcstatus,
+            PL_CODE_FIXEDVALUE.ts,
+            PL_CODE_FIXEDVALUE.id,
+            PL_CODE_FIXEDVALUE.name,
+            PL_CODE_FIXEDVALUE.description,
+            PL_CODE_FIXEDVALUE.owner,
+            PL_CODE_FIXEDVALUE.copyfromversion,
+            PL_CODE_FIXEDVALUE.codefixedsecoid,
+            PL_CODE_FIXEDVALUE.ordernum,
+            COUNT( * ) OVER ( ) "##VCI_COUNT_VCI##"
+        FROM
+            PL_CODE_FIXEDVALUE
+        WHERE
+            PL_CODE_FIXEDVALUE.codefixedsecoid = #{codeFixedValueVO.codeFixedSecOid}
+    </select>
+
+    <select id="selectByPageByCodeFixedSecOid" resultMap="CodeFixedvalueMap">
+        SELECT
+            PL_CODE_FIXEDVALUE.oid,
+            PL_CODE_FIXEDVALUE.revisionoid,
+            PL_CODE_FIXEDVALUE.nameoid,
+            PL_CODE_FIXEDVALUE.btmname,
+            PL_CODE_FIXEDVALUE.lastr,
+            PL_CODE_FIXEDVALUE.firstr,
+            PL_CODE_FIXEDVALUE.lastv,
+            PL_CODE_FIXEDVALUE.firstv,
+            PL_CODE_FIXEDVALUE.creator,
+            PL_CODE_FIXEDVALUE.createtime,
+            PL_CODE_FIXEDVALUE.lastmodifier,
+            PL_CODE_FIXEDVALUE.lastmodifytime,
+            PL_CODE_FIXEDVALUE.revisionrule,
+            PL_CODE_FIXEDVALUE.versionrule,
+            PL_CODE_FIXEDVALUE.revisionseq,
+            PL_CODE_FIXEDVALUE.revisionvalue,
+            PL_CODE_FIXEDVALUE.versionseq,
+            PL_CODE_FIXEDVALUE.versionvalue,
+            PL_CODE_FIXEDVALUE.lctid,
+            PL_CODE_FIXEDVALUE.lcstatus,
+            PL_CODE_FIXEDVALUE.ts,
+            PL_CODE_FIXEDVALUE.id,
+            PL_CODE_FIXEDVALUE.name,
+            PL_CODE_FIXEDVALUE.description,
+            PL_CODE_FIXEDVALUE.owner,
+            PL_CODE_FIXEDVALUE.copyfromversion,
+            PL_CODE_FIXEDVALUE.codefixedsecoid,
+            PL_CODE_FIXEDVALUE.ordernum,
+            COUNT( * ) OVER ( ) "##VCI_COUNT_VCI##"
+        FROM
+            PL_CODE_FIXEDVALUE
+        WHERE
+            PL_CODE_FIXEDVALUE.codefixedsecoid in
+        <foreach collection="secOids" index="index" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+
+    </select>
+
 
 </mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml
new file mode 100644
index 0000000..b9945a7
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.code.mapper.CodePhaseAttrMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="CodePhaseattrResultMap" type="com.vci.ubcs.code.entity.CodePhaseAttr">
+        <result column="OID" property="oid"/>
+        <result column="REVISIONOID" property="revisionOid"/>
+        <result column="NAMEOID" property="nameOid"/>
+        <result column="BTMNAME" property="btmname"/>
+        <result column="LASTR" property="lastR"/>
+        <result column="FIRSTR" property="firstR"/>
+        <result column="LASTV" property="lastV"/>
+        <result column="FIRSTV" property="firstV"/>
+        <result column="CREATOR" property="creator"/>
+        <result column="CREATETIME" property="createTime"/>
+        <result column="LASTMODIFIER" property="lastModifier"/>
+        <result column="LASTMODIFYTIME" property="lastModifyTime"/>
+        <result column="REVISIONRULE" property="revisionRule"/>
+        <result column="VERSIONRULE" property="versionRule"/>
+        <result column="REVISIONSEQ" property="revisionSeq"/>
+        <result column="REVISIONVALUE" property="revisionValue"/>
+        <result column="VERSIONSEQ" property="versionSeq"/>
+        <result column="VERSIONVALUE" property="versionValue"/>
+        <result column="LCTID" property="lctid"/>
+        <result column="LCSTATUS" property="lcStatus"/>
+        <result column="TS" property="ts"/>
+        <result column="ID" property="id"/>
+        <result column="NAME" property="name"/>
+        <result column="DESCRIPTION" property="description"/>
+        <result column="OWNER" property="owner"/>
+        <result column="COPYFROMVERSION" property="copyFromVersion"/>
+        <result column="CODEPHASEOID" property="codePhaseOid"/>
+        <result column="ATTRIBUTEGROUP" property="attributegroup"/>
+    </resultMap>
+
+    <select id="selectCodePhaseattrPage" resultMap="CodePhaseattrResultMap">
+        select * from PL_CODE_PHASEATTR where is_deleted = 0
+    </select>
+
+    <select id="selectByPhasea" resultMap="CodePhaseattrResultMap">
+        select lastmodifier,
+               revisionseq,
+               versionvalue,
+               description,
+               oid,
+               versionseq,
+               checkinby,
+               revisionrule,
+               lctid,
+               id,
+               owner,
+               checkoutby,
+               creator,
+               createtime,
+               isfirstv,
+               attributegroup,
+               revisionoid,
+               btmname,
+               checkouttime,
+               revisionvalue,
+               versionrule,
+               name,
+               islastr,
+               lastmodifytime,
+               copyfromversion,
+               nameoid,
+               lcstatus,
+               islastv,
+               checkintime,
+               codephaseoid,
+               isfirstr
+        from PL_CODE_PHASEATTR
+        where codephaseoid in
+              (select oid
+               from PL_CODE_TEMPPHASE
+               where codeClassifyTemplateOid = #{oid})
+    </select>
+
+    <select id="selectByPhaseaIds" resultMap="CodePhaseattrResultMap">
+        select lastmodifier,
+               revisionseq,
+               versionvalue,
+               description,
+               oid,
+               versionseq,
+               checkinby,
+               revisionrule,
+               lctid,
+               id,
+               owner,
+               checkoutby,
+               creator,
+               createtime,
+               isfirstv,
+               attributegroup,
+               revisionoid,
+               btmname,
+               checkouttime,
+               revisionvalue,
+               versionrule,
+               name,
+               islastr,
+               lastmodifytime,
+               copyfromversion,
+               nameoid,
+               lcstatus,
+               islastv,
+               checkintime,
+               codephaseoid,
+               isfirstr
+        from PL_CODE_PHASEATTR
+        where codephaseoid in
+              (#{oids})
+    </select>
+
+    <select id="listLinkAttrDOByTemplateAttrDOS" resultMap="CodePhaseattrResultMap">
+
+        SELECT lastmodifier,
+               revisionseq,
+               versionvalue,
+               description,
+               oid,
+               versionseq, /*checkinby,*/
+               revisionrule,
+               lctid,
+               id,
+               owner, /*checkoutby, */
+               creator,
+               createtime, /*is*/
+               firstv,
+               attributegroup,
+               revisionoid,
+               btmname, /*checkouttime,*/
+               revisionvalue,
+               versionrule,
+               name, /*is*/
+               lastr,
+               lastmodifytime,
+               copyfromversion,
+               nameoid,
+               lcstatus, /*is*/
+               lastv, /*checkintime,*/
+               codephaseoid,
+            /*is*/
+               firstr,
+               ts
+        FROM PL_CODE_PHASEATTR
+            where ID IN (#{id})
+          AND codephaseoid in
+              (select oid
+               from PL_CODE_TEMPPHASE
+               where codeClassifyTemplateOid =#{codeClassifyTemplateOid})
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml
index 1c54776..b9945a7 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.vci.ubcs.code.mapper.CodePhaseattrMapper">
+<mapper namespace="com.vci.ubcs.code.mapper.CodePhaseAttrMapper">
 
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="CodePhaseattrResultMap" type="com.vci.ubcs.code.entity.CodePhaseattrEntity">
+    <resultMap id="CodePhaseattrResultMap" type="com.vci.ubcs.code.entity.CodePhaseAttr">
         <result column="OID" property="oid"/>
         <result column="REVISIONOID" property="revisionOid"/>
         <result column="NAMEOID" property="nameOid"/>
@@ -30,15 +30,15 @@
         <result column="DESCRIPTION" property="description"/>
         <result column="OWNER" property="owner"/>
         <result column="COPYFROMVERSION" property="copyFromVersion"/>
-        <result column="CODEPHASEOID" property="codephaseoid"/>
+        <result column="CODEPHASEOID" property="codePhaseOid"/>
         <result column="ATTRIBUTEGROUP" property="attributegroup"/>
     </resultMap>
-
 
     <select id="selectCodePhaseattrPage" resultMap="CodePhaseattrResultMap">
         select * from PL_CODE_PHASEATTR where is_deleted = 0
     </select>
-    <select id="selectByPhasea" resultType="com.vci.ubcs.code.entity.CodePhaseattrEntity">
+
+    <select id="selectByPhasea" resultMap="CodePhaseattrResultMap">
         select lastmodifier,
                revisionseq,
                versionvalue,
@@ -70,12 +70,87 @@
                checkintime,
                codephaseoid,
                isfirstr
-        from platformbtm_codephaseattr
+        from PL_CODE_PHASEATTR
         where codephaseoid in
               (select oid
-               from platformbtm_codetempphase
+               from PL_CODE_TEMPPHASE
                where codeClassifyTemplateOid = #{oid})
     </select>
 
+    <select id="selectByPhaseaIds" resultMap="CodePhaseattrResultMap">
+        select lastmodifier,
+               revisionseq,
+               versionvalue,
+               description,
+               oid,
+               versionseq,
+               checkinby,
+               revisionrule,
+               lctid,
+               id,
+               owner,
+               checkoutby,
+               creator,
+               createtime,
+               isfirstv,
+               attributegroup,
+               revisionoid,
+               btmname,
+               checkouttime,
+               revisionvalue,
+               versionrule,
+               name,
+               islastr,
+               lastmodifytime,
+               copyfromversion,
+               nameoid,
+               lcstatus,
+               islastv,
+               checkintime,
+               codephaseoid,
+               isfirstr
+        from PL_CODE_PHASEATTR
+        where codephaseoid in
+              (#{oids})
+    </select>
+
+    <select id="listLinkAttrDOByTemplateAttrDOS" resultMap="CodePhaseattrResultMap">
+
+        SELECT lastmodifier,
+               revisionseq,
+               versionvalue,
+               description,
+               oid,
+               versionseq, /*checkinby,*/
+               revisionrule,
+               lctid,
+               id,
+               owner, /*checkoutby, */
+               creator,
+               createtime, /*is*/
+               firstv,
+               attributegroup,
+               revisionoid,
+               btmname, /*checkouttime,*/
+               revisionvalue,
+               versionrule,
+               name, /*is*/
+               lastr,
+               lastmodifytime,
+               copyfromversion,
+               nameoid,
+               lcstatus, /*is*/
+               lastv, /*checkintime,*/
+               codephaseoid,
+            /*is*/
+               firstr,
+               ts
+        FROM PL_CODE_PHASEATTR
+            where ID IN (#{id})
+          AND codephaseoid in
+              (select oid
+               from PL_CODE_TEMPPHASE
+               where codeClassifyTemplateOid =#{codeClassifyTemplateOid})
+    </select>
 
 </mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempbuttonMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempbuttonMapper.xml
deleted file mode 100644
index 4dd2253..0000000
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempbuttonMapper.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.vci.ubcs.code.mapper.CodeTempbuttonMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="CodeTempbuttonResultMap" type="com.vci.ubcs.code.entity.CodeTempbuttonEntity">
-        <result column="OID" property="oid"/>
-        <result column="REVISIONOID" property="revisionOid"/>
-        <result column="NAMEOID" property="nameOid"/>
-        <result column="BTMNAME" property="btmname"/>
-        <result column="LASTR" property="lastR"/>
-        <result column="FIRSTR" property="firstR"/>
-        <result column="LASTV" property="lastV"/>
-        <result column="FIRSTV" property="firstV"/>
-        <result column="CREATOR" property="creator"/>
-        <result column="CREATETIME" property="createTime"/>
-        <result column="LASTMODIFIER" property="lastModifier"/>
-        <result column="LASTMODIFYTIME" property="lastModifyTime"/>
-        <result column="REVISIONRULE" property="revisionRule"/>
-        <result column="VERSIONRULE" property="versionRule"/>
-        <result column="REVISIONSEQ" property="revisionSeq"/>
-        <result column="REVISIONVALUE" property="revisionValue"/>
-        <result column="VERSIONSEQ" property="versionSeq"/>
-        <result column="VERSIONVALUE" property="versionValue"/>
-        <result column="LCTID" property="lctid"/>
-        <result column="LCSTATUS" property="lcStatus"/>
-        <result column="TS" property="ts"/>
-        <result column="ID" property="id"/>
-        <result column="NAME" property="name"/>
-        <result column="DESCRIPTION" property="description"/>
-        <result column="OWNER" property="owner"/>
-        <result column="COPYFROMVERSION" property="copyFromVersion"/>
-        <result column="CLASSIFYTEMPLATEOID" property="classifytemplateoid"/>
-        <result column="CLASSIFYBUTTONOID" property="classifybuttonoid"/>
-        <result column="BUTTONUSE" property="buttonuse"/>
-        <result column="ORDERNUM" property="ordernum"/>
-    </resultMap>
-
-
-    <select id="selectCodeTempbuttonPage" resultMap="CodeTempbuttonResultMap">
-        select * from PL_CODE_TEMPBUTTON where is_deleted = 0
-    </select>
-
-
-</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTemplatePhaseMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTemplatePhaseMapper.xml
new file mode 100644
index 0000000..db3eb12
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTemplatePhaseMapper.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.code.mapper.CodeTemplatePhaseMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="CodeTempphaseResultMap" type="com.vci.ubcs.code.entity.CodeTemplatePhase">
+        <result column="CREATETIME" property="createTime"/>
+        <result column="LASTMODIFIER" property="lastModifier"/>
+        <result column="LASTMODIFYTIME" property="lastModifyTime"/>
+        <result column="REVISIONRULE" property="revisionRule"/>
+        <result column="VERSIONRULE" property="versionRule"/>
+        <result column="REVISIONSEQ" property="revisionSeq"/>
+        <result column="REVISIONVALUE" property="revisionValue"/>
+        <result column="VERSIONSEQ" property="versionSeq"/>
+        <result column="VERSIONVALUE" property="versionValue"/>
+        <result column="LCTID" property="lctid"/>
+        <result column="LCSTATUS" property="lcStatus"/>
+        <result column="TS" property="ts"/>
+        <result column="ID" property="id"/>
+        <result column="NAME" property="name"/>
+        <result column="DESCRIPTION" property="description"/>
+        <result column="OWNER" property="owner"/>
+        <result column="COPYFROMVERSION" property="copyFromVersion"/>
+        <result column="CODECLASSIFYTEMPLATEOID" property="codeclassifytemplateoid"/>
+        <result column="OID" property="oid"/>
+        <result column="REVISIONOID" property="revisionOid"/>
+        <result column="NAMEOID" property="nameOid"/>
+        <result column="BTMNAME" property="btmname"/>
+        <result column="LASTR" property="lastR"/>
+        <result column="FIRSTR" property="firstR"/>
+        <result column="LASTV" property="lastV"/>
+        <result column="FIRSTV" property="firstV"/>
+        <result column="CREATOR" property="creator"/>
+    </resultMap>
+
+
+    <select id="selectCodeTempphasePage" resultMap="CodeTempphaseResultMap">
+        select * from PL_CODE_TEMPPHASE where is_deleted = 0
+    </select>
+
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempphaseMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempphaseMapper.xml
deleted file mode 100644
index f6efd1c..0000000
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempphaseMapper.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.vci.ubcs.code.mapper.CodeTempphaseMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="CodeTempphaseResultMap" type="com.vci.ubcs.code.entity.CodeTempphaseEntity">
-        <result column="CREATETIME" property="createTime"/>
-        <result column="LASTMODIFIER" property="lastModifier"/>
-        <result column="LASTMODIFYTIME" property="lastModifyTime"/>
-        <result column="REVISIONRULE" property="revisionRule"/>
-        <result column="VERSIONRULE" property="versionRule"/>
-        <result column="REVISIONSEQ" property="revisionSeq"/>
-        <result column="REVISIONVALUE" property="revisionValue"/>
-        <result column="VERSIONSEQ" property="versionSeq"/>
-        <result column="VERSIONVALUE" property="versionValue"/>
-        <result column="LCTID" property="lctid"/>
-        <result column="LCSTATUS" property="lcStatus"/>
-        <result column="TS" property="ts"/>
-        <result column="ID" property="id"/>
-        <result column="NAME" property="name"/>
-        <result column="DESCRIPTION" property="description"/>
-        <result column="OWNER" property="owner"/>
-        <result column="COPYFROMVERSION" property="copyFromVersion"/>
-        <result column="CODECLASSIFYTEMPLATEOID" property="codeclassifytemplateoid"/>
-        <result column="OID" property="oid"/>
-        <result column="REVISIONOID" property="revisionOid"/>
-        <result column="NAMEOID" property="nameOid"/>
-        <result column="BTMNAME" property="btmname"/>
-        <result column="LASTR" property="lastR"/>
-        <result column="FIRSTR" property="firstR"/>
-        <result column="LASTV" property="lastV"/>
-        <result column="FIRSTV" property="firstV"/>
-        <result column="CREATOR" property="creator"/>
-    </resultMap>
-
-
-    <select id="selectCodeTempphasePage" resultMap="CodeTempphaseResultMap">
-        select * from PL_CODE_TEMPPHASE where is_deleted = 0
-    </select>
-
-
-</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
index 736ff64..8f62d59 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
@@ -14,4 +14,9 @@
     </select>
 
 
+    <select id="selectById" resultType="java.lang.String">
+        ${inSql}
+    </select>
+
+
 </mapper>
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..498158c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/pom.xml
@@ -0,0 +1,54 @@
+<?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-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</groupId>
+            <artifactId>vci-starter-word</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.vci</groupId>
+                    <artifactId>vci-starter-web</artifactId>
+                </exclusion>
+            </exclusions>
+        </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..e40f69e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java
@@ -0,0 +1,86 @@
+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.BtmAndLinkTypeDdlDTO;
+import com.vci.ubcs.omd.dto.BtmTypeDTO;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+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.springblade.core.tool.utils.Func;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Description: 鏁版嵁搴撴搷浣滄帶鍒跺櫒
+ *
+ * @author LiHang
+ * @date 2023/4/25
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/ddl")
+@Api(value = "鏁版嵁搴撴搷浣�", tags = "鏁版嵁搴撴搷浣�")
+public class DdlController {
+
+	@Autowired
+	private IDdlService ddlService;
+
+	/**
+	 * 鏂板鎴栦慨鏀规暟鎹簱琛�
+	 * @param ddlDTO 涓氬姟绫诲瀷+閾炬帴绫诲瀷
+	 * @return 鎵ц缁撴灉
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "涓氬姟绫诲瀷閾炬帴绫诲瀷浼犺緭瀵硅薄")
+	public R submitBtmType(@RequestBody BtmAndLinkTypeDdlDTO ddlDTO) {
+		return ddlService.submit(ddlDTO);
+	}
+
+	/**
+	 * 鏍规嵁琛ㄥ悕鑾峰彇瀛楁淇℃伅
+	 * @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<BtmTypeVO>> getAllTableInfo(){
+		return R.data(ddlService.getAllTableInfo());
+	}
+
+	/**
+	 * 鑾峰彇鏁版嵁搴撳拰涓氬姟绫诲瀷涓殑涓嶅悓鐨勫湴鏂�
+	 * @param ddlDTO 鍖呭惈涓氬姟绫诲瀷鍜岄摼鎺ョ被鍨嬬殑鍖呰
+	 * @return 涓嶅悓鐨勫湴鏂癸紝姣忎竴涓笟鍔$被鍨嬫垨鑰呴摼鎺ョ被鍨嬩竴鏉℃暟鎹�
+	 */
+	@PostMapping("/checkDifferentAndReflex")
+	@ApiOperation(value = "妫�鏌ヤ笟鍔$被鍨嬬殑鏁版嵁涓庢暟鎹簱涓槸鍚︾浉鍚�")
+	@ApiOperationSupport(order = 5)
+	public R<List<ModifyAttributeInfo>> checkDifferentAndReflex(@RequestBody BtmAndLinkTypeDdlDTO ddlDTO){
+		Func.requireNotNull(ddlDTO,"涓氬姟绫诲瀷涓庨摼鎺ュ璞′紶杈撳璞′笉鑳戒负绌�");
+		return R.data(ddlService.checkDifferent(ddlDTO.getBtmTypeList(),ddlDTO.getLinkTypeList()));
+	}
+}
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..316ee29
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java
@@ -0,0 +1,126 @@
+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 鏁版嵁搴撹〃鐨勫瓧娈典俊鎭�
+	 */
+	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..561e833
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java
@@ -0,0 +1,119 @@
+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 鏁版嵁搴撹〃鐨勫瓧娈典俊鎭�
+	 */
+	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/DllMySqlMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMySqlMapper.java
new file mode 100644
index 0000000..8fee3c0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMySqlMapper.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.ddl.mapper;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/26
+ */
+@Repository
+public interface DllMySqlMapper 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..5f77cc6
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.ddl.processor.ddl;
+
+import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
+import com.vci.ubcs.ddl.mapper.DdlMSMapper;
+import com.vci.ubcs.ddl.mapper.DdlMySqlMapper;
+import com.vci.ubcs.ddl.mapper.DdlOracleMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+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 = "";
+
+	private final static List<DdlMapperProcessor> PROCESSORS = Lists.newArrayList();
+
+	static {
+		PROCESSORS.add(VciSpringUtil.getBean(DdlOracleMapperProcessor.class));
+		PROCESSORS.add(VciSpringUtil.getBean(DdlMySqlMapperProcessor.class));
+		PROCESSORS.add(VciSpringUtil.getBean(DdlMsMapperProcessor.class));
+	}
+
+	public static DdlMapperProcessor getProcessor(){
+		for (DdlMapperProcessor processor : PROCESSORS) {
+			if (processor.support(DATABASE_DRIVER)){
+				return processor;
+			}
+		}
+		return VciSpringUtil.getBean(DdlOracleMapperProcessor.class);
+	}
+}
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..94a78d2
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java
@@ -0,0 +1,157 @@
+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 com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+
+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..a21d862
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java
@@ -0,0 +1,72 @@
+package com.vci.ubcs.ddl.processor.ddl;
+
+
+import com.vci.ubcs.ddl.mapper.DdlMSMapper;
+import com.vci.ubcs.ddl.mapper.DdlMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springframework.stereotype.Component;
+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
+ */
+@Component
+public class DdlMsMapperProcessor extends DdlMapperProcessor{
+
+	private static DdlMapper mapper = VciSpringUtil.getBean(DdlMSMapper.class);
+
+
+	public DdlMsMapperProcessor() {
+		super(mapper);
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇Sql Server鏁版嵁搴揇DL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇Sql Server鏁版嵁搴揇DL鎿嶄綔鏈嶅姟澶辫触");
+		}
+	}
+
+	@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..d7e8ca5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java
@@ -0,0 +1,73 @@
+package com.vci.ubcs.ddl.processor.ddl;
+
+
+import com.vci.ubcs.ddl.mapper.DdlMapper;
+import com.vci.ubcs.ddl.mapper.DdlMySqlMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springframework.stereotype.Component;
+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
+ */
+@Component
+public class DdlMySqlMapperProcessor extends DdlMapperProcessor{
+
+	private static DdlMapper mapper = VciSpringUtil.getBean(DdlMySqlMapper.class);
+
+	public DdlMySqlMapperProcessor() {
+		super(mapper);
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇MySql鏁版嵁搴揇DL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇MySql鏁版嵁搴揇DL鎿嶄綔鏈嶅姟澶辫触");
+		}
+	}
+
+	@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..174344c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java
@@ -0,0 +1,43 @@
+package com.vci.ubcs.ddl.processor.ddl;
+
+import com.vci.ubcs.ddl.mapper.DdlMapper;
+import com.vci.ubcs.ddl.mapper.DdlOracleMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+/**
+ * Description: oracle鐨勬暟鎹簱鎿嶄綔
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Component
+public class DdlOracleMapperProcessor extends DdlMapperProcessor{
+
+	private static DdlMapper mapper = VciSpringUtil.getBean(DdlOracleMapper.class);
+
+	public DdlOracleMapperProcessor() {
+		super(mapper);
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇Oracle鏁版嵁搴揇DL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇Oracle鏁版嵁搴揇DL鎿嶄綔鏈嶅姟澶辫触");
+		}
+	}
+
+	@Override
+	boolean support(String url) {
+		return "oracle.jdbc.OracleDriver".equals(url);
+	}
+
+	@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..de6622d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java
@@ -0,0 +1,29 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/25
+ */
+public interface DllBehavior {
+	/**
+	 * 涓婚敭
+	 */
+	String OID = "oid";
+
+	/**
+	 * 绌烘牸
+	 */
+	String SPACE = " ";
+
+	/**
+	 * 榛樿鍊�
+	 */
+	String DEFAULT = "default";
+
+}
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..b211b73
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java
@@ -0,0 +1,173 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
+import com.vci.ubcs.ddl.mapper.*;
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.apache.commons.collections4.BidiMap;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.bidimap.DualHashBidiMap;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Description:DLL鐨勫鐞嗘帴鍙�
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+public abstract class DllMapperProcessor {
+
+	private final static BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAPPING_MAP;
+
+	static {
+		FIELD_MAPPING_MAP = new DualHashBidiMap<>();
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("NUMBER",22,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("NUMBER",22,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("NUMBER",26,8,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR2",5,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("VARCHAR2",100,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("VTClob",null,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR2",255,null,true,null));
+	}
+
+	protected abstract DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum);
+
+	protected final DdlFieldMappingAttrBO getMappingBOInMap(VciFieldTypeEnum fieldTypeEnum,BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> map){
+		if (!map.containsKey(fieldTypeEnum)){
+			throw new VciBaseException("鎵句笉鍒板瓧娈电殑鏄犲皠");
+		}
+		DdlFieldMappingAttrBO bo = map.get(fieldTypeEnum);
+		return BeanUtil.copy(bo,DdlFieldMappingAttrBO.class);
+	}
+
+	protected static BidiMap<VciFieldTypeEnum,DdlFieldMappingAttrBO> getMappingMapCopy(){
+		BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> map = new DualHashBidiMap<>();
+		map.putAll(FIELD_MAPPING_MAP);
+		return map;
+	}
+
+	/**
+	 * 鎸夋暟鎹簱瀛楁绫诲瀷鍒椾妇鎵�鏈夌殑VCI瀛楁绫诲瀷
+	 * @param columnStr 鏁版嵁搴撳瓧娈电被鍨�
+	 * @return VCI瀛楁绫诲瀷
+	 */
+	public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr){
+		return listFieldInMapByColumnStr(columnStr,FIELD_MAPPING_MAP);
+	}
+
+	protected final List<VciFieldTypeEnum> listFieldInMapByColumnStr(String columnStr,BidiMap<VciFieldTypeEnum,DdlFieldMappingAttrBO> map){
+		VciBaseUtil.alertNotNull(columnStr,"鏁版嵁搴撳瓧娈电被鍨�",map,"瀛楁鏄犲皠闆嗗悎");
+		List<VciFieldTypeEnum> fieldTypeList = new ArrayList<>();
+		map.values().stream().filter(s -> StringUtil.equals(s.getDataType(),columnStr)).forEach(s -> {
+			fieldTypeList.add(map.getKey(s));
+		});
+		return fieldTypeList;
+	}
+
+	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);
+	}
+
+
+
+	/**
+	 * 鑾峰彇瀛楁鍒涘缓sql
+	 * @param fieldType VT瀛楁绫诲瀷
+	 * @param attributeVO 灞炴��
+	 * @return sql
+	 */
+	public String getColumnTypeSql(VciFieldTypeEnum fieldType,BtmTypeAttributeVO attributeVO){
+		DdlFieldMappingAttrBO mappingBO = getMappingBO(fieldType);
+		mappingBO.setDataLength(attributeVO.getAttributeLength());
+		if (fieldType.equals(VciFieldTypeEnum.VTDouble)){
+			mappingBO.setDataPrecision(attributeVO.getPrecisionLength());
+		}
+		mappingBO.setNullable(attributeVO.isNullableFlag());
+		mappingBO.setDefaultValue(attributeVO.getDefaultValue());
+		return mappingBO.toString() + (StringUtil.equals(attributeVO.getId(),"OID") ? StringPool.SPACE +  "primary key" + StringPool.SPACE : "");
+
+	}
+
+	public abstract VciFieldTypeEnum getFieldTypeByColumnStr(String columnStr,Integer length);
+
+	protected final VciFieldTypeEnum getFieldTypeBeColumnStrInMap(String columnStr,Integer length,BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> map){
+		List<VciFieldTypeEnum> fieldTypes = listFieldInMapByColumnStr(columnStr, map);
+		VciFieldTypeEnum finalField = null;
+		int i = Integer.MAX_VALUE;
+		if (CollectionUtils.isEmpty(fieldTypes)){
+			return null;
+		}
+		if (fieldTypes.size() == 1){
+			return fieldTypes.get(0);
+		}
+		for (VciFieldTypeEnum fieldType : fieldTypes) {
+			DdlFieldMappingAttrBO bo = map.get(fieldType);
+			int i1 = Math.abs(bo.getDataLength() - length);
+			if (i1 < i){
+				finalField = fieldType;
+				i = i1;
+			}
+		}
+		return finalField;
+	}
+
+}
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..678ed44
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
+import com.vci.ubcs.ddl.mapper.DllMsMapper;
+import com.vci.ubcs.ddl.mapper.DllOracleMapper;
+import com.vci.ubcs.ddl.mapper.DllSqlLiteMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+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(VciSpringUtil.getBean(DllMsMapperProcessor.class));
+		processors.add(VciSpringUtil.getBean(DllSqlLiteMapperProcessor.class));
+		processors.add(VciSpringUtil.getBean(DllMySqlMapperProcessor.class));
+		processors.add(VciSpringUtil.getBean(DllOracleMapperProcessor.class));
+	}
+
+	public static DllMapperProcessor getProcessor(){
+		for (DllMapperProcessor processor : processors) {
+			if (processor.support(DATABASE_DRIVER)){
+				return processor;
+			}
+		}
+		return VciSpringUtil.getBean(DllOracleMapperProcessor.class);
+	}
+}
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..fa60a49
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java
@@ -0,0 +1,57 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+
+import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
+import com.vci.ubcs.ddl.mapper.DdlMSMapper;
+import com.vci.ubcs.ddl.mapper.DllMapper;
+import com.vci.ubcs.ddl.mapper.DllMsMapper;
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import org.apache.commons.collections4.BidiMap;
+import org.springblade.core.tool.utils.StringPool;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Component
+public class DllMsMapperProcessor extends DllMapperProcessor {
+
+	private static DllMapper mapper = VciSpringUtil.getBean(DllMsMapper.class);
+
+
+	private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
+
+	public DllMsMapperProcessor() {
+		super(mapper);
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇Sql Server鏁版嵁搴揇LL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇Sql Server鏁版嵁搴揇LL鎿嶄綔鏈嶅姟澶辫触");
+		}
+	}
+
+	@Override
+	protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
+		return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
+	}
+
+	@Override
+	public boolean support(String url) {
+		return "oracle.jdbc.OracleDiver".equals(url);
+	}
+
+	@Override
+	public VciFieldTypeEnum getFieldTypeByColumnStr(String columnStr, Integer length) {
+		return getFieldTypeBeColumnStrInMap(columnStr,length,FIELD_MAP);
+	}
+}
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..780984d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java
@@ -0,0 +1,78 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+
+import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
+import com.vci.ubcs.ddl.mapper.DllMapper;
+import com.vci.ubcs.ddl.mapper.DllMySqlMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import org.apache.commons.collections4.BidiMap;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Component
+public class DllMySqlMapperProcessor extends DllMapperProcessor {
+
+	private static final DllMapper MAPPER = VciSpringUtil.getBean(DllMySqlMapper.class);
+
+	private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
+
+
+	static {
+		// 闇�瑕侀噸鏂版槧灏勭殑瀛楁绫诲瀷鍦ㄨ繖閲屽啓
+		FIELD_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("NUMERIC",26,8,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("INT",22,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("BIGINT",22,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR",5,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("varchar(max)",100,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
+	}
+
+	public DllMySqlMapperProcessor() {
+		super(MAPPER);
+		System.out.println("-----------------");
+		if (MAPPER != null){
+			System.out.println("[success]::鍔犺浇MySql鏁版嵁搴揇LL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇MySql鏁版嵁搴揇LL鎿嶄綔鏈嶅姟澶辫触");
+		}
+	}
+
+	@Override
+	public boolean support(String url) {
+		return "oracle.jdbc.OracleDiver".equals(url);
+	}
+
+	@Override
+	protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
+		return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
+	}
+
+	/**
+	 * 鎸夋暟鎹簱瀛楁绫诲瀷鍒椾妇鎵�鏈夌殑VCI瀛楁绫诲瀷
+	 *
+	 * @param columnStr 鏁版嵁搴撳瓧娈电被鍨�
+	 * @return VCI瀛楁绫诲瀷
+	 */
+	@Override
+	public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr) {
+		return listFieldInMapByColumnStr(columnStr,FIELD_MAP);
+	}
+
+	@Override
+	public VciFieldTypeEnum getFieldTypeByColumnStr(String columnStr, Integer length) {
+		return getFieldTypeBeColumnStrInMap(columnStr,length,FIELD_MAP);
+	}
+
+}
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..4629964
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java
@@ -0,0 +1,52 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
+import com.vci.ubcs.ddl.mapper.DllMapper;
+import com.vci.ubcs.ddl.mapper.DllOracleMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import org.apache.commons.collections4.BidiMap;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Component
+public class DllOracleMapperProcessor extends DllMapperProcessor {
+
+	private static DllMapper mapper = VciSpringUtil.getBean(DllOracleMapper.class);
+
+	private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
+
+	public DllOracleMapperProcessor() {
+		super(mapper);
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇Oracle鏁版嵁搴揇LL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇Oracle鏁版嵁搴揇LL鎿嶄綔鏈嶅姟澶辫触");
+		}
+	}
+
+
+	@Override
+	protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
+		return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
+	}
+
+	@Override
+	public VciFieldTypeEnum getFieldTypeByColumnStr(String columnStr, Integer length) {
+		return getFieldTypeBeColumnStrInMap(columnStr,length,FIELD_MAP);
+	}
+
+	@Override
+	public boolean support(String url) {
+		return "oracle.jdbc.OracleDiver".equals(url);
+	}
+}
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..539f540
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java
@@ -0,0 +1,73 @@
+package com.vci.ubcs.ddl.processor.dll;
+
+import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
+import com.vci.ubcs.ddl.mapper.DllMapper;
+import com.vci.ubcs.ddl.mapper.DllSqlLiteMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import org.apache.commons.collections4.BidiMap;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/24
+ */
+@Component
+public class DllSqlLiteMapperProcessor extends DllMapperProcessor{
+	private static DllMapper mapper = VciSpringUtil.getBean(DllSqlLiteMapper.class);
+
+	private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
+
+	static {
+		 // 闇�瑕侀噸鏂版槧灏勭殑瀛楁绫诲瀷鍦ㄨ繖閲屽啓
+		FIELD_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("NUMERIC",26,8,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("INT",22,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("INT",22,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR",5,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("varchar(max)",100,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
+	}
+	public DllSqlLiteMapperProcessor() {
+		super(mapper);
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇SqlLite鏁版嵁搴揇LL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇SqlList鏁版嵁搴揇LL鎿嶄綔鏈嶅姟澶辫触");
+		}
+	}
+
+	@Override
+	public boolean support(String url) {
+		return "org.sqlite.JDBC".equals(url);
+	}
+
+	@Override
+	protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
+		return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
+	}
+
+	/**
+	 * 鎸夋暟鎹簱瀛楁绫诲瀷鍒椾妇鎵�鏈夌殑VCI瀛楁绫诲瀷
+	 *
+	 * @param columnStr 鏁版嵁搴撳瓧娈电被鍨�
+	 * @return VCI瀛楁绫诲瀷
+	 */
+	@Override
+	public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr) {
+		return listFieldInMapByColumnStr(columnStr,FIELD_MAP);
+	}
+
+	@Override
+	public VciFieldTypeEnum getFieldTypeByColumnStr(String columnStr, Integer length) {
+		return getFieldTypeBeColumnStrInMap(columnStr,length,FIELD_MAP);
+	}
+}
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..ca66ffc
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
@@ -0,0 +1,249 @@
+package com.vci.ubcs.ddl.service;
+
+import com.vci.ubcs.ddl.bo.DdlTableBO;
+import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
+import com.vci.ubcs.omd.dto.BtmTypeDTO;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
+import com.vci.ubcs.omd.vo.LinkTypeVO;
+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;
+
+	/**
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 * @param attributeVOList 灞炴�х殑绔嬬
+	 * @return sql璇彞
+	 */
+	String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList);
+
+	/**
+	 * 鎵归噺灏嗕笟鍔$被鍨嬪垱寤烘暟鎹簱琛�
+	 * @param ids 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呭垱寤鸿〃鍑虹幇浜嗛敊璇殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	void createDbTablesById(String ids) throws VciBaseException;
+
+	/**
+	 * 淇敼涓氬姟绫诲瀷涓殑灞炴�у瓧娈电殑闀垮害锛屾敞鎰忓湪鎵ц杩欎釜鏂规硶鏃跺氨浼氬皢浠ュ墠鐨勪簨鍔℃彁浜ゃ��
+	 * @param modifyLengthAttrDOList 闇�瑕佷慨鏀圭殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	void changeColumnForBtm(List<BtmTypeAttributeVO> modifyLengthAttrDOList) throws VciBaseException;
+
+	/**
+	 * 淇敼閾炬帴绫诲瀷涓殑灞炴�у瓧娈电殑闀垮害锛屾敞鎰忓湪鎵ц杩欎釜鏂规硶鏃跺氨浼氬皢浠ュ墠鐨勪簨鍔℃彁浜ゃ��
+	 * @param modifyLengthAttrDOListForLinkType 闇�瑕佷慨鏀圭殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	void changeColumnForLink(List<LinkTypeAttributeVO> modifyLengthAttrDOListForLinkType) throws VciBaseException;
+
+	/**
+	 * 娣诲姞灞炴�у瓧娈靛埌涓氬姟绫诲瀷涓紝娉ㄦ剰鍦ㄦ墽琛岃繖涓柟娉曟椂灏变細灏嗕互鍓嶇殑浜嬪姟鎻愪氦銆�
+	 * @param addAttrDOList 闇�瑕佹坊鍔犵殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	void addColumn2TableForBtm(List<BtmTypeAttributeVO> addAttrDOList) throws VciBaseException;
+
+	/**
+	 * 娣诲姞灞炴�у瓧娈靛埌閾炬帴绫诲瀷涓紝娉ㄦ剰鍦ㄦ墽琛岃繖涓柟娉曟椂灏变細灏嗕互鍓嶇殑浜嬪姟鎻愪氦銆�
+	 * @param addAttrDOListForLinkType 闇�瑕佹坊鍔犵殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	void addColumn2TableForLink(List<LinkTypeAttributeVO> 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<ModifyAttributeInfo> checkDifferent(List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException;
+
+	/**
+	 * 娓呯悊涓氬姟绫诲瀷涓拰鏁版嵁搴撻噷涓嶄竴鏍风殑
+	 * @param differentAttributeList 涓嶅悓鐨勫睘鎬х殑鍒楄〃
+	 * @param btmTypeVOList 涓氬姟绫诲瀷鏁版嵁
+	 * @param linkTypeVOList 閾炬帴绫诲瀷鏁版嵁
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮墽琛屽嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	void reflexDifferent(List<ModifyAttributeInfo> differentAttributeList,List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) 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 ddlDTO 涓氬姟绫诲瀷浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	R submit(BtmAndLinkTypeDdlDTO ddlDTO);
+
+	/**
+	 * 鎸夎〃鍚嶈幏鍙栬〃淇℃伅
+	 * @param tableName 琛ㄥ悕
+	 * @return 琛ㄤ俊鎭�
+	 */
+	DdlTableBO getTableColumnByTableName(String tableName);
+
+	/**
+	 * 鑾峰彇鎵�鏈夎〃淇℃伅
+	 * @return 琛ㄤ俊鎭泦鍚�
+	 */
+	List<BtmTypeVO> 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..f493a6b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
@@ -0,0 +1,1132 @@
+package com.vci.ubcs.ddl.service.impl;
+
+
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.alibaba.nacos.shaded.com.google.protobuf.ServiceException;
+import com.vci.ubcs.ddl.bo.DdlTableBO;
+import com.vci.ubcs.ddl.bo.DdlTableInDataBaseBO;
+import com.vci.ubcs.ddl.enums.BusinessTypeEnum;
+import com.vci.ubcs.ddl.enums.ModifyTableTaskEnum;
+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.DdlPropertise;
+import com.vci.ubcs.ddl.service.IDdlService;
+import com.vci.ubcs.omd.cache.BtmTypeCache;
+import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
+import com.vci.ubcs.omd.constant.BtmTypeLcStatusConstant;
+import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import com.vci.ubcs.omd.vo.*;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+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.springblade.core.tool.utils.StringPool;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.validation.constraints.NotNull;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+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 static final String YES = "Y";
+
+	private static final String NO = "N";
+
+	private final Map<String, BtmTypeVO> idBtmMap = new ConcurrentHashMap<>();
+
+	private final Map<String, LinkTypeVO> idLinkMap = new ConcurrentHashMap<>();
+
+	private void putBtm(@NotNull BtmTypeVO... voList) throws ServiceException {
+		String collect = Arrays.stream(voList).map(BtmTypeVO::getId).filter(idBtmMap::containsKey).collect(Collectors.joining(","));
+		if (StringUtils.isBlank(collect)) {
+			Arrays.stream(voList).forEach(vo -> {
+				idBtmMap.put(vo.getId(), vo);
+			});
+		} else {
+			throw new ServiceException("涓氬姟绫诲瀷:[" + collect + "]姝e湪琚叾浠栫敤鎴锋搷浣�");
+		}
+	}
+
+	private void putLink(@NotNull LinkTypeVO... voList) throws ServiceException {
+		String collect = Arrays.stream(voList).map(LinkTypeVO::getId).filter(idLinkMap::containsKey).collect(Collectors.joining(","));
+		if (StringUtils.isBlank(collect)) {
+			Arrays.stream(voList).forEach(vo -> {
+				idLinkMap.put(vo.getId(), vo);
+			});
+		} else {
+			throw new ServiceException("閾炬帴绫诲瀷:[" + collect + "]姝e湪琚叾浠栫敤鎴锋搷浣�");
+		}
+	}
+
+	private void removeBtm(@NotNull BtmTypeVO... btmTypeVO) throws ServiceException {
+		if (Arrays.stream(btmTypeVO).allMatch(s -> idBtmMap.containsKey(s.getId()))) {
+			for (BtmTypeVO vo : btmTypeVO) {
+				idBtmMap.remove(vo.getId());
+			}
+		} else {
+			throw new ServiceException("瑙i攣瀵硅薄涓嶅瓨鍦�");
+		}
+	}
+
+	private void removeLink(@NotNull LinkTypeVO... linkTypeVO) throws ServiceException {
+		if (Arrays.stream(linkTypeVO).allMatch(s -> idLinkMap.containsKey(s.getId()))) {
+			for (LinkTypeVO vo : linkTypeVO) {
+				idLinkMap.remove(vo.getId());
+			}
+		} else {
+			throw new ServiceException("瑙i攣瀵硅薄涓嶅瓨鍦�");
+		}
+	}
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鐨勬暟鎹簱琛ㄤ腑鏄惁鏈夋暟鎹�
+	 *
+	 * @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, "涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑涓婚敭");
+		BtmTypeVO btmType = BtmTypeCache.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<BtmTypeVO> btmTypeList = BtmTypeCache.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.alertNotNull("涓氬姟绫诲瀷/閾炬帴绫诲瀷鐨勪富閿泦鍚�", oidCollection);
+		List<BtmTypeVO> btmTypeVOList = BtmTypeCache.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(BtmTypeVO 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 = getCreateSqlByAttributeForBtm(btmTypeVO.getAttributes());
+				dllMapper.createTableBySql(tableName, attributeSql);
+				if (StringUtils.isNotBlank(btmTypeVO.getName())) {
+					dllMapper.commentTable(tableName, btmTypeVO.getName());
+				}
+				btmTypeVO.getAttributes().forEach(s -> {
+					dllMapper.commentColumnTable(tableName, s.getId(), s.getName());
+				});
+			}
+		}
+	}
+
+	/**
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 *
+	 * @param attributeVOList 灞炴�х殑绔嬬
+	 * @return sql璇彞
+	 */
+	@Override
+	public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) {
+		StringBuilder sb = new StringBuilder();
+		attributeVOList.forEach(a -> {
+			sb.append(a.getId()).append(StringPool.SPACE);
+			VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
+			sb.append(dllMapper.getColumnTypeSql(fieldTypeEnum, a));
+		});
+		return sb.substring(0, sb.lastIndexOf(","));
+	}
+
+	/**
+	 * 鎵归噺灏嗕笟鍔$被鍨嬪垱寤烘暟鎹簱琛�
+	 *
+	 * @param ids 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呭垱寤鸿〃鍑虹幇浜嗛敊璇殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void createDbTablesById(String ids) throws VciBaseException {
+		VciBaseUtil.alertNotNull(ids, "涓氬姟绫诲瀷/閾炬帴绫诲瀷鐨勮嫳鏂囬泦鍚�");
+		List<BtmTypeVO> btmTypeVOList = BtmTypeCache.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<BtmTypeAttributeVO> modifyLengthAttrVOList) throws VciBaseException {
+		VciBaseUtil.alertNotNull("瑕佷慨鏀归暱搴︾殑灞炴�ч泦", modifyLengthAttrVOList);
+		Map<String, List<BtmTypeAttributeVO>> btmTypeHasAttributeVOMap = modifyLengthAttrVOList.stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
+		btmTypeHasAttributeVOMap.forEach((k, v) -> {
+			BtmTypeVO btmTypeVO = BtmTypeCache.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<BtmTypeAttributeVO> attributeVOList) {
+		String attributeSql = 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<BtmTypeAttributeVO> attributeVOList) {
+		if (StringUtils.isNotBlank(tableName) && !CollectionUtils.isEmpty(attributeVOList)) {
+			attributeVOList.forEach(s -> {
+				ddlMapper.commentColumnTable(tableName, s.getId(), s.getName());
+			});
+		}
+	}
+
+	/**
+	 * 淇敼閾炬帴绫诲瀷涓殑灞炴�у瓧娈电殑闀垮害锛屾敞鎰忓湪鎵ц杩欎釜鏂规硶鏃跺氨浼氬皢浠ュ墠鐨勪簨鍔℃彁浜ゃ��
+	 *
+	 * @param modifyLengthAttrDOListForLinkType 闇�瑕佷慨鏀圭殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void changeColumnForLink(List<LinkTypeAttributeVO> modifyLengthAttrDOListForLinkType) throws VciBaseException {
+
+	}
+
+	/**
+	 * 娣诲姞灞炴�у瓧娈靛埌涓氬姟绫诲瀷涓紝娉ㄦ剰鍦ㄦ墽琛岃繖涓柟娉曟椂灏变細灏嗕互鍓嶇殑浜嬪姟鎻愪氦銆�
+	 *
+	 * @param addAttrDOList 闇�瑕佹坊鍔犵殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void addColumn2TableForBtm(List<BtmTypeAttributeVO> addAttrDOList) throws VciBaseException {
+		VciBaseUtil.alertNotNull("瑕佹坊鍔犲埌鏁版嵁搴撹〃涓殑灞炴�ч泦", addAttrDOList);
+		Map<String, List<BtmTypeAttributeVO>> btmTypeHasAttributeMap = addAttrDOList.stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
+		btmTypeHasAttributeMap.forEach((k, v) -> {
+			BtmTypeVO btmTypeVO = BtmTypeCache.getDetail(k);
+			if (btmTypeVO == null || StringUtils.isBlank(btmTypeVO.getOid())) {
+				throw new VciBaseException("瑕佷慨鏀瑰睘鎬у垪闀垮害鐨勪笟鍔$被鍨嬩笉瀛樺湪");
+			}
+			if (!isCompatibilityTable(btmTypeVO.getId(), null)) {
+				addColumnForTable(btmTypeVO.getTableName(), v);
+			}
+		});
+	}
+
+	/**
+	 * 娣诲姞瀛楁鍒拌〃鏍间腑
+	 *
+	 * @param tableName       琛ㄦ牸鍚嶇О
+	 * @param attributeVOList 灞炴�х殑鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎵ц鎴栬�呰幏鍙杝ql璇彞鐨勬椂鍊欏嚭鐜伴敊璇細鎶涘嚭寮傚父
+	 */
+	private void addColumnForTable(String tableName, List<BtmTypeAttributeVO> attributeVOList) {
+		String attributeSql = getCreateSqlByAttributeForBtm(attributeVOList);
+		//鍏堝垽鏂〃鏍兼槸鍚﹀瓨鍦�
+		if (!checkTableExistByTableName(tableName)) {
+			BtmTypeAttributeVO attributeVO = attributeVOList.get(0);
+			createDbTables(attributeVO.getPkBtmType());
+		} else {
+			ddlMapper.addColumn2TableBySql(tableName, attributeSql);
+			commentColumnsForTable(tableName, attributeVOList);
+		}
+	}
+
+	/**
+	 * 娣诲姞灞炴�у瓧娈靛埌閾炬帴绫诲瀷涓紝娉ㄦ剰鍦ㄦ墽琛岃繖涓柟娉曟椂灏变細灏嗕互鍓嶇殑浜嬪姟鎻愪氦銆�
+	 *
+	 * @param addAttrDOListForLinkType 闇�瑕佹坊鍔犵殑灞炴�у璞�
+	 * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void addColumn2TableForLink(List<LinkTypeAttributeVO> addAttrDOListForLinkType) throws VciBaseException {
+		VciBaseUtil.alertNotNull("瑕佹坊鍔犲埌鏁版嵁搴撹〃涓睘鎬ч泦",addAttrDOListForLinkType);
+		Map<String, List<LinkTypeAttributeVO>> linkTypeHasAttributeVOMap = addAttrDOListForLinkType.stream().collect(Collectors.groupingBy(LinkTypeAttributeVO::getPkLinkType));
+		linkTypeHasAttributeVOMap.forEach((k,v) -> {
+
+		});
+	}
+
+	/**
+	 * 鍒ゆ柇琛ㄤ腑鏄惁鏈夋暟鎹�
+	 *
+	 * @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<ModifyAttributeInfo> checkDifferent(List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException {
+		if (CollectionUtils.isEmpty(btmTypeVOList) && CollectionUtils.isEmpty(linkTypeVOList)) {
+			throw new VciBaseException("瑕佹鏌ョ殑涓氬姟绫诲瀷鍜岄摼鎺ョ被鍨嬩负绌�");
+		}
+		List<ModifyAttributeInfo> modifyAttributeInfoList = new ArrayList<>();
+		if (!CollectionUtils.isEmpty(btmTypeVOList)) {
+			modifyAttributeInfoList.addAll(checkBtmType(btmTypeVOList));
+		}
+		if (!CollectionUtils.isEmpty(linkTypeVOList)) {
+			modifyAttributeInfoList.addAll(checkLinkType(linkTypeVOList));
+		}
+		if (CollectionUtils.isEmpty(modifyAttributeInfoList)) {
+			reflexDifferent(modifyAttributeInfoList, btmTypeVOList, linkTypeVOList);
+		}
+		return modifyAttributeInfoList;
+	}
+
+	/**
+	 * 妫�鏌ヤ笟鍔$被鍨�
+	 *
+	 * @param btmTypeVOList 涓氬姟绫诲瀷
+	 * @return 妫�鏌ョ粨鏋�
+	 */
+	private List<ModifyAttributeInfo> checkBtmType(List<BtmTypeVO> btmTypeVOList) {
+		List<ModifyAttributeInfo> modifyAttributeInfoDOList = new ArrayList<>();
+		btmTypeVOList.stream().filter(s -> !isCompatibilityTable(s.getId(),null)).forEach(btm -> {
+			ModifyAttributeInfo modifyAttributeInfo = new ModifyAttributeInfo();
+			modifyAttributeInfo.setId(btm.getId());
+			modifyAttributeInfo.setName(btm.getName());
+			modifyAttributeInfo.setTableName(btm.getTableName());
+			modifyAttributeInfo.setBusinessType(BusinessTypeEnum.BTM.getValue());
+			// 1. 瑙嗗浘鍜屾柊寤虹殑锛岀洿鎺ュ垱寤猴紝璁板綍鍒涘缓鍘嗗彶
+			if (btm.isViewFlag() || !checkTableExistByTableName(btm.getTableName())){
+				modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CREATE.getValue());
+				modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue());
+			}else {
+				VciBaseUtil.alertNotNull(btm.getAttributes(),"涓氬姟绫诲瀷" + btm.getId() + "鐨勫睘鎬�");
+				List<DdlTableInDataBaseBO> columnDataInTable = selectTableColumnInfo(btm.getTableName());
+				if (CollectionUtils.isEmpty(columnDataInTable)){
+					modifyAttributeInfo.setAddAttributes(btm.getAttributes().stream().map(s -> s.getId().toLowerCase().trim()).collect(Collectors.joining(",")));
+					modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.EDIT.getValue());
+					modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue());
+				}else {
+					// 2. 瀛樺湪鐨勬墠鍒ゆ柇锛屽垎鏂板灞炴�с�佸睘鎬ф洿鏀广�佸睘鎬у垹闄ゅ垎鍒搷浣�
+					// 3. 灞炴�ф搷浣滀腑鐗瑰埆鍒ゆ柇[鏄惁鎺у埗鐗堟湰][鏄惁鎺у埗瀵嗙骇][鏄惁鎺у埗鐢熷懡鍛ㄦ湡]鏉ユ坊鍔犲搴斿睘鎬�
+					Map<String, DdlTableInDataBaseBO> tableColumMap = columnDataInTable.stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k));
+					Map<String, BtmTypeAttributeVO> attributeMap = btm.getAttributes().stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k));
+					List<String> addList = new ArrayList<>();
+					List<String> editList = new ArrayList<>();
+					List<String> deleteList = new ArrayList<>();
+					List<String> beforeList = new ArrayList<>();
+					attributeMap.forEach((k,v) -> {
+						String attributeLowId = k.toLowerCase();
+						if (!checkIsDefaultColumn(attributeLowId)) {
+							if (tableColumMap.containsKey(k)) {
+								//璇存槑浠ュ墠涔熸湁锛岄偅灏辩湅鏄惁闇�瑕佷慨鏀�
+								DdlTableInDataBaseBO columnInDB = tableColumMap.get(k);
+								if (columnInDB.getAttributeLength() == null) {
+									columnInDB.setAttributeLength(0);
+								}
+								boolean needEdit = false;
+								if (!v.getName().equalsIgnoreCase(columnInDB.getName())) {
+									//璇存槑闇�瑕佷慨鏀�
+									needEdit = true;
+								}
+								if (needEdit || checkNeedEditAttr(v, columnInDB)) {
+									editList.add(v.getId());
+									beforeList.add(columnInDB.getId() + StringPool.SPACE + columnInDB.getAttrDataType() + "(" + columnInDB.getAttributeLength() + ")" + StringPool.SPACE + columnInDB.getNullableFlag()
+										+ StringPool.SPACE + columnInDB.getPrecisionLength() + StringPool.SPACE + columnInDB.getScaleLength() + StringPool.SPACE + columnInDB.getName());
+								}
+							} else {
+								addList.add(v.getId());
+							}
+						} else {
+							//閽堝榛樿灞炴�э紝濡傛灉浠ュ墠娌℃湁锛岀幇鍦ㄦ湁鍙互娣诲姞锛屽鏋滀互鍓�
+							if (!tableColumMap.containsKey(k)) {
+								boolean needAddNewField = false;
+								if (!BtmTypeLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btm.getLifeCycleId()) && BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP.containsKey(attributeLowId)) {
+									needAddNewField = true;
+								}
+								if (StringUtils.isNotBlank(btm.getRevisionRuleId()) && BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP.containsKey(attributeLowId)) {
+									needAddNewField = true;
+								}
+								if (btm.isSecretFlag() && BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP.containsKey(attributeLowId)) {
+									needAddNewField = true;
+								}
+								if (needAddNewField) {
+									addList.add(v.getId());
+								}
+							}
+						}
+					});
+					tableColumMap.forEach((k, v) -> {
+						if (!attributeMap.containsKey(k)) {
+							deleteList.add(k);
+						}
+					});
+					modifyAttributeInfo.setOrderModifyUserName(AuthUtil.getUserAccount());
+					modifyAttributeInfo.setOrderModifyDate(new Date());
+					modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue());
+					modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue());
+					modifyAttributeInfo.setAddAttributes(String.join(",", addList));
+					modifyAttributeInfo.setModifyAttributes(String.join(",", editList));
+					modifyAttributeInfo.setDeleteAttributes(String.join(",", deleteList));
+					modifyAttributeInfo.setBeforeModifyAttributes(String.join(",", beforeList));
+				}
+			}
+		});
+		return modifyAttributeInfoDOList;
+	}
+
+	private boolean checkIsDefaultColumn(String attributeLowId) {
+		return ((BtmTypeFieldConstant.BASIC_FIELD_MAP.containsKey(attributeLowId)
+			&& !VciBaseUtil.inArray(new String[]{"id", "name", "description"}, attributeLowId))
+			|| BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.containsKey(attributeLowId)
+			|| BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP.containsKey(attributeLowId)
+			|| BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP.containsKey(attributeLowId)
+			|| BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP.containsKey(attributeLowId));
+	}
+
+	/**
+	 * 妫�鏌ラ摼鎺ョ被鍨�
+	 *
+	 * @param linkTypeVOList 閾炬帴绫诲瀷
+	 * @return 妫�鏌ョ粨鏋�
+	 */
+	private List<ModifyAttributeInfo> checkLinkType(List<LinkTypeVO> linkTypeVOList) {
+		List<ModifyAttributeInfo> modifyAttributeInfoDOList = new ArrayList<>();
+		linkTypeVOList.stream().filter(s -> !isCompatibilityTable(null,s.getId())).forEach(link -> {
+				ModifyAttributeInfo modifyAttributeInfo = new ModifyAttributeInfo();
+				modifyAttributeInfo.setId(link.getId());
+				modifyAttributeInfo.setName(link.getName());
+				modifyAttributeInfo.setTableName(link.getTableName());
+				modifyAttributeInfo.setBusinessType(BusinessTypeEnum.LINK.getValue());
+				// 1. 瑙嗗浘鍜屾柊寤虹殑锛岀洿鎺ュ垱寤猴紝璁板綍鍒涘缓鍘嗗彶
+				if (!checkTableExistByTableName(link.getTableName())){
+					modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CREATE.getValue());
+					modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue());
+				}else {
+					VciBaseUtil.alertNotNull(link.getAttributes(), "閾炬帴绫诲瀷" + link.getId() + "鐨勫睘鎬�");
+					List<DdlTableInDataBaseBO> columnDataInTable = selectTableColumnInfo(link.getTableName());
+					if (CollectionUtils.isEmpty(columnDataInTable)) {
+						modifyAttributeInfo.setAddAttributes(link.getAttributes().stream().map(s -> s.getId().toLowerCase().trim()).collect(Collectors.joining(",")));
+						modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.EDIT.getValue());
+						modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue());
+					} else {
+						// 2. 瀛樺湪鐨勬墠鍒ゆ柇锛屽垎鏂板灞炴�с�佸睘鎬ф洿鏀广�佸睘鎬у垹闄ゅ垎鍒搷浣�
+						// 3. 灞炴�ф搷浣滀腑鐗瑰埆鍒ゆ柇[鏄惁鎺у埗鐗堟湰][鏄惁鎺у埗瀵嗙骇][鏄惁鎺у埗鐢熷懡鍛ㄦ湡]鏉ユ坊鍔犲搴斿睘鎬�
+						Map<String, DdlTableInDataBaseBO> tableColumMap = columnDataInTable.stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k));
+						Map<String, LinkTypeAttributeVO> attributeMap = link.getAttributes().stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k));
+						List<String> addList = new ArrayList<>();
+						List<String> editList = new ArrayList<>();
+						List<String> deleteList = new ArrayList<>();
+						List<String> beforeList = new ArrayList<>();
+						attributeMap.forEach((k, v) -> {
+							String attributeLowId = k.toLowerCase();
+							if (!(BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.containsKey(attributeLowId))) {
+								if (tableColumMap.containsKey(k)) {
+									//璇存槑浠ュ墠涔熸湁锛岄偅灏辩湅鏄惁闇�瑕佷慨鏀�
+									DdlTableInDataBaseBO columnInDB = tableColumMap.get(k);
+									if (columnInDB.getAttributeLength() == null) {
+										columnInDB.setAttributeLength(0);
+									}
+									boolean needEdit = false;
+									if (!v.getName().equalsIgnoreCase(columnInDB.getName())) {
+										//璇存槑闇�瑕佷慨鏀�
+										needEdit = true;
+									}
+									BtmTypeAttributeVO btmTypeAttributeVO = new BtmTypeAttributeVO();
+									BeanUtil.copy(v, btmTypeAttributeVO);
+									if (needEdit || checkNeedEditAttr(btmTypeAttributeVO, columnInDB)) {
+										editList.add(v.getId());
+										beforeList.add(columnInDB.getId() + StringPool.SPACE + columnInDB.getAttrDataType() + "(" + columnInDB.getAttributeLength() + ")" + StringPool.SPACE + columnInDB.getNullableFlag()
+											+ StringPool.SPACE + columnInDB.getPrecisionLength() + StringPool.SPACE + columnInDB.getScaleLength() + StringPool.SPACE + columnInDB.getName());
+									}
+								} else {
+									addList.add(v.getId());
+								}
+							} else {
+								//閽堝榛樿灞炴�э紝濡傛灉浠ュ墠娌℃湁锛岀幇鍦ㄦ湁鍙互娣诲姞锛屽鏋滀互鍓�
+								if (!tableColumMap.containsKey(k)) {
+									boolean needAddNewField = false;
+									if (BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.containsKey(attributeLowId)) {
+										//鏄摼鎺ョ被鍨嬬殑灞炴�э紝浠ュ墠娌℃湁灏辨坊鍔犱笂
+										needAddNewField = true;
+									}
+									if (needAddNewField) {
+										addList.add(v.getId());
+									}
+								}
+							}
+						});
+						tableColumMap.forEach((k, v) -> {
+							if (!attributeMap.containsKey(k)) {
+								deleteList.add(k);
+							}
+						});
+						modifyAttributeInfo.setOrderModifyUserName(AuthUtil.getUserAccount());
+						modifyAttributeInfo.setOrderModifyDate(new Date());
+						modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue());
+						modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue());
+						modifyAttributeInfo.setAddAttributes(String.join(",", addList));
+						modifyAttributeInfo.setModifyAttributes(String.join(",", editList));
+						modifyAttributeInfo.setDeleteAttributes(String.join(",", deleteList));
+						modifyAttributeInfo.setBeforeModifyAttributes(String.join(",", beforeList));
+					}
+
+				}
+		});
+		return modifyAttributeInfoDOList;
+	}
+
+	/**
+	 * 鍒ゆ柇鏄惁闇�瑕佷慨鏀瑰睘鎬�
+	 *
+	 * @param btmTypeAttributeVO 灞炴�х殑鏄剧ず瀵硅薄
+	 * @param tableInDB          鏁版嵁搴撹〃閲岀殑瀵硅薄
+	 * @return true琛ㄧず闇�瑕佷慨鏀癸紝false琛ㄧず涓嶄慨鏀�
+	 */
+	private boolean checkNeedEditAttr(BtmTypeAttributeVO btmTypeAttributeVO, DdlTableInDataBaseBO tableInDB) {
+		if (tableInDB.getAttributeLength() == null) {
+			tableInDB.setAttributeLength(0);
+		}
+		if (tableInDB.getPrecisionLength() == null) {
+			tableInDB.setPrecisionLength(20);
+		}
+		if (tableInDB.getScaleLength() == null) {
+			tableInDB.setScaleLength(0);
+		}
+		String nullInDb = "";
+		if (YES.equalsIgnoreCase(tableInDB.getNullableFlag())) {
+			nullInDb = BooleanEnum.TRUE.getValue();
+		} else if (NO.equalsIgnoreCase(tableInDB.getNullableFlag())) {
+			nullInDb = BooleanEnum.FASLE.getValue();
+		}
+		if (!(String.valueOf(btmTypeAttributeVO.isNullableFlag()).equalsIgnoreCase(nullInDb))) {
+			return true;
+		}
+		if (StringUtils.isNotBlank(btmTypeAttributeVO.getDefaultValue())) {
+			return true;
+		}
+
+
+		List<VciFieldTypeEnum> fieldTypes = dllMapper.listFieldByColumnStr(tableInDB.getAttrDataType());
+		if (CollectionUtils.isEmpty(fieldTypes)) {
+			throw new VciBaseException("娌℃湁鎵惧埌瀵瑰簲鐨勫瓧娈电被鍨�");
+		}
+		Set<String> names = fieldTypes.stream().map(Enum::name).collect(Collectors.toSet());
+		String attributeDataType = btmTypeAttributeVO.getAttrDataType();
+		if (names.size() > 1) {
+			return !names.contains(attributeDataType);
+		} else {
+			VciFieldTypeEnum fieldType = fieldTypes.get(0);
+			if (attributeDataType.equalsIgnoreCase(fieldType.name())) {
+				switch (fieldType) {
+					case VTString:
+						if (btmTypeAttributeVO.getAttributeLength().intValue() != tableInDB.getAttributeLength().intValue()) {
+							return true;
+						}
+						break;
+					case VTDouble:
+						//涓嶈秴杩�128
+						if (btmTypeAttributeVO.getPrecisionLength().intValue() != tableInDB.getPrecisionLength().intValue()) {
+							return true;
+						}
+						if (btmTypeAttributeVO.getScaleLength().intValue() != tableInDB.getScaleLength().intValue()) {
+							return true;
+						}
+						break;
+					default:
+						break;
+				}
+			}
+			return false;
+		}
+	}
+
+	/**
+	 * 娓呯悊涓氬姟绫诲瀷涓拰鏁版嵁搴撻噷涓嶄竴鏍风殑
+	 *
+	 * @param differentAttributeList 涓嶅悓鐨勫睘鎬х殑鍒楄〃
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮墽琛屽嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public void reflexDifferent(List<ModifyAttributeInfo> differentAttributeList, List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException {
+		VciBaseUtil.alertNotNull(differentAttributeList, "瑕佹竻鐞嗙殑鏁版嵁搴撶殑淇℃伅涓虹┖");
+		Map<String, BtmTypeVO> idBtmTypeMap = btmTypeVOList.stream().collect(Collectors.toMap(BtmTypeVO::getId, t -> t, (o1, o2) -> o1));
+		Map<String, LinkTypeVO> idLinkTypeMap = linkTypeVOList.stream().collect(Collectors.toMap(LinkTypeVO::getId, t -> t, (o1, o2) -> o1));
+		differentAttributeList.forEach(s -> {
+//			BtmTypeVO btmType = idBtmTypeMap.get(id);
+			if (ModifyTableTaskEnum.CREATE.getValue().equalsIgnoreCase(s.getTaskName())) {
+				//鐩存帴鍒涘缓琛ㄦ牸
+//				createDbTableForBtm(btmType);
+				createDbTablesById(s.getId());
+			} else {
+				String addAttributes = s.getAddAttributes();
+				if (StringUtils.isNotBlank(s.getModifyAttributes()) || StringUtils.isNotBlank(s.getDeleteAttributes())) {
+					//闇�瑕佸幓鍒ゆ柇鏄惁鍙互鏇存敼
+					if (checkTableHasDataByTableName(s.getTableName())) {
+						//鏈夋暟鎹殑璇濓紝寰楅渶瑕佸垽鏂睘鎬ф槸鍚﹀彲浠ヤ慨鏀�
+						if (StringUtils.isNotBlank(s.getDeleteAttributes())) {
+							s.setHandleResult("琛ㄦ牸瀛樺湪鏁版嵁锛屼笉鍏佽鍒犻櫎瀛楁");
+							return;
+						}
+						List<DdlTableInDataBaseBO> columnInDbList = selectTableColumnInfo(s.getTableName());
+						Map<String, DdlTableInDataBaseBO> columnInDbMap = new HashMap<>();
+						if (!CollectionUtils.isEmpty(columnInDbList)) {
+							columnInDbMap = columnInDbList.stream().collect(Collectors.toMap(t -> t.getId().toLowerCase(), k -> k));
+						}
+						List<BtmTypeAttributeVO> attributeVOList = idBtmTypeMap.getOrDefault(s.getId(), new BtmTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getAddAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId().toLowerCase(), id))).collect(Collectors.toList());
+						//鏈夊彲鑳戒箣鍓嶅垽鏂殑鏃跺�欐暟鎹簱瀛樺湪锛岃�岀幇鍦ㄤ笉瀛樺湪浜�
+						List<String> unExitInDbIdList = new ArrayList<>();
+						Map<String, DdlTableInDataBaseBO> finalColumnInDbMap = columnInDbMap;
+						List<BtmTypeAttributeVO> needEditAttributeVOList = new ArrayList<>();
+						if (!CollectionUtils.isEmpty(attributeVOList)) {
+							attributeVOList.forEach(t -> {
+								if (finalColumnInDbMap.containsKey(t.getId().toLowerCase().trim())) {
+									needEditAttributeVOList.add(t);
+								} else {
+									unExitInDbIdList.add(t.getId());
+								}
+							});
+						}
+						if (!CollectionUtils.isEmpty(needEditAttributeVOList)) {
+							List<BtmTypeAttributeVO> unModifyAttrVOList = needEditAttributeVOList.stream().filter(t -> !checkNotCanEditAttr(t.getAttrDataType(), finalColumnInDbMap.get(t.getId().trim().toLowerCase()))).collect(Collectors.toList());
+							if (!CollectionUtils.isEmpty(unModifyAttrVOList)) {
+								s.setHandleResult("琛ㄦ牸瀛樺湪鏁版嵁锛�" + unModifyAttrVOList.stream().map(BtmTypeAttributeVO::getId).collect(Collectors.joining(",")) + "杩欎簺瀛楁涓嶈兘淇敼");
+								return;
+							}
+							needEditAttributeVOList.stream().forEach(t -> {
+								String attributeLowerId = t.getId().trim().toLowerCase();
+								DdlTableInDataBaseBO columInDb = finalColumnInDbMap.get(attributeLowerId);
+								if (!t.getName().equalsIgnoreCase(columInDb.getName())) {
+									ddlMapper.commentColumnTable(s.getTableName(), t.getId(), t.getName());
+								}
+								if (columInDb.getAttributeLength() != null && t.getAttributeLength() != null
+									&& t.getAttributeLength() < columInDb.getAttributeLength()) {
+									t.setAttributeLength(columInDb.getAttributeLength());
+								}
+								List<BtmTypeAttributeVO> attributeVOS = new ArrayList<>();
+
+								boolean nowNeedNull = false;
+								if (!YES.equalsIgnoreCase(columInDb.getNullableFlag()) && !t.isNullableFlag()) {
+									//璇存槑浠ュ墠鏄笉鑳戒负绌虹殑,浣嗘槸浠ュ墠涔熸槸涓嶄负绌虹殑锛屼慨鏀逛細鎶ラ敊锛屾墍浠ヨ繖涓皟鏁翠竴涓�
+									t.setNullableFlag(true);
+								} else if (!YES.equalsIgnoreCase(columInDb.getNullableFlag()) && t.isNullableFlag()) {
+									//浠ュ墠涓嶄负绌猴紝鐜板湪涓虹┖
+									nowNeedNull = true;
+								}
+								attributeVOS.add(t);
+								String attributeSql = getCreateSqlByAttributeForBtm(attributeVOS);
+								if (nowNeedNull) {
+									attributeSql += StringPool.SPACE + "null" + StringPool.SPACE;
+								}
+								ddlMapper.modifyTableBySql(s.getTableName(), attributeSql);
+							});
+						}
+						if (!CollectionUtils.isEmpty(unExitInDbIdList)) {
+							if (StringUtils.isBlank(addAttributes)) {
+								addAttributes = String.join(",", unExitInDbIdList);
+							} else {
+								addAttributes += "," + String.join(",", unExitInDbIdList);
+								;
+							}
+						}
+					} else {
+						//璇存槑娌℃湁鏁版嵁锛岄偅鍙互鎶婁慨鏀圭殑鍒楀拰鍒犻櫎鐨勫垪閮藉垹闄わ紝鐒跺悗閲嶆柊娣诲姞
+						if (StringUtils.isNotBlank(s.getModifyAttributes())) {
+							List<BtmTypeAttributeVO> attributeVOList = idBtmTypeMap.getOrDefault(s.getId(), new BtmTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getModifyAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId(), id))).collect(Collectors.toList());
+							if (!CollectionUtils.isEmpty(attributeVOList)) {
+								attributeVOList.forEach(t -> {
+									List<BtmTypeAttributeVO> attributeVOS = new ArrayList<>();
+									attributeVOS.add(t);
+									dropColumnByName(s.getTableName(), t.getId());
+									addColumnForTable(s.getTableName(), attributeVOS);
+									ddlMapper.commentColumnTable(s.getTableName(), t.getId(), t.getName());
+								});
+							}
+						}
+						//闇�瑕佸垹闄ょ殑鍒�
+						if (StringUtils.isNotBlank(s.getDeleteAttributes())) {
+							List<String> attributeIdList = VciBaseUtil.str2List(s.getDeleteAttributes());
+							Optional.ofNullable(attributeIdList).orElseGet(ArrayList::new).forEach(t -> {
+								dropColumnByName(s.getTableName(), t);
+							});
+						}
+					}
+				}
+				if (StringUtils.isNotBlank(addAttributes)) {
+					//鍙槸娣诲姞灞炴�у��
+					if (BusinessTypeEnum.LINK.getValue().equalsIgnoreCase(s.getBusinessType())) {
+						List<LinkTypeAttributeVO> attributeVOList = idLinkTypeMap.getOrDefault(s.getId(), new LinkTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getAddAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId(), id))).collect(Collectors.toList());
+						//鏄摼鎺ョ被鍨�
+//						List<LinkTypeAttributeVO> attributeVOList = linkTypeService.listAttributeVOByIdsForLink(s.getId(), VciBaseUtil.str2List(s.getAddAttributes()));
+						addColumn2TableForLink(attributeVOList);
+					} else {
+						List<BtmTypeAttributeVO> attributeVOList = idBtmTypeMap.getOrDefault(s.getId(), new BtmTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getAddAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId(), id))).collect(Collectors.toList());
+						addColumn2TableForBtm(attributeVOList);
+					}
+				}
+			}
+		});
+	}
+
+	private boolean checkNotCanEditAttr(String attributeDataType, DdlTableInDataBaseBO tableInDB) {
+		if (tableInDB != null && StringUtils.isNotBlank(attributeDataType)) {
+			List<VciFieldTypeEnum> fieldTypeEnums = dllMapper.listFieldByColumnStr(tableInDB.getAttrDataType());
+			Set<String> names = fieldTypeEnums.stream().map(Enum::name).collect(Collectors.toSet());
+			if (names.contains(attributeDataType)) {
+				return true;
+			}
+			return true;
+		} else {
+			//鍥犱负鏁版嵁搴撻噷娌℃湁杩欎釜琛ㄦ牸鏃�
+			return true;
+		}
+	}
+
+	/**
+	 * 鑾峰彇鏁版嵁搴撲腑鎵�鏈夌殑琛ㄦ牸
+	 *
+	 * @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.alertNotNull("鏁版嵁搴撹〃鍚嶇О涓嶈兘涓虹┖", 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 ddlDTO 涓氬姟绫诲瀷閾炬帴绫诲瀷浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public R<List<ModifyAttributeInfo>> submit(BtmAndLinkTypeDdlDTO ddlDTO) {
+		try {
+			List<ModifyAttributeInfo> changedList = new ArrayList<>();
+			if (!CollectionUtils.isEmpty(ddlDTO.getBtmTypeList())) {
+				List<BtmTypeVO> btmTypeList = ddlDTO.getBtmTypeList();
+				putBtm(btmTypeList.toArray(new BtmTypeVO[0]));
+				changedList.addAll(checkDifferent(btmTypeList, null));
+				removeBtm(btmTypeList.toArray(new BtmTypeVO[0]));
+			}
+			if (!CollectionUtils.isEmpty(ddlDTO.getLinkTypeList())) {
+				List<LinkTypeVO> linkTypeList = ddlDTO.getLinkTypeList();
+				putLink(linkTypeList.toArray(new LinkTypeVO[0]));
+				changedList.addAll(checkDifferent(null,linkTypeList));
+				removeLink(linkTypeList.toArray(new LinkTypeVO[0]));
+			}
+			R<List<ModifyAttributeInfo>> result = R.success("鏁版嵁搴撴搷浣滄垚鍔�");
+			result.setData(changedList);
+			return result;
+		} catch (ServiceException e) {
+			throw new RuntimeException(e.getMessage());
+		}
+	}
+
+	/**
+	 * 鎸夎〃鍚嶈幏鍙栬〃淇℃伅
+	 *
+	 * @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<BtmTypeVO> getAllTableInfo() {
+		List<String> allTableName = listAllTableName();
+		if (!CollectionUtils.isEmpty(allTableName)) {
+			List<DdlTableBO> allTableBO = listTableInfoInDB(allTableName);
+			List<BtmTypeVO> btmTypeVOList = new ArrayList<>();
+			allTableBO.forEach(table -> {
+				BtmTypeVO vo = new BtmTypeVO();
+				vo.setTableName(table.getTableName());
+				vo.setDescription(table.getTableDesc());
+				List<DdlTableInDataBaseBO> columns = selectTableColumnInfo(table.getTableName());
+				List<BtmTypeAttributeVO> attributes = new ArrayList<>();
+				columns.forEach(col -> {
+					BtmTypeAttributeVO attributeVO = new BtmTypeAttributeVO();
+					attributeVO.setId(col.getId());
+					attributeVO.setName(col.getName());
+					attributeVO.setNullableFlag(col.getNullableFlag());
+					attributeVO.setAttributeLength(col.getAttributeLength());
+					attributeVO.setPrecisionLength(col.getPrecisionLength());
+					attributeVO.setScaleLength(col.getScaleLength());
+					VciFieldTypeEnum field = dllMapper.getFieldTypeByColumnStr(col.getAttrDataType(), col.getAttributeLength());
+					if (field != null){
+						attributeVO.setAttrDataType(field.name());
+					}
+					attributes.add(attributeVO);
+				});
+				vo.setAttributes(attributes);
+				btmTypeVOList.add(vo);
+			});
+			return btmTypeVOList;
+		}
+		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/AttributeController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/AttributeController.java
new file mode 100644
index 0000000..e6200a9
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/AttributeController.java
@@ -0,0 +1,128 @@
+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.AttributeDTO;
+import com.vci.ubcs.omd.entity.Attribute;
+import com.vci.ubcs.omd.service.IAttributeService;
+import com.vci.ubcs.omd.vo.AttributeVO;
+import com.vci.ubcs.omd.wrapper.AttributeWrapper;
+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.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description: 鍏冩暟鎹�(灞炴��)鎺у埗鍣�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/attribute")
+@Api(value = "鍏冩暟鎹帶鍒跺櫒", tags = "鍏冩暟鎹帶鍒跺櫒")
+public class AttributeController extends BladeController {
+	/**
+	 * 鍏冩暟鎹湇鍔�
+	 */
+	private final IAttributeService attributeService;
+
+	/**
+	 * 鏌ョ湅璇︽儏
+	 * @param id 涓婚敭
+	 * @return 鎵ц缁撴灉
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鏌ョ湅璇︽儏", notes = "浼犲叆涓婚敭")
+	public R<AttributeVO> detail(Long id) {
+		return R.data(attributeService.getAttributeDetail(id));
+	}
+
+	/**
+	 * 鍒楄〃
+	 * @param condition 鏌ヨ鏉′欢
+	 * @return 鎵ц缁撴灉
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "key", value = "灞炴�у悕", paramType = "query", dataType = "string"),
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鏌ヨ鍒楄〃", notes = "浼犲叆鏌ヨ")
+	public R<List<AttributeVO>> list(@ApiIgnore @RequestParam Map<String, Object> condition) {
+		return R.data(AttributeWrapper.build().listEntityVO(attributeService.list(Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByAsc(Attribute::getKey))));
+	}
+
+	/**
+	 * 鍒嗛〉鍒楄〃
+	 * @param condition 鏌ヨ鏉′欢
+	 */
+	@GetMapping("/page")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "key", value = "灞炴�у悕", paramType = "query", dataType = "string"),
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鏌ヨ鍒楄〃", notes = "浼犲叆鏌ヨ")
+	public R<IPage<AttributeVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> condition, Query query) {
+		IPage<AttributeVO> pageVO = new Page<>();
+		IPage<Attribute> page = attributeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByAsc(Attribute::getKey));
+		BeanUtil.copy(page,pageVO);
+		pageVO.setRecords( AttributeWrapper.build().listEntityVO(page.getRecords()));
+		return R.data(pageVO);
+	}
+
+
+		/**
+		 * 鏂板鎴栦慨鏀�
+		 * @param dto 鍏冩暟鎹〉闈紶杈撳璞�
+		 * @return 鎵ц缁撴灉
+		 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆鍏冩暟鎹璞�")
+	public R submit(@Valid @RequestBody AttributeDTO dto) {
+		CacheUtil.clear(OmdCacheConstant.ATTR_CACHE);
+		return R.status(attributeService.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.ATTR_CACHE);
+		return R.status(attributeService.removeAttrs(ids));
+	}
+
+	/**
+	 * 鏌ョ湅搴旂敤鑼冨洿
+	 * @param id 涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping("/applyRange")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏌ョ湅搴旂敤鑼冨洿",notes = "浼犲叆涓婚敭")
+	public R applyRange(Long id){
+		return R.data(attributeService.applyRange(id));
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java
new file mode 100644
index 0000000..698a29a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java
@@ -0,0 +1,153 @@
+package com.vci.ubcs.omd.controller;
+
+import com.alibaba.nacos.api.exception.NacosException;
+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.BtmTypeDTO;
+import com.vci.ubcs.omd.entity.BtmType;
+import com.vci.ubcs.omd.repeater.DomainRepeater;
+import com.vci.ubcs.omd.service.IBtmTypeService;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
+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 BtmTypeController extends BladeController {
+
+	/**
+	 * 涓氬姟绫诲瀷鏈嶅姟
+	 */
+	private final IBtmTypeService btmTypeService;
+
+
+	/**
+	 * 鏌ョ湅璇︽儏
+	 *
+	 * @param oid 涓婚敭
+	 * @return 鎵ц缁撴灉
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鏌ョ湅璇︽儏", notes = "浼犲叆涓婚敭")
+	public R<BtmTypeVO> 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<BtmTypeVO>> list(@ApiIgnore @RequestParam Map<String, Object> condition) {
+		return R.data(BtmTypeWrapper.build().listEntityVO(btmTypeService.list(Condition.getQueryWrapper(condition, BtmType.class).lambda().orderByAsc(BtmType::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<BtmTypeVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> condition, Query query) {
+		IPage<BtmTypeVO> pageVO = new Page<>();
+		IPage<BtmType> page = btmTypeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, BtmType.class).lambda().orderByAsc(BtmType::getId));
+		BeanUtil.copy(page, pageVO);
+		pageVO.setRecords(BtmTypeWrapper.build().listEntityVO(page.getRecords()));
+		return R.data(pageVO);
+	}
+
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 *
+	 * @param dto 鍏冩暟鎹〉闈紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 */
+	@PostMapping("/submit/{auto}")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆涓氬姟绫诲瀷瀵硅薄")
+	public R submit(@Valid @RequestBody BtmTypeDTO dto,@PathVariable(value = "auto") boolean auto) {
+		CacheUtil.clear(OmdCacheConstant.BTM_CACHE);
+		return btmTypeService.submit(dto,auto);
+	}
+
+	/**
+	 * 鍒犻櫎
+	 *
+	 * @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));
+	}
+
+	/**
+	 * 鑾峰彇棰嗗煙鍊�
+	 */
+	@GetMapping("/domain")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鑾峰彇棰嗗煙鍊�")
+	public R<List<String>> getDomain(){
+		try {
+			return R.data(DomainRepeater.getDomain());
+		} catch (NacosException e) {
+			return R.fail(e.getErrMsg());
+		}
+	}
+}
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
deleted file mode 100644
index 122ecd5..0000000
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdAttributeController.java
+++ /dev/null
@@ -1,129 +0,0 @@
-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.OmdAttributeDTO;
-import com.vci.ubcs.omd.entity.OmdAttribute;
-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.system.vo.DictVO;
-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.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Description: 鍏冩暟鎹�(灞炴��)鎺у埗鍣�
- *
- * @author LiHang
- * @date 2023/4/3
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/attribute")
-@Api(value = "鍏冩暟鎹帶鍒跺櫒", tags = "鍏冩暟鎹帶鍒跺櫒")
-public class OmdAttributeController extends BladeController {
-	/**
-	 * 鍏冩暟鎹湇鍔�
-	 */
-	private IOmdAttributeService attributeService;
-
-	/**
-	 * 鏌ョ湅璇︽儏
-	 * @param id 涓婚敭
-	 * @return 鎵ц缁撴灉
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "鏌ョ湅璇︽儏", notes = "浼犲叆涓婚敭")
-	public R<OmdAttributeVO> detail(Long id) {
-		return R.data(attributeService.getAttributeDetail(id));
-	}
-
-	/**
-	 * 鍒楄〃
-	 * @param condition 鏌ヨ鏉′欢
-	 * @return 鎵ц缁撴灉
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "key", value = "灞炴�у悕", paramType = "query", dataType = "string"),
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鏌ヨ鍒楄〃", notes = "浼犲叆鏌ヨ")
-	public R<List<OmdAttributeVO>> list(@ApiIgnore @RequestParam Map<String, Object> condition) {
-		return R.data(OmdAttributeWrapper.build().listEntityVO(attributeService.list(Condition.getQueryWrapper(condition, OmdAttribute.class).lambda().orderByAsc(OmdAttribute::getKey))));
-	}
-
-	/**
-	 * 鍒嗛〉鍒楄〃
-	 * @param condition 鏌ヨ鏉′欢
-	 */
-	@GetMapping("/page")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "key", value = "灞炴�у悕", paramType = "query", dataType = "string"),
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鏌ヨ鍒楄〃", notes = "浼犲叆鏌ヨ")
-	public R<IPage<OmdAttributeVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> condition, Query query) {
-		IPage<OmdAttributeVO> pageVO = new Page<>();
-		IPage<OmdAttribute> page = attributeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, OmdAttribute.class).lambda().orderByAsc(OmdAttribute::getKey));
-		BeanUtil.copy(page,pageVO);
-		pageVO.setRecords( OmdAttributeWrapper.build().listEntityVO(page.getRecords()));
-		return R.data(pageVO);
-	}
-
-
-		/**
-		 * 鏂板鎴栦慨鏀�
-		 * @param dto 鍏冩暟鎹〉闈紶杈撳璞�
-		 * @return 鎵ц缁撴灉
-		 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆鍏冩暟鎹璞�")
-	public R submit(@Valid @RequestBody OmdAttributeDTO dto) {
-		CacheUtil.clear(OmdCacheConstant.ATTR_CACHE);
-		return R.status(attributeService.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.ATTR_CACHE);
-		return R.status(attributeService.removeAttrs(ids));
-	}
-
-	/**
-	 * 鏌ョ湅搴旂敤鑼冨洿
-	 * @param id 涓婚敭
-	 * @return 鏌ヨ缁撴灉
-	 */
-	@GetMapping("/applyRange")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏌ョ湅搴旂敤鑼冨洿",notes = "浼犲叆涓婚敭")
-	public R applyRange(Long id){
-		return R.data(attributeService.applyRange(id));
-	}
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/AttributeClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/AttributeClient.java
new file mode 100644
index 0000000..870ccec
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/AttributeClient.java
@@ -0,0 +1,43 @@
+package com.vci.ubcs.omd.feign;
+
+import com.vci.ubcs.omd.entity.Attribute;
+import com.vci.ubcs.omd.service.IAttributeService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description: 鍏冩暟鎹湇鍔eign璋冪敤绫�
+ *
+ * @author LiHang
+ * @date 2023/4/4
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+public class AttributeClient implements IAttributeClient {
+	private final IAttributeService service;
+
+	@Override
+	@GetMapping(GET_BY_ID)
+	public R<Attribute> getById(Long id) {
+		return R.data(service.getById(id));
+	}
+
+	@Override
+	@GetMapping(GET_LIST)
+	public R<List<Attribute>> getList(String key) {
+		Map<String,Object> condition = new HashMap<>();
+		condition.put("key",key);
+		return R.data(service.list(Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByAsc(Attribute::getKey)));
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java
new file mode 100644
index 0000000..9cc00c3
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java
@@ -0,0 +1,117 @@
+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.BtmType;
+import com.vci.ubcs.omd.service.IBtmTypeService;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
+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 BtmTypeClient implements IBtmTypeClient {
+
+	private final IBtmTypeService btmTypeService;
+
+
+	/**
+	 * 鍙傜収鑾峰彇涓氬姟绫诲瀷璇︽儏淇℃伅
+	 *
+	 * @param oid 涓婚敭
+	 * @return 涓氬姟绫诲瀷璇︽儏淇℃伅
+	 */
+	@Override
+	public R<BtmTypeVO> getDetail(String oid) {
+		return R.data(btmTypeService.getBtmTypeByOid(oid));
+	}
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param query     鍒嗛〉鏉′欢
+	 * @param domain    棰嗗煙鍊�
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public R<IPage<BtmTypeVO>> getRefPage(Map<String, Object> condition, Query query, String domain) {
+		Func.requireNotNull(domain,"棰嗗煙鍊�");
+		IPage<BtmType> page = btmTypeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, BtmType.class).lambda().eq(BtmType::getDomain, domain).orderByAsc(BtmType::getId));
+		IPage<BtmTypeVO> pageVO = new Page<>();
+		BeanUtil.copy(page,pageVO);
+		pageVO.setRecords(BtmTypeWrapper.build().listEntityVO(page.getRecords()));
+		R<IPage<BtmTypeVO>> r = R.data(pageVO);
+		r.setSuccess(true);
+		return r;
+	}
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param domain    棰嗗煙鍊�
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public R<List<BtmTypeVO>> getRef(Map<String, Object> condition, String domain) {
+		Func.requireNotNull(domain,"棰嗗煙鍊�");
+		List<BtmType> list = btmTypeService.list(Condition.getQueryWrapper(condition, BtmType.class).lambda().eq(BtmType::getDomain, domain).orderByAsc(BtmType::getId));
+		return R.data(BtmTypeWrapper.build().listEntityVO(list));
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+	 *
+	 * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@Override
+	public R<List<BtmTypeVO>> selectByIdCollection(List<String> ids) {
+		Func.requireNotNull(ids,"涓氬姟绫诲瀷鑻辨枃鍚嶇О");
+		List<BtmTypeVO> voList = BtmTypeWrapper.build().listEntityVO(
+			Optional.ofNullable(btmTypeService.list(
+					Wrappers.<BtmType>query().lambda().in(BtmType::getId, ids)
+				)
+			).orElseGet(ArrayList::new)
+		);
+		return R.data(voList);
+	}
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param pkBtmTypeCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 */
+	@Override
+	public R<List<BtmTypeVO>> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) {
+		Func.requireNotNull(pkBtmTypeCollection,"涓氬姟绫诲瀷涓婚敭");
+		List<BtmTypeVO> voList = BtmTypeWrapper.build().listEntityVO(
+			Optional.ofNullable(btmTypeService.list(
+					Wrappers.<BtmType>query().lambda().in(BtmType::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/feign/OmdAttributeClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/OmdAttributeClient.java
deleted file mode 100644
index dfc3e88..0000000
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/OmdAttributeClient.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.vci.ubcs.omd.feign;
-
-import com.vci.ubcs.omd.entity.OmdAttribute;
-import com.vci.ubcs.omd.service.IOmdAttributeService;
-import lombok.AllArgsConstructor;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Description: 鍏冩暟鎹湇鍔eign璋冪敤绫�
- *
- * @author LiHang
- * @date 2023/4/4
- */
-@NonDS
-@ApiIgnore
-@RestController
-@AllArgsConstructor
-public class OmdAttributeClient implements IOmdAttributeClient{
-	private final IOmdAttributeService service;
-
-	@Override
-	@GetMapping(GET_BY_ID)
-	public R<OmdAttribute> getById(Long id) {
-		return R.data(service.getById(id));
-	}
-
-	@Override
-	@GetMapping(GET_LIST)
-	public R<List<OmdAttribute>> getList(String key) {
-		Map<String,Object> condition = new HashMap<>();
-		condition.put("key",key);
-		return R.data(service.list(Condition.getQueryWrapper(condition, OmdAttribute.class).lambda().orderByAsc(OmdAttribute::getKey)));
-	}
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/AttributeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/AttributeMapper.java
new file mode 100644
index 0000000..45f779a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/AttributeMapper.java
@@ -0,0 +1,36 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.vci.ubcs.omd.entity.Attribute;
+import org.springblade.core.mp.mapper.BladeMapper;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Description:鍏冩暟鎹暟鎹眰
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+public interface AttributeMapper extends BladeMapper<Attribute> {
+
+	/**
+	 * 鏌ヨ鍏ㄩ儴
+	 * @return 鏌ヨ缁撴灉
+	 */
+	List<Attribute> selectAll();
+
+	/**
+	 * 涓婚敭鏌ヨ
+	 * @param primaryKey 涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	Attribute selectByPrimaryKey(Long primaryKey);
+
+	/**
+	 * 涓婚敭鎵归噺鏌ヨ
+	 * @param primaryKeyCollection 涓婚敭闆嗗悎
+	 * @return 鏌ヨ缁撴灉
+	 */
+	List<Attribute> selectByPrimaryKeyCollection(Collection<String> primaryKeyCollection);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java
new file mode 100644
index 0000000..867a903
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java
@@ -0,0 +1,37 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.vci.ubcs.omd.entity.BtmTypeAttribute;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.core.mp.mapper.BladeMapper;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Description: 涓氬姟绫诲瀷鍏宠仈灞炴�х殑mapper
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+public interface BtmTypeAttributeMapper extends BladeMapper<BtmTypeAttribute> {
+
+    int batchDelete(List<String> records);
+
+
+	int batchUpdate(List<BtmTypeAttribute> btmTypeAttributeDOList);
+
+	/**
+	 * 鑾峰彇涓氬姟绫诲瀷涓殑鎸囧畾灞炴��
+	 * @param id 涓氬姟绫诲瀷鐨勪富閿�
+	 * @param attributeIdCollection 灞炴�х殑id,
+	 * @return 灞炴�х殑鏁版嵁瀵硅薄
+	 */
+	List<BtmTypeAttribute> selectByBtmTypeIdAndAttributeIds(@Param("btmTypeId")String id, @Param("ids") Collection<String> attributeIdCollection);
+
+	/**
+	 * 閫氳繃涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉拌幏鍙栧叧鑱旂殑灞炴��
+	 * @param ids 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉伴泦鍚�
+	 * @return 鍖呭惈鐨勫睘鎬�
+	 */
+	List<BtmTypeAttribute> selectByBtmTypeIds(@Param("ids") Collection<String> ids);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeMapper.java
new file mode 100644
index 0000000..035e810
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeMapper.java
@@ -0,0 +1,118 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.vci.ubcs.omd.entity.BtmTypeAttribute;
+import com.vci.ubcs.omd.entity.BtmType;
+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 BtmTypeMapper extends BladeMapper<BtmType> {
+    /**
+     * 鏍规嵁涓婚敭鍒犻櫎瀵硅薄
+     * @param oid 鐢熷懡鍛ㄦ湡涓婚敭
+     * @return 褰卞搷鐨勮鏁�
+     */
+    int deleteByPrimaryKey(String oid);
+
+    /**
+     * 鎻掑叆涓氬姟绫诲瀷
+     * @param record 瑕佹坊鍔犵殑涓氬姟绫诲瀷瀵硅薄
+     * @return 褰卞搷鐨勮鏁�
+     */
+    int insert(BtmType record);
+
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇鏁版嵁瀵硅薄
+     * @param oid 涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+    BtmType selectByPrimaryKey(String oid);
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    List<BtmType> selectByPrimaryKeys(String oids);
+
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+    List<BtmType> selectByPrimaryKeyCollection(@Param("oids") Collection<String> oids);
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
+     * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 涓氬姟瀵硅薄
+     */
+    List<BtmType> selectByIdCollection(@Param("ids") Collection<String> ids);
+
+    /**
+     * 鏌ヨ鍏ㄩ儴鐨勪笟鍔$被鍨�
+     * @return 涓氬姟绫诲瀷鏁版嵁瀵硅薄鍒楄〃
+     */
+    List<BtmType> selectAll();
+
+    /**
+     * 鏍规嵁涓婚敭淇敼鐢熷懡鍛ㄦ湡
+     * @param record 鏁版嵁瀵硅薄
+     * @return 褰卞搷鐨勮鏁�
+     */
+    int updateByPrimaryKey(BtmType record);
+
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+    String selectNameByOid(String oid);
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О鑾峰彇涓枃鍚嶇О
+     * @param id 鑻辨枃鍚嶇О
+     * @return 涓枃鍚嶇О
+     */
+    String selectNameById(String id);
+
+    /**
+     * 鏍规嵁灞炴�х殑涓婚敭鑾峰彇浣跨敤鐨勪笟鍔$被鍨嬪璞�
+     * @param pkAttribute 灞炴�х殑涓婚敭
+     * @return 涓氬姟绫诲瀷瀵硅薄
+     */
+    List<BtmType> selectByAttributeOid(String pkAttribute);
+
+    /**
+     * 鏍规嵁鐗堟湰瑙勫垯鐨勪富閿幏鍙栦娇鐢ㄧ殑涓氬姟绫诲瀷瀵硅薄
+     * @param pkRevisionRule 鐗堟湰瑙勫垯鐨勪富閿�
+     * @return 涓氬姟绫诲瀷瀵硅薄
+     */
+    List<BtmType> selectByRevisionRuleOid(String pkRevisionRule);
+
+    /**
+     * 鏍规嵁鐢熷懡鍛ㄦ湡鐨勪富閿幏鍙栦娇鐢ㄧ殑涓氬姟绫诲瀷瀵硅薄
+     * @param pkLifeCycle 鐢熷懡鍛ㄦ湡鐨勪富閿�
+     * @return 涓氬姟绫诲瀷瀵硅薄
+     */
+    List<BtmType> selectByLifeCycleOid(String pkLifeCycle);
+
+
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 涓婚敭闆嗗悎
+     * @return 褰卞搷鐨勮鏁�
+     */
+    int batchDeleteByOids(@Param("oids") Collection<String> oids);
+
+    /**
+     * 鎵归噺娣诲姞
+     * @param records 鎵归噺鐨勪俊鎭�
+     * @return 鎵ц鎬绘暟
+     */
+    Long batchInsert(@Param("records") List<BtmTypeAttribute> records);
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/ModifyAttributeInfoMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/ModifyAttributeInfoMapper.java
new file mode 100644
index 0000000..d23f570
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/ModifyAttributeInfoMapper.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/5/4
+ */
+public interface ModifyAttributeInfoMapper extends BaseMapper<ModifyAttributeInfo> {
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdAttributeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdAttributeMapper.java
deleted file mode 100644
index 6b47932..0000000
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdAttributeMapper.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.vci.ubcs.omd.mapper;
-
-import com.vci.ubcs.omd.entity.OmdAttribute;
-import org.springblade.core.mp.mapper.BladeMapper;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * Description:鍏冩暟鎹暟鎹眰
- *
- * @author LiHang
- * @date 2023/4/3
- */
-public interface OmdAttributeMapper extends BladeMapper<OmdAttribute> {
-
-	/**
-	 * 鏌ヨ鍏ㄩ儴
-	 * @return 鏌ヨ缁撴灉
-	 */
-	List<OmdAttribute> selectAll();
-
-	/**
-	 * 涓婚敭鏌ヨ
-	 * @param primaryKey 涓婚敭
-	 * @return 鏌ヨ缁撴灉
-	 */
-	OmdAttribute selectByPrimaryKey(Long primaryKey);
-
-	/**
-	 * 涓婚敭鎵归噺鏌ヨ
-	 * @param primaryKeyCollection 涓婚敭闆嗗悎
-	 * @return 鏌ヨ缁撴灉
-	 */
-	List<OmdAttribute> selectByPrimaryKeyCollection(Collection<String> primaryKeyCollection);
-}
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..24e772c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java
@@ -0,0 +1,226 @@
+package com.vci.ubcs.omd.repeater;
+
+import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.cloud.nacos.NacosServiceManager;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.nacos.api.exception.NacosException;
+import com.alibaba.nacos.api.naming.NamingService;
+import com.alibaba.nacos.api.naming.pojo.Instance;
+import com.alibaba.nacos.api.naming.pojo.ServiceInfo;
+import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.vo.LinkTypeVO;
+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.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.PostConstruct;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Description: 棰嗗煙杞彂鍣�
+ *
+ * @author LiHang
+ * @date 2023/4/25
+ */
+@Component
+public class DomainRepeater {
+
+	/**
+	 * 鎺у埗鍣ㄨ矾寰�
+	 */
+	public static final String API_PREFIX = "ddl";
+
+	/**
+	 * 鏂板鎴栦慨鏀圭殑杞彂璺緞鍚嶇О
+	 */
+	public static final String API_SUBMIT = API_PREFIX + StringPool.SLASH + "submit";
+
+	/**
+	 * 琛ㄥ悕鑾峰彇琛ㄤ俊鎭�
+	 */
+	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";
+	/**
+	 * 鑾峰彇鏁版嵁搴撳拰涓氬姟绫诲瀷涓殑涓嶅悓鐨勫湴鏂�
+	 */
+	public static final String API_CHECK_DIFFERENT_REFLEX = API_PREFIX + StringPool.SLASH + "checkDifferentAndReflex";
+
+	/**
+	 * 鐢ㄤ簬鏋勫缓闈欐�佹湇鍔$被
+	 */
+	public static DomainRepeater domainRepeater;
+	/**
+	 * Nacos鏈嶅姟鍒楄〃
+	 */
+	private static NamingService namingService;
+
+	@Autowired
+	private NacosServiceManager manager;
+
+	@Autowired
+	private NacosDiscoveryProperties properties;
+
+	@PostConstruct
+	private void init() {
+		domainRepeater = this;
+		namingService = manager.getNamingService(properties.getNacosProperties());
+	}
+
+	/**
+	 * 涓�鑷存�ф鏌�
+	 * @param ddlDTO 涓氬姟绫诲瀷銆侀摼鎺ョ被鍨嬩紶杈撳璞�
+	 * @param serviceName 鏈嶅姟鍚�
+	 * @return 鎵ц缁撴灉锛屾湁淇敼鐨勫氨浼氳繑鍥炪��
+	 * @throws NacosException nacos鏌ヨ鏈嶅姟鍑洪敊鏃舵姏鍑哄紓甯�
+	 */
+	public static R checkDifferent(BtmAndLinkTypeDdlDTO ddlDTO,String serviceName) throws NacosException {
+		try {
+			String url = getUrl(serviceName, API_CHECK_DIFFERENT_REFLEX);
+			ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null);
+			if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
+				R body = Objects.requireNonNull(responseEntity.getBody());
+				return body;
+			}
+			return R.fail(String.valueOf(responseEntity.getStatusCode().value()));
+		}catch (HttpClientErrorException e) {
+			if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) {
+				R fail = R.fail("璋冪敤鏈嶅姟澶辫触");
+				fail.setCode(HttpStatus.NOT_FOUND.value());
+				return fail;
+			}
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		return R.fail("鏈煡閿欒");
+	}
+
+	/**
+	 * 鏍规嵁api鎺ュ彛鎷兼帴url鍦板潃
+	 * @param serviceName 鏈嶅姟鍚�
+	 * @param api 鎺ュ彛鍦板潃
+	 * @return url鍦板潃
+	 * @throws NacosException nacos鏌ヨ鏈嶅姟鍑洪敊鏃舵姏鍑哄紓甯�
+	 */
+
+	public static String getUrl(String serviceName,String api) throws NacosException {
+		Instance service = namingService.selectOneHealthyInstance(AppConstant.APPLICATION_GATEWAY_NAME);
+		return "http://" + service.getIp() + StringPool.COLON + service.getPort() + StringPool.SLASH + serviceName + StringPool.SLASH + api;
+	}
+
+
+	/**
+	 * 鏂板鎴栦慨鏀逛笟鍔$被鍨�
+	 * @param vo 涓氬姟绫诲瀷浼犺緭瀵硅薄
+	 * @param serviceName 鏈嶅姟鍚�
+	 * @return 鎵ц缁撴灉锛屾湁淇敼鐨勫氨浼氳繑鍥炪��
+	 */
+	public static R submitBtmType(String serviceName, BtmTypeVO vo) {
+		try {
+			String url = getUrl(serviceName, API_SUBMIT);
+			BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
+			ddlDTO.setBtmTypeList(new ArrayList<>(Collections.singletonList(vo)));
+			ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null);
+			if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
+				return responseEntity.getBody();
+			}
+			return R.fail(String.valueOf(responseEntity.getStatusCode().value()));
+		} catch (HttpClientErrorException e) {
+			if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) {
+				R fail = R.fail("璋冪敤鏈嶅姟澶辫触");
+				fail.setCode(HttpStatus.NOT_FOUND.value());
+				return fail;
+			}
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		return R.fail("鏈煡閿欒");
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀归摼鎺ョ被鍨�
+	 * @param vo 涓氬姟绫诲瀷浼犺緭瀵硅薄
+	 * @param serviceName 鏈嶅姟鍚�
+	 * @return 鎵ц缁撴灉锛屾湁淇敼鐨勫氨浼氳繑鍥炪��
+	 */
+	public static R submitLinkType(String serviceName, LinkTypeVO vo) {
+		try {
+			String url = getUrl(serviceName, API_SUBMIT);
+			BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
+			ddlDTO.setLinkTypeList(new ArrayList<>(Collections.singletonList(vo)));
+			ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null);
+			if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
+				return responseEntity.getBody();
+			}
+			return R.fail(String.valueOf(responseEntity.getStatusCode().value()));
+		} catch (HttpClientErrorException e) {
+			if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) {
+				R fail = R.fail("璋冪敤鏈嶅姟澶辫触");
+				fail.setCode(HttpStatus.NOT_FOUND.value());
+				return fail;
+			}
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		return R.fail("鏈煡閿欒");
+	}
+
+	/**
+	 * 鎵цhttpPost鎺ュ彛
+	 *
+	 * @param url          鍦板潃
+	 * @param body         璇锋眰浣�
+	 * @param extraHeaders 璇锋眰澶村弬鏁�
+	 * @return 鎵ц缁撴灉
+	 */
+	private static ResponseEntity<R> executePost(String url, String body, Map<String, String> extraHeaders) {
+		RestTemplate restTemplate = new RestTemplate();
+		HttpHeaders httpHeaders = new HttpHeaders();
+		httpHeaders.add("Content-Type", "application/json;charset=UTF-8");
+		httpHeaders.add("Blade-Auth", AuthUtil.getHeader());
+		Optional.ofNullable(extraHeaders).orElseGet(HashMap::new).forEach(httpHeaders::add);
+		HttpEntity<String> request = new HttpEntity<>(body, httpHeaders);
+		return restTemplate.postForEntity(url, request, R.class);
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈夊凡娉ㄥ唽鐨勬湇鍔�
+	 * @return 涓嶅寘鍚粯璁ゆ湇鍔$殑鍏朵粬鏈嶅姟
+	 * @throws NacosException
+	 */
+	public static List<String> getDomain() throws NacosException {
+		List<ServiceInfo> services = namingService.getSubscribeServices();
+		Set<String> serviceNames = new HashSet<>();
+		serviceNames.add(AppConstant.APPLICATION_GATEWAY_NAME);
+		serviceNames.add(AppConstant.APPLICATION_ADMIN_NAME);
+		serviceNames.add(AppConstant.APPLICATION_AUTH_NAME);
+		serviceNames.add(AppConstant.APPLICATION_DESK_NAME);
+		serviceNames.add(AppConstant.APPLICATION_DEVELOP_NAME);
+		serviceNames.add(AppConstant.APPLICATION_FLOW_NAME);
+		serviceNames.add(AppConstant.APPLICATION_FLOWDESIGN_NAME);
+		serviceNames.add(AppConstant.APPLICATION_LOG_NAME);
+		serviceNames.add(AppConstant.APPLICATION_REPORT_NAME);
+		serviceNames.add(AppConstant.APPLICATION_SWAGGER_NAME);
+		serviceNames.add(AppConstant.APPLICATION_SYSTEM_NAME);
+		serviceNames.add(AppConstant.APPLICATION_TURBINE_NAME);
+		serviceNames.add(AppConstant.APPLICATION_USER_NAME);
+		serviceNames.add(AppConstant.APPLICATION_WEBSOCKET_NAME);
+		serviceNames.add(AppConstant.APPLICATION_ZIPKIN_NAME);
+		serviceNames.add(AppConstant.APPLICATION_NAME_OMD);
+		return services.stream().map(ServiceInfo::getName).filter(s -> !serviceNames.contains(s)).collect(Collectors.toList());
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IAttributeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IAttributeService.java
new file mode 100644
index 0000000..a4bb36e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IAttributeService.java
@@ -0,0 +1,86 @@
+package com.vci.ubcs.omd.service;
+
+import com.vci.ubcs.omd.dto.AttributeDTO;
+import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.Attribute;
+import com.vci.ubcs.omd.vo.AttributeVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.Collection;
+import java.util.List;
+
+
+/**
+ * Description: 鍏冩暟鎹�(灞炴��)鐨勬湇鍔℃帴鍙�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+public interface IAttributeService extends BaseService<Attribute> {
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹鎯�
+	 * @param id 涓婚敭
+	 * @return 鍏冩暟鎹樉绀哄璞�
+	 */
+	AttributeVO getAttributeDetail(Long id);
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 * @param dto 椤甸潰浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+    boolean submit(AttributeDTO dto);
+
+	/**
+	 * 鍒犻櫎
+	 * @param ids 涓婚敭闆嗗悎
+	 * @return 鎵ц缁撴灉
+	 */
+	boolean removeAttrs(String ids);
+
+	/**
+	 * 鏌ョ湅搴旂敤鑼冨洿
+	 * @param id 涓婚敭
+	 * @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<AttributeVO> 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(BtmTypeLinkAttributesDTO attributesDTO) throws VciBaseException;
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeAttributeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeAttributeService.java
new file mode 100644
index 0000000..372316a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeAttributeService.java
@@ -0,0 +1,83 @@
+package com.vci.ubcs.omd.service;
+
+import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.BtmTypeAttribute;
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.*;
+
+/**
+ * Description:涓氬姟绫诲瀷鍏宠仈灞炴�х殑鏈嶅姟
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+public interface IBtmTypeAttributeService extends BaseService<BtmTypeAttribute> {
+
+	/**
+	 * 妫�鏌ュ睘鎬у瓨鍦ㄥ苟娣诲姞
+	 * @param btmTypeOid 涓氬姟绫诲瀷涓婚敭
+	 * @param attributesDTOList 椤甸潰浼犺緭瀵硅薄闆嗗悎
+	 * @param creator 鍒涘缓浜�
+	 * @param now ts鏃堕棿鎴�
+	 * @return 淇濆瓨鐨勬樉绀哄璞�
+	 */
+	List<BtmTypeAttributeVO> checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now);
+
+	/**
+	 * 鎵归噺鎻掑叆
+	 * @param records 鏁版嵁瀵硅薄闆嗗悎
+	 */
+	int batchInsert(List<BtmTypeAttribute> records);
+
+	/**
+	 * 涓氬姟绫诲瀷涓婚敭鏌ュ睘鎬�
+	 * @param btmTypeOid 涓氬姟绫诲瀷涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+    List<BtmTypeAttributeVO> getAttributeByBtmTypeOid(String btmTypeOid);
+
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param oidCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+	 * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	List<BtmTypeAttributeVO> batchListHasAttributesByBtmTypeOidCollection(Collection<String> oidCollection);
+
+	/**
+	 * 妫�鏌ュ睘鎬у瓨鍦ㄥ苟鍒犻櫎
+	 * @param records 涓婚敭闆嗗悎
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int checkAndRemove(List<String> records);
+
+	/**
+	 * 妫�鏌ュ睘鎬у瓨鍦ㄥ苟娣诲姞
+	 * @param btmTypeOid 涓氬姟绫诲瀷涓婚敭
+	 * @param attributesDTOList 椤甸潰浼犺緭瀵硅薄闆嗗悎
+	 * @param creator 鍒涘缓浜�
+	 * @param now ts鏃堕棿鎴�
+	 * @return 淇濆瓨鐨勬樉绀哄璞�
+	 */
+	List<BtmTypeAttributeVO> checkAndUpdate(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now);
+
+	/**
+	 * 鑾峰彇涓氬姟绫诲瀷涓殑鎸囧畾灞炴��
+	 * @param id 涓氬姟绫诲瀷鐨勪富閿�
+	 * @param attributeIdCollection 灞炴�х殑id,鑻ヤ负绌哄垯鑾峰彇鍏ㄩ儴
+	 * @return 灞炴�х殑鏁版嵁瀵硅薄
+	 */
+	List<BtmTypeAttribute> selectByBtmTypeIdAndAttributeIds(String id, Collection<String> attributeIdCollection);
+
+	/**
+	 * 閫氳繃涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉拌幏鍙栧叧鑱旂殑灞炴��
+	 * @param idList 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉伴泦鍚�
+	 * @return 鍖呭惈鐨勫睘鎬�
+	 */
+	List<BtmTypeAttribute> selectByBtmTypeIds(List<String> idList);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java
new file mode 100644
index 0000000..f59367e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java
@@ -0,0 +1,213 @@
+package com.vci.ubcs.omd.service;
+
+import com.vci.ubcs.omd.dto.BtmTypeDTO;
+import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.BtmType;
+import com.vci.ubcs.omd.entity.BtmTypeAttribute;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import com.vci.ubcs.omd.vo.LinkTypeVO;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.tool.api.R;
+
+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 IBtmTypeService extends BaseService<BtmType> {
+
+    /**
+     * 璁剧疆骞冲彴鏈韩鐨勪笟鍔$被鍨�
+     * @param platformBtmType 骞冲彴鏈韩鐨勪笟鍔$被鍨�
+     */
+    void setPlatformBtmType(Collection<String> platformBtmType);
+
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+     * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+     * @return 涓氬姟绫诲瀷锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    BtmTypeVO getBtmTypeByOid(String pkBtmType) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇涓氬姟绫诲瀷
+     * @param pkBtmTypes 涓氬姟绫诲瀷涓婚敭锛岀敤閫楀彿鍒嗛殧
+     * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<BtmTypeVO> listBtmTypeByOids(String pkBtmTypes) throws ServiceException;
+
+    /**
+     * 鎵归噺鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+     * @param pkBtmTypeCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+     * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<BtmTypeVO> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) throws ServiceException;
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О鑾峰彇涓氬姟绫诲瀷
+     * @param id 鑻辨枃鍚嶇О
+     * @return 涓氬姟绫诲瀷锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    BtmTypeVO getBtmTypeById(String id) throws ServiceException;
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鑾峰彇涓氬姟绫诲瀷
+     * @param ids 鑻辨枃鍚嶇О锛屼娇鐢ㄩ�楀彿鍒嗛殧
+     * @return  涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<BtmTypeVO> listBtmTypeByIds(String ids) throws ServiceException;
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷
+     * @param idCollection 鑻辨枃鍚嶇О闆嗗悎
+     * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<BtmTypeVO> listBtmTypeByIdCollection(Collection<String> idCollection) throws ServiceException;
+
+    /**
+     * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷鐨勬暟鎹璞�
+     * @param idCollection 鑻辨枃鍚嶇О闆嗗悎
+     * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException  鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<BtmType> listBtmTypeDOByIdCollection(Collection<String> idCollection) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓婚敭闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷鐨勬暟鎹璞�
+     * @param oidCollection 涓婚敭
+     * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+     * @throws ServiceException  鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+     */
+    List<BtmType> 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<BtmTypeAttributeVO> listHasAttributesByOid(String oid) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷鑻辨枃鍚嶇О鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+     * @param id 涓氬姟绫诲瀷鑻辨枃鍚嶇О
+     * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴��
+     * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    List<BtmTypeAttributeVO> listHasAttributeById(String id) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+     *
+     * @param oidCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+     * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+     * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    Map<String,List<BtmTypeAttributeVO>> batchListHasAttributesByOidCollection(Collection<String> oidCollection) throws ServiceException;
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷鑻辨枃鍚嶇О鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+     *
+     * @param idCollection 涓氬姟绫诲瀷鑻辨枃鍚嶇О闆嗗悎
+     * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+     * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    Map<String,List<BtmTypeAttributeVO>> batchListHasAttributesByIdCollection(Collection<String> idCollection) throws ServiceException;
+
+
+    /**
+     * 鑾峰彇浣跨敤涓氬姟绫诲瀷鐨勯摼鎺ョ被鍨�
+     * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+     * @return 寮曠敤鐨勯摼鎺ョ被鍨�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    List<LinkTypeVO> 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 btmTypeVO 涓氬姟绫诲瀷鏄剧ず瀵硅薄
+     * @param autoDeleteTable 鑷姩鍒犻櫎琛ㄦ牸
+     * @throws ServiceException 濡傛灉涓氬姟绫诲瀷琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    void delete(BtmTypeVO btmTypeVO, boolean autoDeleteTable) throws ServiceException;
+
+    /**
+     * 鎵归噺鍒犻櫎涓氬姟绫诲瀷
+     * @param btmTypeVOList 瑕佸垹闄ょ殑涓氬姟绫诲瀷鏄剧ず瀵硅薄鍒楄〃
+     * @param autoDeleteTable 鑷姩鍒犻櫎琛ㄦ牸
+     * @throws ServiceException 濡傛灉涓氬姟绫诲瀷琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    void batchDelete(List<BtmTypeVO> btmTypeVOList, boolean autoDeleteTable) throws ServiceException;
+
+    /**
+     * 妫�鏌ヤ笟鍔$被鍨嬩笌鏁版嵁搴撹〃鏄惁涓�鑷�
+     * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+     * @return 涓嶅悓鐨勫睘鎬т俊鎭�
+     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+     */
+    List<ModifyAttributeInfo> checkDbTableSame(String pkBtmType) throws ServiceException;
+
+    /**
+     * 鑾峰彇鏁版嵁搴撹〃锛屾敮鎸佷笟鍔$被鍨嬪拰瑙嗗浘
+     * @param id 涓氬姟绫诲瀷鐨勫悕绉�
+	 * @param domain 棰嗗煙鍚嶇О
+     * @return 鏁版嵁搴撹〃鐨勫悕绉�
+     * @throws ServiceException 鍙傛暟涓虹┖鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    String getTableName(String id,String domain) throws ServiceException;
+
+	/**
+	 * 鏂板鎴栦慨鏀逛笟鍔$被鍨�
+	 * @param btmTypeDTO 涓氬姟绫诲瀷椤甸潰浼犺緭瀵硅薄
+	 * @param autoCreateTable 鑷姩鍒涘缓琛�
+	 * @return 鎵ц缁撴灉
+	 */
+	R submit(BtmTypeDTO btmTypeDTO,boolean autoCreateTable);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java
new file mode 100644
index 0000000..5ec3afe
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.omd.service;
+
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * Description:闇�瑕佷慨鏀规暟鎹簱琛ㄤ腑瀛楁鐨勪俊鎭湇鍔�
+ *
+ * @author LiHang
+ * @date 2023/5/4
+ */
+public interface IModifyAttributeService extends BaseService<ModifyAttributeInfo> {
+}
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
deleted file mode 100644
index fa0dd2c..0000000
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdAttributeService.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.vci.ubcs.omd.service;
-
-import com.vci.ubcs.omd.dto.OmdAttributeDTO;
-import com.vci.ubcs.omd.entity.OmdAttribute;
-import com.vci.ubcs.omd.vo.OmdAttributeVO;
-import org.springblade.core.mp.base.BaseService;
-
-import java.util.List;
-
-
-/**
- * Description: 鍏冩暟鎹�(灞炴��)鐨勬湇鍔℃帴鍙�
- *
- * @author LiHang
- * @date 2023/4/3
- */
-public interface IOmdAttributeService extends BaseService<OmdAttribute> {
-
-	/**
-	 * 鑾峰彇鍏冩暟鎹鎯�
-	 * @param id 涓婚敭
-	 * @return 鍏冩暟鎹樉绀哄璞�
-	 */
-	OmdAttributeVO getAttributeDetail(Long id);
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 * @param dto 椤甸潰浼犺緭瀵硅薄
-	 * @return 鎵ц缁撴灉
-	 */
-    boolean submit(OmdAttributeDTO dto);
-
-	/**
-	 * 鍒犻櫎
-	 * @param ids 涓婚敭闆嗗悎
-	 * @return 鎵ц缁撴灉
-	 */
-	boolean removeAttrs(String ids);
-
-	/**
-	 * 鏌ョ湅搴旂敤鑼冨洿
-	 * @param id 涓婚敭
-	 * @return 鏌ヨ宸插簲鐢ㄧ殑涓氬姟绫诲瀷鍚嶇О
-	 */
-	List<String> applyRange(Long id);
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java
new file mode 100644
index 0000000..a2deddc
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java
@@ -0,0 +1,230 @@
+package com.vci.ubcs.omd.service.impl;
+
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.omd.constant.OmdCacheConstant;
+import com.vci.ubcs.omd.dto.AttributeDTO;
+import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.Attribute;
+import com.vci.ubcs.omd.mapper.AttributeMapper;
+import com.vci.ubcs.omd.service.IAttributeService;
+import com.vci.ubcs.omd.vo.AttributeVO;
+import com.vci.ubcs.omd.wrapper.AttributeWrapper;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.constant.OmdRegExpConstant;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+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;
+
+
+/**
+ * Description: 鍏冩暟鎹�(灞炴��)鐨勬湇鍔�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Service
+public class AttributeServiceImpl extends ServiceImpl<AttributeMapper, Attribute>  implements IAttributeService {
+
+	@Override
+	public boolean deleteLogic(@NotEmpty List<Long> ids) {
+		return false;
+	}
+
+	@Override
+	public boolean changeStatus(@NotEmpty List<Long> ids, Integer status) {
+		return false;
+	}
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹鎯�
+	 *
+	 * @param id 涓婚敭
+	 * @return 鍏冩暟鎹樉绀哄璞�
+	 */
+	@Override
+	public AttributeVO getAttributeDetail(Long id) {
+		Func.requireNotNull(id,"涓婚敭涓嶈兘涓虹┖");
+		return AttributeWrapper.build().entityVO(baseMapper.selectByPrimaryKey(id));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 *
+	 * @param dto 椤甸潰浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public boolean submit(AttributeDTO dto) {
+		LambdaQueryWrapper<Attribute> wrapper = Wrappers.<Attribute>query().lambda().eq(Attribute::getKey, dto.getKey());
+		Long count = baseMapper.selectCount((Func.isEmpty(dto.getId())) ? wrapper : wrapper.notIn(Attribute::getId, dto.getId()));
+		if (count > 0L) {
+			throw new ServiceException("灞炴�у悕宸插瓨鍦�!");
+		}
+		dto.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		Attribute omdAttribute = BeanUtil.copy(dto, Attribute.class);
+		CacheUtil.clear(OmdCacheConstant.ATTR_CACHE);
+		return saveOrUpdate(omdAttribute);
+	}
+
+	/**
+	 * 鍒犻櫎
+	 *
+	 * @param ids 涓婚敭闆嗗悎
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public boolean removeAttrs(String ids) {
+		List<Long> idList = Func.toLongList(ids);
+		return !deleteLogic(idList) && removeByIds(idList);
+	}
+
+	/**
+	 * 鏌ョ湅搴旂敤鑼冨洿
+	 *
+	 * @param id 涓婚敭
+	 * @return 鏌ヨ宸插簲鐢ㄧ殑涓氬姟绫诲瀷鍚嶇О
+	 */
+	@Override
+	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<AttributeVO> 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<AttributeVO> listAttributeByKeyCollection(Collection<String> attributeIdCollection) throws VciBaseException {
+		if(!CollectionUtils.isEmpty(attributeIdCollection)){
+			List<Attribute> attributeDOList = listAttributeByKeyCollectionDO(attributeIdCollection);
+			if(!CollectionUtils.isEmpty(attributeDOList)) {
+				return AttributeWrapper.build().listEntityVO(attributeDOList);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鑾峰彇灞炴�ф暟鎹璞�
+	 * @param attributeIdCollection 灞炴�х殑鑻辨枃鍚嶇О闆嗗悎
+	 * @return 灞炴�ф暟鎹璞″垪琛紝濡傛灉鏈変笉瀛樺湪鐨勪笉浼氳繑鍥烇紝鍏ㄩ儴涓嶅瓨鍦ㄧ殑鍒欒繑鍥炵┖鍒楄〃
+	 * @throws VciBaseException mybatis鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private List<Attribute> listAttributeByKeyCollectionDO(Collection<String> attributeIdCollection) throws VciBaseException {
+		if(!CollectionUtils.isEmpty(attributeIdCollection)){
+			List<Attribute> 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<Attribute> attributeDOS = baseMapper.selectList(Wrappers.<Attribute>query().lambda().in(Attribute::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 {
+		String attributeDataTypeText = VciFieldTypeEnum.getTextByValue(attrDataType);
+		if(StringUtils.isBlank(attributeDataTypeText)){
+			throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勫睘鎬х殑绫诲瀷涓嶇鍚堣姹�",new Object[]{id});
+		}
+		//蹇呴』瑕佽緭鍏ラ暱搴�
+		if( VciBaseUtil.inArray(new String[] {VciFieldTypeEnum.VTString.name()},attrDataType)
+			&& (attributeLength == null ||attributeLength < 1)){
+			throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勫睘鎬х殑涓簕1}绫诲瀷鏃讹紝蹇呴』瑕佽緭鍏ラ暱搴︾殑鍊�",new Object[]{id,attributeDataTypeText});
+		}
+		//鍒ゆ柇榛樿鍊�
+		if(StringUtils.isNotBlank(defaultValue)){
+			if(VciFieldTypeEnum.VTDouble.name().equalsIgnoreCase(attrDataType)
+				&& !defaultValue.matches(OmdRegExpConstant.DOUBLE)){
+				throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勫睘鎬х殑榛樿鍊间笉鏄弻绮惧害绫诲瀷",new Object[]{id});
+			}
+			if(VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(defaultValue)
+				&& !defaultValue.matches(OmdRegExpConstant.INT)){
+				throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勫睘鎬х殑榛樿鍊间笉鏄暣鏁板瀷",new Object[]{id});
+			}
+			if(VciFieldTypeEnum.VTLong.name().equalsIgnoreCase(defaultValue)
+				&& !defaultValue.matches(OmdRegExpConstant.LONG)){
+				throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勫睘鎬х殑榛樿鍊间笉鏄暱鏁村舰",new Object[]{id});
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * 鏍¢獙灞炴�ф槸鍚︾鍚堣姹�
+	 *
+	 * @param attributesDTO 灞炴�ф暟鎹紶杈撳璞�
+	 * @return true 绗﹀悎 false 涓嶇鍚�
+	 * @throws VciBaseException 涓嶇鍚堟椂鎶涘嚭寮傚父
+	 */
+	@Override
+	public boolean checkAttribute(BtmTypeLinkAttributesDTO 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/BtmAttributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java
new file mode 100644
index 0000000..880efbc
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java
@@ -0,0 +1,182 @@
+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.BtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.BtmTypeAttribute;
+import com.vci.ubcs.omd.mapper.BtmTypeAttributeMapper;
+import com.vci.ubcs.omd.service.IAttributeService;
+import com.vci.ubcs.omd.service.IBtmTypeAttributeService;
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import com.vci.ubcs.omd.wrapper.BtmTypeAttributeWrapper;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+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.*;
+
+/**
+ * Description: 涓氬姟绫诲瀷鍏宠仈灞炴�х殑鏈嶅姟瀹炵幇绫�
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+@Service
+public class BtmAttributeServiceImpl extends ServiceImpl<BtmTypeAttributeMapper, BtmTypeAttribute> implements IBtmTypeAttributeService {
+
+	@Autowired
+	private IAttributeService 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 List<BtmTypeAttributeVO> checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
+		List<String> attributeIdList = new ArrayList<>();
+		List<BtmTypeAttribute> btmTypeAttributeDOList = new ArrayList<>();
+		if (!CollectionUtils.isEmpty(attributesDTOList)) {
+			attributesDTOList.stream().forEachOrdered(s -> {
+				attributeService.checkAttribute(s);
+				btmTypeAttributeDOList.add(BtmTypeAttributeWrapper.build().copyBtmTypeAttributeDTO2Entity(s,btmTypeOid, creator, now));
+				attributeIdList.add(s.getId().toLowerCase().trim());
+			});
+			//妫�鏌ュ睘鎬ф槸鍚﹂兘瀛樺湪
+			boolean exists = attributeService.checkAttributeExists(attributeIdList);
+			if (!exists){
+				return null;
+			}
+			batchInsert(btmTypeAttributeDOList);
+			return BtmTypeAttributeWrapper.build().listEntityVO(btmTypeAttributeDOList);
+//            btmTypeAttributeDOList.stream().forEachOrdered(s -> {
+//                btmTypeAttributeDOMapper.insert(s);
+//            });
+		}
+		return null;
+	}
+
+	/**
+	 * 妫�鏌ュ睘鎬у瓨鍦ㄥ苟鍒犻櫎
+	 *
+	 * @param records 涓婚敭闆嗗悎
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int checkAndRemove(List<String> records) {
+		if (CollectionUtils.isEmpty(records)){
+			return 0;
+		}
+		return baseMapper.batchDelete(records);
+	}
+
+	/**
+	 * 妫�鏌ュ睘鎬у瓨鍦ㄥ苟娣诲姞
+	 *
+	 * @param btmTypeOid        涓氬姟绫诲瀷涓婚敭
+	 * @param attributesDTOList 椤甸潰浼犺緭瀵硅薄闆嗗悎
+	 * @param creator           鍒涘缓浜�
+	 * @param now               ts鏃堕棿鎴�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public List<BtmTypeAttributeVO> checkAndUpdate(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
+		List<String> attributeIdList = new ArrayList<>();
+		List<BtmTypeAttribute> btmTypeAttributeDOList = new ArrayList<>();
+		if (!CollectionUtils.isEmpty(attributesDTOList)) {
+			attributesDTOList.stream().forEachOrdered(s -> {
+				attributeService.checkAttribute(s);
+				btmTypeAttributeDOList.add(BtmTypeAttributeWrapper.build().copyBtmTypeAttributeDTO2Entity(s,btmTypeOid, creator, now));
+				attributeIdList.add(s.getId().toLowerCase().trim());
+			});
+			//妫�鏌ュ睘鎬ф槸鍚﹂兘瀛樺湪
+			boolean exists = attributeService.checkAttributeExists(attributeIdList);
+			if (!exists){
+				return null;
+			}
+			baseMapper.batchUpdate(btmTypeAttributeDOList);
+			return BtmTypeAttributeWrapper.build().listEntityVO(btmTypeAttributeDOList);
+//            btmTypeAttributeDOList.stream().forEachOrdered(s -> {
+//                btmTypeAttributeDOMapper.insert(s);
+//            });
+		}
+		return null;
+	}
+
+	/**
+	 * 鎵归噺鎻掑叆
+	 *
+	 * @param records 鏁版嵁瀵硅薄闆嗗悎
+	 */
+	@Override
+	public int batchInsert(List<BtmTypeAttribute> records) {
+		return baseMapper.insertBatchSomeColumn(records);
+	}
+
+	/**
+	 * 涓氬姟绫诲瀷涓婚敭鏌ュ睘鎬�
+	 * @param btmTypeOid 涓氬姟绫诲瀷涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public List<BtmTypeAttributeVO> getAttributeByBtmTypeOid(String btmTypeOid){
+		Func.requireNotNull(btmTypeOid,"涓氬姟绫诲瀷涓婚敭");
+		return BtmTypeAttributeWrapper.build().listEntityVO(
+			Optional.ofNullable(
+				baseMapper.selectList(Wrappers.<BtmTypeAttribute>query().lambda().eq(BtmTypeAttribute::getPkBtmType, btmTypeOid))
+			).orElseGet(ArrayList::new)
+		);
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param oidCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+	 * @throws VciBaseException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public List<BtmTypeAttributeVO> batchListHasAttributesByBtmTypeOidCollection(Collection<String> oidCollection) throws VciBaseException {
+		VciBaseUtil.alertNotNull(oidCollection,"涓氬姟绫诲瀷涓婚敭");
+		List<BtmTypeAttribute> doList = baseMapper.selectList(Wrappers.<BtmTypeAttribute>query().lambda().in(BtmTypeAttribute::getPkBtmType, oidCollection));
+		return BtmTypeAttributeWrapper.build().listEntityVO(doList);
+	}
+
+	/**
+	 * 鑾峰彇涓氬姟绫诲瀷涓殑鎸囧畾灞炴��
+	 *
+	 * @param id                    涓氬姟绫诲瀷鐨勪富閿�
+	 * @param attributeIdCollection 灞炴�х殑id,鑻ヤ负绌哄垯鑾峰彇鍏ㄩ儴
+	 * @return 灞炴�х殑鏁版嵁瀵硅薄
+	 */
+	@Override
+	public List<BtmTypeAttribute> selectByBtmTypeIdAndAttributeIds(String id, Collection<String> attributeIdCollection) {
+		return baseMapper.selectByBtmTypeIdAndAttributeIds(id,attributeIdCollection);
+	}
+
+	/**
+	 * 閫氳繃涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉拌幏鍙栧叧鑱旂殑灞炴��
+	 *
+	 * @param idList 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉伴泦鍚�
+	 * @return 鍖呭惈鐨勫睘鎬�
+	 */
+	@Override
+	public List<BtmTypeAttribute> selectByBtmTypeIds(List<String> idList) {
+		return baseMapper.selectByBtmTypeIds(idList);
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
new file mode 100644
index 0000000..994199f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -0,0 +1,624 @@
+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.BtmTypeFieldConstant;
+import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
+import com.vci.ubcs.omd.repeater.DomainRepeater;
+import com.vci.ubcs.omd.service.IBtmTypeAttributeService;
+import com.vci.ubcs.omd.service.IModifyAttributeService;
+import com.vci.ubcs.omd.wrapper.BtmTypeAttributeWrapper;
+import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
+import com.vci.ubcs.omd.wrapper.ModifyAttributeWrapper;
+import com.vci.ubcs.starter.web.constant.OmdRegExpConstant;
+import com.vci.ubcs.omd.dto.BtmTypeDTO;
+import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.BtmType;
+import com.vci.ubcs.omd.entity.BtmTypeAttribute;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import com.vci.ubcs.omd.mapper.BtmTypeMapper;
+import com.vci.ubcs.omd.service.IBtmTypeService;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import com.vci.ubcs.omd.vo.LinkTypeVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+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.springblade.core.tool.utils.StringPool;
+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.validation.constraints.NotEmpty;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Description: 涓氬姟绫诲瀷鏈嶅姟鐨勫疄鐜扮被
+ *
+ * @author LiHang
+ * @date 2023/4/23
+ */
+@Service
+public class BtmTypeServiceImpl extends ServiceImpl<BtmTypeMapper, BtmType> implements IBtmTypeService {
+
+	/**
+	 * 浜嬪姟绠$悊
+	 */
+	@Autowired
+	private DataSourceTransactionManager dataSourceTransactionManager;
+
+	/**
+	 * 涓氬姟绫诲瀷鍏宠仈灞炴�ф湇鍔�
+	 */
+	@Autowired
+	private IBtmTypeAttributeService btmTypeAttributeService;
+
+	/**
+	 * 瀛楁淇敼淇℃伅鐨勬湇鍔�
+	 */
+	@Autowired
+	private IModifyAttributeService modifyAttributeService;
+
+	/**
+	 * 琛ㄥ悕鍓嶇紑
+	 */
+	public static final String PL = "PL";
+
+	/**
+	 * 璁剧疆骞冲彴鏈韩鐨勪笟鍔$被鍨�
+	 *
+	 * @param platformBtmType 骞冲彴鏈韩鐨勪笟鍔$被鍨�
+	 */
+	@Override
+	public void setPlatformBtmType(Collection<String> platformBtmType) {
+
+	}
+
+	/**
+	 * 鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+	 * @return 涓氬姟绫诲瀷锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public BtmTypeVO getBtmTypeByOid(String pkBtmType) throws ServiceException {
+		Func.requireNotNull(pkBtmType,"涓氬姟绫诲瀷涓婚敭涓嶈兘涓虹┖");
+		BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(baseMapper.selectOne(Wrappers.<BtmType>query().lambda().eq(BtmType::getOid, pkBtmType)));
+		btmTypeVO.setAttributes(btmTypeAttributeService.getAttributeByBtmTypeOid(pkBtmType));
+		return btmTypeVO;
+	}
+
+	/**
+	 * 鏍规嵁涓婚敭鎵归噺鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param pkBtmTypes 涓氬姟绫诲瀷涓婚敭锛岀敤閫楀彿鍒嗛殧
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<BtmTypeVO> listBtmTypeByOids(String pkBtmTypes) throws ServiceException {
+		VciBaseUtil.alertNotNull(pkBtmTypes, "涓氬姟绫诲瀷鐨勪富閿�");
+		List<String> pkList = new ArrayList<>();
+		Collections.addAll(pkList, pkBtmTypes.split(","));
+		return listBtmTypeByOidCollection(pkList);
+	}
+
+	/**
+	 * 鎵归噺鏍规嵁涓婚敭鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param pkBtmTypeCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<BtmTypeVO> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) throws ServiceException {
+		if (!CollectionUtils.isEmpty(pkBtmTypeCollection)) {
+			List<BtmType> btmTypeDOList = listBtmTypeDOByOidCollection(pkBtmTypeCollection);
+			if (!CollectionUtils.isEmpty(btmTypeDOList)) {
+				return BtmTypeWrapper.build().listEntityVO(btmTypeDOList);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param id 鑻辨枃鍚嶇О
+	 * @return 涓氬姟绫诲瀷锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public BtmTypeVO getBtmTypeById(String id) throws ServiceException {
+		VciBaseUtil.alertNotNull(id, "涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�");
+		List<BtmTypeVO> btmTypeVOList = listBtmTypeByIds(id);
+		if (!CollectionUtils.isEmpty(btmTypeVOList)) {
+			return btmTypeVOList.get(0);
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param ids 鑻辨枃鍚嶇О锛屼娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<BtmTypeVO> listBtmTypeByIds(String ids) throws ServiceException {
+		Func.requireNotNull(ids,"鑻辨枃鍚嶇О涓嶈兘涓虹┖");
+		return listBtmTypeByIdCollection(Func.toStrList(",",ids));
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷
+	 *
+	 * @param idCollection 鑻辨枃鍚嶇О闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<BtmTypeVO> listBtmTypeByIdCollection(Collection<String> idCollection) throws ServiceException {
+		return CollectionUtils.isEmpty(idCollection) ?  null : BtmTypeWrapper.build().listEntityVO(baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getId,idCollection)));
+	}
+
+	/**
+	 * 鏍规嵁鑻辨枃鍚嶇О闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷鐨勬暟鎹璞�
+	 *
+	 * @param idCollection 鑻辨枃鍚嶇О闆嗗悎
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<BtmType> listBtmTypeDOByIdCollection(Collection<String> idCollection) throws ServiceException {
+		return CollectionUtils.isEmpty(idCollection) ? null : baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getId, idCollection));
+	}
+
+	/**
+	 * 鏍规嵁涓婚敭闆嗗悎鎵归噺鑾峰彇涓氬姟绫诲瀷鐨勬暟鎹璞�
+	 *
+	 * @param oidCollection 涓婚敭
+	 * @return 涓氬姟绫诲瀷鍒楄〃锛屽鏋滄湁涓嶅瓨鍦ㄧ殑涓嶄細杩斿洖锛屽叏閮ㄤ笉瀛樺湪鐨勫垯杩斿洖绌哄垪琛�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<BtmType> listBtmTypeDOByOidCollection(Collection<String> oidCollection) throws ServiceException {
+		if (!CollectionUtils.isEmpty(oidCollection)) {
+			return baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getOid, oidCollection));
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇涓枃鍚嶇О
+	 *
+	 * @param oid 涓氬姟绫诲瀷涓婚敭锛屽涓娇鐢ㄩ�楀彿鍒嗛殧
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull;澶氫釜浼氫互閫楀彿鍒嗛殧
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public String getNameByOid(String oid) throws ServiceException {
+		return Objects.requireNonNull(baseMapper.selectOne(Wrappers.<BtmType>query().lambda().eq(BtmType::getOid,oid))).getName();
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鑻辨枃鍚嶇О鑾峰彇涓枃鍚嶇О
+	 *
+	 * @param id 涓氬姟绫诲瀷鑻辨枃鍚嶇О
+	 * @return 涓枃鍚嶇О锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull;澶氫釜浼氫互閫楀彿鍒嗛殧
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public String getNameById(String id) throws ServiceException {
+		return Objects.requireNonNull(baseMapper.selectOne(Wrappers.<BtmType>query().lambda().eq(BtmType::getId,id))).getName();
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param oid 涓氬姟绫诲瀷涓婚敭
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺灞炴��
+	 * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栨煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public List<BtmTypeAttributeVO> listHasAttributesByOid(String oid) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鑻辨枃鍚嶇О鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param id 涓氬姟绫诲瀷鑻辨枃鍚嶇О
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴��
+	 * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public List<BtmTypeAttributeVO> listHasAttributeById(String id) throws ServiceException {
+		VciBaseUtil.alertNotNull(id,"涓氬姟绫诲瀷鑻辨枃鍚嶇О");
+		List<String> ids = Func.toStrList(",", id);
+		Map<String, List<BtmTypeAttributeVO>> attributeMap = batchListHasAttributesByIdCollection(ids);
+		if (!CollectionUtils.isEmpty(attributeMap)) {
+			List<BtmTypeAttributeVO> attributeVOList = new ArrayList<>();
+			attributeMap.forEach((k, v) -> {
+				attributeVOList.addAll(v);
+			});
+			return attributeVOList;
+		}
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param oidCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+	 * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public Map<String, List<BtmTypeAttributeVO>> batchListHasAttributesByOidCollection(Collection<String> oidCollection) throws ServiceException {
+		return btmTypeAttributeService.batchListHasAttributesByBtmTypeOidCollection(oidCollection).stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
+	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷鑻辨枃鍚嶇О鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param idCollection 涓氬姟绫诲瀷鑻辨枃鍚嶇О闆嗗悎
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+	 * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public Map<String, List<BtmTypeAttributeVO>> batchListHasAttributesByIdCollection(Collection<String> idCollection) throws ServiceException {
+		List<String> btmTypeOidList = baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getId, idCollection)).stream().map(BtmType::getOid).collect(Collectors.toList());
+		return btmTypeAttributeService.batchListHasAttributesByBtmTypeOidCollection(btmTypeOidList).stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
+	}
+
+	/**
+	 * 鑾峰彇浣跨敤涓氬姟绫诲瀷鐨勯摼鎺ョ被鍨�
+	 *
+	 * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+	 * @return 寮曠敤鐨勯摼鎺ョ被鍨�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public List<LinkTypeVO> listLinkTypeForUsedBtmType(String pkBtmType) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鏄惁琚紩鐢�
+	 *
+	 * @param pkBtmType 涓氬姟绫诲瀷鐨勪富閿�
+	 * @return true琛ㄧず琚紩鐢紝 false琛ㄧず娌℃湁琚紩鐢�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public boolean checkBtmTypeUsed(String pkBtmType) throws ServiceException {
+		VciBaseUtil.alertNotNull(pkBtmType, "涓氬姟绫诲瀷涓婚敭");
+		return checkBtmTypeUseds(VciBaseUtil.str2List(pkBtmType));
+	}
+
+	/**
+	 * 鏍¢獙涓氬姟绫诲瀷鏄惁琚紩鐢�
+	 *
+	 * @param oidCollection 涓氬姟绫诲瀷鐨勪富閿泦鍚�
+	 * @return true琛ㄧず琚紩鐢紝 false琛ㄧず娌℃湁琚紩鐢�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑洪敊璇�
+	 */
+	@Override
+	public boolean checkBtmTypeUseds(Collection<String> oidCollection) throws ServiceException {
+		VciBaseUtil.alertCollectionNotNull("鏍¢獙鏄惁寮曠敤鐨勪笟鍔$被鍨嬪璞$殑涓婚敭", oidCollection);
+		//妫�鏌ラ摼鎺ョ被鍨�
+		//鍥犱负閾炬帴绫诲瀷涓璮romBtmType鍜宼oBtmType閮芥槸閫楀彿鍒嗛殧鐨勶紝鎵�浠ョ洿鎺ユ煡璇㈡墍鏈夌殑閾炬帴绫诲瀷涓殑浣跨敤鐨勪笟鍔$被鍨嬪悕绉�
+		List<BtmType> btmTypeDOList = listBtmTypeDOByOidCollection(oidCollection);
+		if (CollectionUtils.isEmpty(btmTypeDOList)) {
+			return false;
+		}
+		/*Set<String> usedBtmTypeSet = linkTypeServiceI.listUsedBtmType();
+		if (btmTypeDOList.stream().anyMatch(s -> usedBtmTypeSet.contains(s.getId().trim().toLowerCase()))) {
+			return true;
+		}*/
+		return false;
+	}
+
+	/**
+	 * 娣诲姞榛樿鐨勫瓧娈�
+	 * @param attributes 瀛楁闆�
+	 * @param fieldMap 榛樿瀛楁闆�
+	 * @return 娣诲姞鍚庣殑瀛楁闆�
+	 */
+	private List<BtmTypeLinkAttributesDTO> addAttributeByFieldMap(List<BtmTypeLinkAttributesDTO> attributes, Map<String, String> fieldMap) {
+		Map<String, BtmTypeLinkAttributesDTO> existFieldMap = attributes.stream().collect(Collectors.toMap(BtmTypeLinkAttributesDTO::getId, t -> t, (o1, o2) -> o1));
+		fieldMap.forEach((k,v) -> {
+			if (!existFieldMap.containsKey(k)){
+				BtmTypeLinkAttributesDTO attr = new BtmTypeLinkAttributesDTO();
+				attr.setId(k);
+				attr.setAttrDataType(VciFieldTypeEnum.VTString.name());
+				attr.setAttributeLength(50);
+				attr.setNullableFlag(false);
+				attr.setDescription(v);
+				attributes.add(attr);
+			}
+		});
+		return attributes;
+	}
+
+	/**
+	 * 妫�鏌ヤ笟鍔$被鍨嬬殑灞炴�ф槸鍚﹀拰鏁版嵁搴撲腑鐩稿悓
+	 *
+	 * @param btmTypeVO 涓氬姟绫诲瀷鐨勬樉绀哄璞�
+	 */
+	private void checkTableSame(BtmTypeVO btmTypeVO) {
+		List<BtmTypeVO> btmTypeVOList = new ArrayList<>();
+		btmTypeVOList.add(btmTypeVO);
+		BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
+		ddlDTO.setBtmTypeList(btmTypeVOList);
+		try {
+			// 灏嗕互鍓嶇殑checkDifferent鍜宺eflexDifferent缁撳悎浜�
+			R result = DomainRepeater.checkDifferent(ddlDTO,btmTypeVO.getDomain());
+			if (result.isSuccess()){
+				List<ModifyAttributeInfo> infoList = new ArrayList<>();
+				Object data = result.getData();
+				if (data instanceof List){
+					List dataList = (List) data;
+					dataList.forEach(s -> {
+						if (s instanceof ModifyAttributeInfo){
+							ModifyAttributeInfo info = (ModifyAttributeInfo) s;
+							infoList.add(info);
+						}
+					});
+					modifyAttributeService.saveBatch(ModifyAttributeWrapper.build().listEntityBeforeSave(infoList));
+				}
+			}
+		} catch (NacosException e) {
+			if (log.isDebugEnabled()) {
+				log.error("淇濆瓨銆愪慨鏀瑰睘鎬с�戞暟鎹�", e);
+			}
+			throw new RuntimeException(e);
+		}
+//		modifyAttributeServiceI.finishModify(modifyAttributeInfoList);
+	}
+
+	/**
+	 * 娣诲姞灞炴�у埌涓氬姟绫诲瀷涓�
+	 *
+	 * @param btmTypeDTO 涓氬姟绫诲瀷鐨勬暟鎹紶杈撳璞�
+	 */
+	private List<BtmTypeAttributeVO> addAttributeForBtm(BtmTypeDTO btmTypeDTO) throws VciBaseException{
+		List<BtmTypeLinkAttributesDTO> attributesDTOList = btmTypeDTO.getAttributes();
+		return btmTypeAttributeService.checkAndInsert(btmTypeDTO.getOid(),attributesDTOList,AuthUtil.getUserAccount(),new Date());
+	}
+
+	/**
+	 * 鍒犻櫎涓氬姟绫诲瀷
+	 *
+	 * @param btmTypeVO       涓氬姟绫诲瀷鏄剧ず瀵硅薄
+	 * @param autoDeleteTable 鑷姩鍒犻櫎琛ㄦ牸
+	 * @throws ServiceException 濡傛灉涓氬姟绫诲瀷琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public void delete(BtmTypeVO btmTypeVO, boolean autoDeleteTable) throws ServiceException {
+
+	}
+
+	/**
+	 * 鎵归噺鍒犻櫎涓氬姟绫诲瀷
+	 *
+	 * @param btmTypeVOList   瑕佸垹闄ょ殑涓氬姟绫诲瀷鏄剧ず瀵硅薄鍒楄〃
+	 * @param autoDeleteTable 鑷姩鍒犻櫎琛ㄦ牸
+	 * @throws ServiceException 濡傛灉涓氬姟绫诲瀷琚紩鐢紝鎴栬�呭垹闄ゅ嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public void batchDelete(List<BtmTypeVO> btmTypeVOList, boolean autoDeleteTable) throws ServiceException {
+
+	}
+
+	/**
+	 * 妫�鏌ヤ笟鍔$被鍨嬩笌鏁版嵁搴撹〃鏄惁涓�鑷�
+	 *
+	 * @param pkBtmType 涓氬姟绫诲瀷涓婚敭
+	 * @return 涓嶅悓鐨勫睘鎬т俊鎭�
+	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public List<ModifyAttributeInfo> checkDbTableSame(String pkBtmType) throws ServiceException {
+		return null;
+	}
+
+	/**
+	 * 鑾峰彇鏁版嵁搴撹〃锛屾敮鎸佷笟鍔$被鍨嬪拰瑙嗗浘
+	 *
+	 * @param id 涓氬姟绫诲瀷鐨勫悕绉�
+	 * @return 鏁版嵁搴撹〃鐨勫悕绉�
+	 * @throws ServiceException 鍙傛暟涓虹┖鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public String getTableName(String id,String domain) throws ServiceException {
+		VciBaseUtil.alertNotNull(id,"涓氬姟绫诲瀷鑻辨枃鍚嶇О",domain,"棰嗗煙鍚嶇О");
+		if (domain.contains("ubcs-")){
+			domain = domain.split("ubcs-")[1];
+		}else {
+			throw new VciBaseException("棰嗗煙鍚嶇О涓嶇鍚堣鍒�");
+		}
+		return PL + StringPool.UNDERSCORE + domain + StringPool.UNDERSCORE + id;
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀逛笟鍔$被鍨�
+	 *
+	 * @param btmTypeDTO 涓氬姟绫诲瀷椤甸潰浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public R submit(BtmTypeDTO btmTypeDTO, boolean autoCreateTable) {
+		TransactionStatus transaction = null;
+		DefaultTransactionDefinition def = null;
+		if (autoCreateTable) {
+			def = new DefaultTransactionDefinition();
+			def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
+			// 浜嬬墿闅旂绾у埆锛屽紑鍚柊浜嬪姟锛岃繖鏍蜂細姣旇緝瀹夊叏浜涖��
+			transaction = dataSourceTransactionManager.getTransaction(def);
+			// 鑾峰緱浜嬪姟鐘舵��
+		}
+		checkBtmTypeBeforeSave(btmTypeDTO);
+		BtmType btmTypeDO = Optional.ofNullable(BeanUtil.copy(btmTypeDTO, BtmType.class)).orElseGet(BtmType::new);
+		List<BtmTypeLinkAttributesDTO> attributes = btmTypeDTO.getAttributes();
+		List<BtmTypeAttributeVO> afterAttributes;
+		if (StringUtils.isBlank(btmTypeDO.getOid())){
+			btmTypeDO = BtmTypeWrapper.build().entityBeforeInsert(btmTypeDO);
+			if (StringUtils.isBlank(btmTypeDO.getTableName())) {
+				btmTypeDO.setTableName(getTableName(btmTypeDO.getId(),btmTypeDO.getDomain()));
+			}
+			// 娣诲姞灞炴��
+			afterAttributes = addAttributeForBtm(btmTypeDTO);
+			baseMapper.insert(btmTypeDO);
+		}else {
+			BtmTypeVO btmTypeByOid = getBtmTypeByOid(btmTypeDO.getOid());
+			List<BtmTypeAttributeVO> beforeAttributes = btmTypeByOid.getAttributes();
+			// 澶勭悊灞炴�э紝澶氫綑鐨勫垹闄わ紝涓嶅瓨鍦ㄧ殑娣诲姞
+			afterAttributes = updateAttributeForBtm(btmTypeByOid.getOid(),beforeAttributes, attributes);
+		}
+		BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(btmTypeDO);
+		btmTypeVO.setAttributes(afterAttributes);
+		try {
+			if (autoCreateTable) {
+				checkTableSame(btmTypeVO);
+				R result = DomainRepeater.submitBtmType(btmTypeDTO.getDomain(), btmTypeVO);
+				if (result.isSuccess()){
+					List<ModifyAttributeInfo> infoList = new ArrayList<>();
+					Object data = result.getData();
+					if (data instanceof List){
+						List dataList = (List) data;
+						dataList.forEach(s -> {
+							if (s instanceof ModifyAttributeInfo){
+								ModifyAttributeInfo info = (ModifyAttributeInfo) s;
+								infoList.add(info);
+							}
+						});
+						modifyAttributeService.saveBatch(ModifyAttributeWrapper.build().listEntityBeforeSave(infoList));
+					}
+					dataSourceTransactionManager.commit(transaction);
+				}else {
+					dataSourceTransactionManager.rollback(transaction);
+				}
+			}
+		} catch (Throwable e) {
+			if (autoCreateTable) {
+				dataSourceTransactionManager.rollback(transaction);
+			}
+		}
+		return R.data(btmTypeVO);
+	}
+
+	/**
+	 * 鏇存柊涓氬姟绫诲瀷鐨勫睘鎬�
+	 * @param oid 閫愭笎
+	 * @param beforeAttr 鏇存柊鍓嶇殑灞炴��
+	 * @param afterAttr 鏇存柊鍚庣殑灞炴��
+	 */
+	private List<BtmTypeAttributeVO> updateAttributeForBtm(String oid, List<BtmTypeAttributeVO> beforeAttr, List<BtmTypeLinkAttributesDTO> afterAttr) {
+		List<BtmTypeAttributeVO> deleteList = beforeAttr.stream().filter(before -> afterAttr.stream().noneMatch(after -> StringUtils.equals(before.getId(), after.getId()))).collect(Collectors.toList());
+		List<BtmTypeLinkAttributesDTO> addList = afterAttr.stream().filter(after -> beforeAttr.stream().noneMatch(before -> StringUtils.equals(before.getId(), after.getId()))).collect(Collectors.toList());
+		List<BtmTypeLinkAttributesDTO> modifyList = new ArrayList<>();
+		Map<String, BtmTypeAttributeVO> beforeAttrMap = beforeAttr.stream().collect(Collectors.toMap(BtmTypeAttributeVO::getId, t -> t, (o1, o2) -> o1));
+		Map<String, BtmTypeLinkAttributesDTO> afterAttrMap = afterAttr.stream().collect(Collectors.toMap(BtmTypeLinkAttributesDTO::getId, t -> t, (o1, o2) -> o1));
+		afterAttrMap.forEach((k,v) -> {
+			if (beforeAttrMap.containsKey(k)){
+				modifyList.add(v);
+			}
+		});
+		btmTypeAttributeService.checkAndRemove(deleteList.stream().map(BtmTypeAttributeVO::getOid).collect(Collectors.toList()));
+		List<BtmTypeAttributeVO> voListAdd = btmTypeAttributeService.checkAndInsert(oid, addList, AuthUtil.getUserAccount(), new Date());
+		List<BtmTypeAttributeVO> voListUpdate = btmTypeAttributeService.checkAndUpdate(oid, modifyList, AuthUtil.getUserAccount(), new Date());
+		List<BtmTypeAttributeVO> returnList = new ArrayList<>();
+		returnList.addAll(Objects.requireNonNull(voListAdd));
+		returnList.addAll(Objects.requireNonNull(voListUpdate));
+		return returnList;
+	}
+
+	/**
+	 * 妫�鏌ヤ笟鍔$被鍨嬬鍚堣鑼�
+	 * @param btmTypeDTO 涓氬姟绫诲瀷椤甸潰浼犺緭瀵硅薄
+	 */
+	private void checkBtmTypeBeforeSave(BtmTypeDTO btmTypeDTO) {
+		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.getAttributes());
+		}
+		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<BtmType> btmTypeDOList = listBtmTypeDOByIdCollection(VciBaseUtil.str2List(btmTypeDTO.getId()));
+		if (!CollectionUtils.isEmpty(btmTypeDOList) && btmTypeDOList.size() > 0) {
+			BtmType existBtmType = btmTypeDOList.get(0);
+			throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О宸茬粡瀛樺湪锛堜笉鍖哄垎澶у皬鍐欙級锛岃繖涓嫳鏂囧悕绉板搴旂殑涓枃鍚嶇О涓簕0},鍒涘缓浜簕1},鍒涘缓鏃堕棿{2}"
+				, new Object[]{existBtmType.getName(), existBtmType.getCreator(), VciDateUtil.date2Str(existBtmType.getCreateTime(), VciDateUtil.DateFormat)});
+		}
+		if (btmTypeDTO.isRevisionFlag()){
+			// 闇�瑕佹帶鍒剁増鏈�
+			// 妫�鏌ヤ娇鐢ㄧ殑鐗堟湰瑙勫垯鏄惁瀛樺湪
+//				if (StringUtils.isNotBlank(btmTypeDTO.getRevisionRuleId())) {
+//					if (revisionRuleServiceI.checkRevisionRuleExist(btmTypeDTO.getRevisionRuleId())) {
+//						throw new VciBaseException("鐗堟湰瑙勫垯{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
+//							new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
+//					}
+//				}
+			btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP));
+		}
+		if (btmTypeDTO.isLifeCycleFlag()){
+			// 闇�瑕佹帶鍒剁敓鍛藉懆鏈�
+			//妫�鏌ヤ娇鐢ㄧ殑鐢熷懡鍛ㄦ湡鏄惁瀛樺湪
+//				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()});
+//					}
+//				}
+			btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP));
+		}
+		if (btmTypeDTO.isSecretFlag()){
+			// 闇�瑕佹帶鍒跺瘑绾�
+			btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP));
+		}
+		if (StringUtils.isBlank(btmTypeDTO.getOid())) {
+			btmTypeDTO.setOid(VciBaseUtil.getPk());
+		}
+	}
+	@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/service/impl/ModifyAtributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/ModifyAtributeServiceImpl.java
new file mode 100644
index 0000000..1849cb5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/ModifyAtributeServiceImpl.java
@@ -0,0 +1,29 @@
+package com.vci.ubcs.omd.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import com.vci.ubcs.omd.mapper.ModifyAttributeInfoMapper;
+import com.vci.ubcs.omd.service.IModifyAttributeService;
+import org.springframework.stereotype.Service;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * Description: 闇�瑕佷慨鏀规暟鎹簱琛ㄤ腑瀛楁鐨勪俊鎭湇鍔″疄鐜扮被
+ *
+ * @author LiHang
+ * @date 2023/5/4
+ */
+@Service
+public class ModifyAtributeServiceImpl extends ServiceImpl<ModifyAttributeInfoMapper, ModifyAttributeInfo> implements IModifyAttributeService {
+	@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/service/impl/OmdAttributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdAttributeServiceImpl.java
deleted file mode 100644
index 1b53f5f..0000000
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdAttributeServiceImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.vci.ubcs.omd.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-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.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 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 javax.validation.constraints.NotEmpty;
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * Description: 鍏冩暟鎹�(灞炴��)鐨勬湇鍔�
- *
- * @author LiHang
- * @date 2023/4/3
- */
-@Service
-public class OmdAttributeServiceImpl extends ServiceImpl<OmdAttributeMapper, OmdAttribute>  implements IOmdAttributeService {
-
-	@Override
-	public boolean deleteLogic(@NotEmpty List<Long> ids) {
-		return false;
-	}
-
-	@Override
-	public boolean changeStatus(@NotEmpty List<Long> ids, Integer status) {
-		return false;
-	}
-
-	/**
-	 * 鑾峰彇鍏冩暟鎹鎯�
-	 *
-	 * @param id 涓婚敭
-	 * @return 鍏冩暟鎹樉绀哄璞�
-	 */
-	@Override
-	public OmdAttributeVO getAttributeDetail(Long id) {
-		Func.requireNotNull(id,"涓婚敭涓嶈兘涓虹┖");
-		return OmdAttributeWrapper.build().entityVO(baseMapper.selectByPrimaryKey(id));
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 *
-	 * @param dto 椤甸潰浼犺緭瀵硅薄
-	 * @return 鎵ц缁撴灉
-	 */
-	@Override
-	public boolean submit(OmdAttributeDTO dto) {
-		LambdaQueryWrapper<OmdAttribute> wrapper = Wrappers.<OmdAttribute>query().lambda().eq(OmdAttribute::getKey, dto.getKey());
-		Long count = baseMapper.selectCount((Func.isEmpty(dto.getId())) ? wrapper : wrapper.notIn(OmdAttribute::getId, dto.getId()));
-		if (count > 0L) {
-			throw new ServiceException("灞炴�у悕宸插瓨鍦�!");
-		}
-		dto.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		OmdAttribute omdAttribute = BeanUtil.copy(dto, OmdAttribute.class);
-		CacheUtil.clear(OmdCacheConstant.ATTR_CACHE);
-		return saveOrUpdate(omdAttribute);
-	}
-
-	/**
-	 * 鍒犻櫎
-	 *
-	 * @param ids 涓婚敭闆嗗悎
-	 * @return 鎵ц缁撴灉
-	 */
-	@Override
-	public boolean removeAttrs(String ids) {
-		List<Long> idList = Func.toLongList(ids);
-		return !deleteLogic(idList) && removeByIds(idList);
-	}
-
-	/**
-	 * 鏌ョ湅搴旂敤鑼冨洿
-	 *
-	 * @param id 涓婚敭
-	 * @return 鏌ヨ宸插簲鐢ㄧ殑涓氬姟绫诲瀷鍚嶇О
-	 */
-	@Override
-	public List<String> applyRange(Long id) {
-		return new ArrayList<>();
-	}
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/AttributeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/AttributeWrapper.java
new file mode 100644
index 0000000..15dbf9b
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/AttributeWrapper.java
@@ -0,0 +1,53 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.entity.Attribute;
+import com.vci.ubcs.omd.vo.*;
+import com.vci.ubcs.system.cache.DictBizCache;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.StringUtil;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+/**
+ * 鍏冩暟鎹璞$殑鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+public class AttributeWrapper extends BaseEntityWrapper<Attribute, AttributeVO> {
+
+	public static AttributeWrapper build() {
+		return new AttributeWrapper();
+	}
+
+	/**
+	 * do2vo
+	 * @param entity pojo
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	@Override
+	public AttributeVO entityVO(Attribute entity) {
+		AttributeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, AttributeVO.class));
+		vo.setTypeValue(DictBizCache.getValue(vo.getTypeCode(),vo.getTypeKey()));
+		if (StringUtil.isNotBlank(vo.getReferTypeCode())){
+			vo.setReferTypeValue(DictBizCache.getValue(vo.getReferTypeCode(),vo.getReferTypeKey()));
+		}
+		if (StringUtil.isNotBlank(vo.getDictCode())){
+			vo.setDictValue(DictBizCache.getValue(vo.getDictCode(),vo.getDictKey()));
+		}
+		return vo;
+	}
+
+	/**
+	 * 鎵归噺杞瑅o
+	 * @param list pojo闆嗗悎
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	public List<AttributeVO> listEntityVO(List<Attribute> list) {
+		return list.stream().map(this::entityVO).collect(Collectors.toList());
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java
new file mode 100644
index 0000000..dfb98cc
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java
@@ -0,0 +1,62 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
+import com.vci.ubcs.omd.entity.BtmTypeAttribute;
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+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 BtmTypeAttributeWrapper extends BaseEntityWrapper<BtmTypeAttribute, BtmTypeAttributeVO> {
+
+	public static BtmTypeAttributeWrapper build() {
+		return new BtmTypeAttributeWrapper();
+	}
+
+	/**
+	 * do2vo
+	 * @param entity pojo
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	@Override
+	public BtmTypeAttributeVO entityVO(BtmTypeAttribute entity) {
+		BtmTypeAttributeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, BtmTypeAttributeVO.class));
+		// 鍦ㄨ繖閲岃缃灇涓炬樉绀哄��
+		return vo;
+	}
+
+	/**
+	 * 鎵归噺杞瑅o
+	 * @param list pojo闆嗗悎
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	public List<BtmTypeAttributeVO> listEntityVO(List<BtmTypeAttribute> list) {
+		return list.stream().map(this::entityVO).collect(Collectors.toList());
+	}
+
+	/**
+	 * 鎷疯礉涓氬姟绫诲瀷 鏁版嵁浼犺緭瀵硅薄鍒� 鏁版嵁瀵硅薄
+	 *
+	 * @param dto 涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
+	 * @param creator    鍒涘缓浜�
+	 * @param now        褰撴椂鏃堕棿
+	 */
+	public BtmTypeAttribute copyBtmTypeAttributeDTO2Entity(BtmTypeLinkAttributesDTO dto, String btmTypeOid, String creator, Date now){
+		BtmTypeAttribute entity = Objects.requireNonNull(BeanUtil.copy(dto, BtmTypeAttribute.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/BtmTypeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java
new file mode 100644
index 0000000..744366a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java
@@ -0,0 +1,95 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.dto.BtmTypeDTO;
+import com.vci.ubcs.omd.entity.BtmType;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.secure.utils.AuthUtil;
+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 BtmTypeWrapper extends BaseEntityWrapper<BtmType, BtmTypeVO> {
+	public static BtmTypeWrapper build() {
+		return new BtmTypeWrapper();
+	}
+
+	/**
+	 * do2vo
+	 * @param entity pojo
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	@Override
+	public BtmTypeVO entityVO(BtmType entity) {
+		BtmTypeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, BtmTypeVO.class));
+		// 鍦ㄨ繖閲岃缃灇涓炬樉绀哄��
+		vo.setRevisionFlag(BooleanEnum.TRUE.getValue().equals(entity.getRevisionFlag()));
+		vo.setSecretFlag(BooleanEnum.TRUE.getValue().equals(entity.getSecretFlag()));
+		vo.setLifeCycleFlag(BooleanEnum.TRUE.getValue().equals(entity.getLifeCycleFlag()));
+		vo.setInputRevisionFlag(BooleanEnum.TRUE.getValue().equals(entity.getInputRevisionFlag()));
+		vo.setViewFlag(BooleanEnum.TRUE.getValue().equalsIgnoreCase(entity.getViewFlag()));
+		vo.setAbstractFlag(BooleanEnum.TRUE.getValue().equals(entity.getAbstractFlag()));
+		return vo;
+	}
+
+	/**
+	 * 鎵归噺杞瑅o
+	 * @param list pojo闆嗗悎
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	public List<BtmTypeVO> listEntityVO(List<BtmType> list) {
+		return list.stream().map(this::entityVO).collect(Collectors.toList());
+	}
+
+	/**
+	 * 鎷疯礉涓氬姟绫诲瀷 鏁版嵁浼犺緭瀵硅薄鍒� 鏁版嵁瀵硅薄
+	 *
+	 * @param dto 涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
+	 * @param creator    鍒涘缓浜�
+	 * @param now        褰撴椂鏃堕棿
+	 */
+	public BtmType copyBtmTypeDTO2Entity(BtmTypeDTO dto, String creator, Date now){
+		BtmType entity = Objects.requireNonNull(BeanUtil.copy(dto, BtmType.class));
+		entity.setLastModifier(creator);
+		entity.setTs(now);
+		// 鍦ㄨ繖杩涜閫氱敤瀛楁澶勭悊
+		return entity;
+	}
+
+	public BtmType entityBeforeInsert(BtmType btmType) {
+		btmType = entityBeforeSave(btmType);
+		String userAccount = AuthUtil.getUserAccount();
+		btmType.setOwner(userAccount);
+		btmType.setCreator(userAccount);
+		Date now = new Date();
+		btmType.setCreateTime(now);
+		return btmType;
+	}
+
+	/**
+	 * 鎻掑叆鍓嶅寘瑁呴粯璁ゅ瓧娈�
+	 * @param btmTypeDO do鏁版嵁
+	 * @return 鍖呰鍚�
+	 */
+	public BtmType entityBeforeSave(BtmType btmTypeDO) {
+		btmTypeDO.setOid(VciBaseUtil.getPk());
+		btmTypeDO.setBtmname("btmType");
+		Date now  = new Date();
+		String userAccount = AuthUtil.getUserAccount();
+		btmTypeDO.setLastModifier(userAccount);
+		btmTypeDO.setLastModifyTime(now);
+		btmTypeDO.setTs(now);
+		return btmTypeDO;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/FiledRangeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/FiledRangeWrapper.java
new file mode 100644
index 0000000..6f68fab
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/FiledRangeWrapper.java
@@ -0,0 +1,43 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.entity.FieldRange;
+import com.vci.ubcs.omd.vo.FieldRangeVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * Description: 瀛楁鑼冨洿鐨勫寘瑁呯被
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+public class FiledRangeWrapper extends BaseEntityWrapper<FieldRange, FieldRangeVO> {
+
+	public static FiledRangeWrapper build() {
+		return new FiledRangeWrapper();
+	}
+
+	/**
+	 * do2vo
+	 * @param entity pojo
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	@Override
+	public FieldRangeVO entityVO(FieldRange entity) {
+		FieldRangeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, FieldRangeVO.class));
+		return vo;
+	}
+
+	/**
+	 * 鎵归噺杞瑅o
+	 * @param list pojo闆嗗悎
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	public List<FieldRangeVO> listEntityVO(List<FieldRange> list) {
+		return list.stream().map(this::entityVO).collect(Collectors.toList());
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java
new file mode 100644
index 0000000..b024482
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import com.vci.ubcs.omd.vo.ModifyAttributeInfoVO;
+import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.secure.utils.AuthUtil;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/5/4
+ */
+public class ModifyAttributeWrapper extends BaseEntityWrapper<ModifyAttributeInfo, ModifyAttributeInfoVO> {
+
+	public static ModifyAttributeWrapper build() {
+		return new ModifyAttributeWrapper();
+	}
+
+	@Override
+	public ModifyAttributeInfoVO entityVO(ModifyAttributeInfo entity) {
+		return null;
+	}
+
+	public List<ModifyAttributeInfo> listEntityBeforeSave(List<ModifyAttributeInfo> dataList){
+		dataList.forEach(data -> {
+			data.setOid(VciBaseUtil.getPk());
+			data.setCreateTime(new Date());
+			data.setCreator(AuthUtil.getUserAccount());
+			data.setBtmname("modifyAttributeInfo");
+			data.setHandleDate(new Date());
+			data.setHandleFinishFlag(BooleanEnum.TRUE.getValue());
+			data.setHandleUserName(AuthUtil.getUserAccount());
+		});
+		return dataList;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdAttributeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdAttributeWrapper.java
deleted file mode 100644
index b53cd91..0000000
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdAttributeWrapper.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.vci.ubcs.omd.wrapper;
-
-import com.vci.ubcs.omd.entity.OmdAttribute;
-import com.vci.ubcs.omd.vo.*;
-import com.vci.ubcs.system.cache.DictBizCache;
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.StringUtil;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-
-/**
- * 鍏冩暟鎹璞$殑鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
- *
- * @author LiHang
- * @date 2023/4/3
- */
-public class OmdAttributeWrapper extends BaseEntityWrapper<OmdAttribute, OmdAttributeVO> {
-
-	public static OmdAttributeWrapper build() {
-		return new OmdAttributeWrapper();
-	}
-
-	/**
-	 * do2vo
-	 * @param entity pojo
-	 * @return 鏄剧ず瀵硅薄
-	 */
-	@Override
-	public OmdAttributeVO entityVO(OmdAttribute entity) {
-		OmdAttributeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, OmdAttributeVO.class));
-		vo.setTypeValue(DictBizCache.getValue(vo.getTypeCode(),vo.getTypeKey()));
-		if (StringUtil.isNotBlank(vo.getReferTypeCode())){
-			vo.setReferTypeValue(DictBizCache.getValue(vo.getReferTypeCode(),vo.getReferTypeKey()));
-		}
-		if (StringUtil.isNotBlank(vo.getDictCode())){
-			vo.setDictValue(DictBizCache.getValue(vo.getDictCode(),vo.getDictKey()));
-		}
-		return vo;
-	}
-
-	/**
-	 * 鎵归噺杞瑅o
-	 * @param list pojo闆嗗悎
-	 * @return 鏄剧ず瀵硅薄
-	 */
-	public List<OmdAttributeVO> listEntityVO(List<OmdAttribute> list) {
-		return list.stream().map(this::entityVO).collect(Collectors.toList());
-	}
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdFiledRangeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdFiledRangeWrapper.java
deleted file mode 100644
index 60090b0..0000000
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdFiledRangeWrapper.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.vci.ubcs.omd.wrapper;
-
-import com.vci.ubcs.omd.entity.OmdFieldRange;
-import com.vci.ubcs.omd.vo.OmdFieldRangeVO;
-import org.springblade.core.mp.support.BaseEntityWrapper;
-import org.springblade.core.tool.utils.BeanUtil;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-/**
- * Description: 瀛楁鑼冨洿鐨勫寘瑁呯被
- *
- * @author LiHang
- * @date 2023/4/3
- */
-public class OmdFiledRangeWrapper extends BaseEntityWrapper<OmdFieldRange, OmdFieldRangeVO> {
-
-	public static OmdFiledRangeWrapper build() {
-		return new OmdFiledRangeWrapper();
-	}
-
-	/**
-	 * do2vo
-	 * @param entity pojo
-	 * @return 鏄剧ず瀵硅薄
-	 */
-	@Override
-	public OmdFieldRangeVO entityVO(OmdFieldRange entity) {
-		OmdFieldRangeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, OmdFieldRangeVO.class));
-		return vo;
-	}
-
-	/**
-	 * 鎵归噺杞瑅o
-	 * @param list pojo闆嗗悎
-	 * @return 鏄剧ず瀵硅薄
-	 */
-	public List<OmdFieldRangeVO> listEntityVO(List<OmdFieldRange> list) {
-		return list.stream().map(this::entityVO).collect(Collectors.toList());
-	}
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/AttributeMapper.xml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/AttributeMapper.xml
new file mode 100644
index 0000000..89528cf
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/AttributeMapper.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.omd.mapper.AttributeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="baseResultMap" type="com.vci.ubcs.omd.entity.Attribute">
+        <id column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="key" property="key"/>
+        <result column="label" property="label"/>
+        <result column="create_user" property="createUser" jdbcType="NUMERIC"/>
+        <result column="create_dept" property="createDept" jdbcType="NUMERIC"/>
+        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
+        <result column="update_user" property="updateUser" jdbcType="NUMERIC"/>
+        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
+        <result column="status" property="status" jdbcType="NUMERIC"/>
+        <result column="is_deleted" property="isDeleted" jdbcType="NUMERIC"/>
+        <result column="tenant_id" property="tenantId" jdbcType="NUMERIC"/>
+        <result column="key" property="key" jdbcType="VARCHAR"/>
+        <result column="label" property="label" 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.Attribute">
+        <result column="nullable" property="nullable" jdbcType="VARCHAR"/>
+        <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_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_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"/>
+    </resultMap>
+
+
+
+
+</mapper>
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
deleted file mode 100644
index 081ee38..0000000
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/OmdAttributeMapper.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.vci.ubcs.omd.mapper.OmdAttributeMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="baseResultMap" type="com.vci.ubcs.omd.entity.OmdAttribute">
-        <id column="id" property="id"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_dept" property="createDept"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="tenant_id" property="tenantId"/>
-        <result column="key" property="key"/>
-        <result column="label" property="label"/>
-        <result column="create_user" property="createUser" jdbcType="NUMERIC"/>
-        <result column="create_dept" property="createDept" jdbcType="NUMERIC"/>
-        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
-        <result column="update_user" property="updateUser" jdbcType="NUMERIC"/>
-        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
-        <result column="status" property="status" jdbcType="NUMERIC"/>
-        <result column="is_deleted" property="isDeleted" jdbcType="NUMERIC"/>
-        <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"/>
-    </resultMap>
-
-    <resultMap id="extraResultMap" type="com.vci.ubcs.omd.entity.OmdAttribute">
-        <result column="nullable" property="nullable" jdbcType="VARCHAR"/>
-        <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_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="default_value" property="defaultValue" jdbcType="VARCHAR"/>
-        <result column="calculate_type" property="calculateType" jdbcType="VARCHAR"/>
-        <result column="calculate_value" property="calculateValue" jdbcType="VARCHAR"/>
-    </resultMap>
-
-
-
-
-</mapper>

--
Gitblit v1.9.3