From 82a410d9ec7a5d15eed27e9990cff371feab43a1 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期一, 27 三月 2023 18:25:38 +0800
Subject: [PATCH] 新增编码规则服务

---
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java   |   62 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateMapVO.java                     |   96 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataDaoImpl.java                                |  213 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntAuthorityDTO.java                                     |  124 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeDefaultLC.java                                            |  159 
 Source/BladeX/blade-service/blade-code/src/main/resources/application-dev.yml                                                                     |   94 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTempMapItemController.java                       |  115 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeButtonDaoI.java                                                 |  141 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntInfoDaoImpl.java                                         |  212 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxxxxxxxx.json                        |   75 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyValueDO.java                                          |  108 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateButtonDaoI.java                                 |  127 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeBasicSecDaoI.java                                               |  148 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeCutTypeEnum.java                                           |  135 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeResembleRuleDaoI.java                                           |  141 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessTempDO.java                                    |  169 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsErpClientUtil.java                                              |   59 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeRuleVO.java                                    |   72 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDataVO.java                        |  119 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java                      |  342 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSynonymVO.java                                 |  103 
 Source/BladeX/blade-service/blade-code/pom.xml                                                                                                    |  145 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeKeyAttrRepeatRuleDaoI.java                                      |  148 
 Source/BladeX/blade-service/blade-code/src/main/resources/application.yml                                                                         |    7 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java                |   73 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/result.json                                   |   10 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingServiceI.java                                        |   89 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java                              |  261 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataDTO.java                                 |  244 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyValueVO.java                           |  133 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeButtonUseEnum.java                                         |  140 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDO.java       |   26 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyDaoImpl.java                                       |  517 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderSecDTO.java                                        |   44 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateDO.java                                       |   93 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataAttributeVO.java                  |  112 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDatasVO.java                       |   27 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodePhaseAttrDO.java                                              |   93 
 Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml                                                                   |    1 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeFixedValueDaoI.java                                             |  127 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyProcessTempVO.java                     |  167 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionsVO.java                         |   26 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeRuleDO.java                                                   |   79 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateButtonServiceI.java                         |  133 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeApplySyncController.java                                 |  169 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateAttrDTO.java                            | 1053 +
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeObjectDTO.java                    |   70 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/EnumVO.java                                                       |   25 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEnumIdConstant.java                                         |   78 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingScheduling.java                                       |   56 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyValueDaoImpl.java                                  |  254 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSerialAlgorithmServiceI.java                                |   18 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateButtonDTO.java                          |  155 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateMapServiceImpl.java                    |  275 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java                  |  170 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyServiceImpl.java                               | 1019 +
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntParamDTO.java                                         |   81 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/appcode.xml                           |   36 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodePhaseAttrDTO.java                                       |   64 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithm.java                                      |   37 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateAttrController.java                      |  165 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java                                      |   11 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyProcessTempServiceI.java                            |  124 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeFixedValueServiceI.java                                     |  124 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/tt.xml                                |   18 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateController.java                          |  191 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrMappingDTO.java                               |  200 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/LibraryVO.java                       |   49 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImProtRusultVO.java                            |   41 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyDaoI.java                                               |  232 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeBasicSecDaoImpl.java                                       |  268 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/result.json                              |  135 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeRuleDTO.java                                            |   40 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeDataDTO.java                          |   24 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyController.java                                  |  255 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateButtonDO.java                                 |  135 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateMapDO.java                                    |  114 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeTemplatePhaseServiceI.java                                  |  138 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingDataSyncScheduling.java                               |   56 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeTemplatePhaseDaoI.java                                          |  141 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeGetValueTypeEnum.java                                      |  130 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeKeyAttrRepeatRuleServiceI.java                              |  115 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotSaveDatVO.java                           |   55 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeTemplatePhaseDO.java                                          |   81 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultSystemVO.java             |   61 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodePhaseAttrDaoImpl.java                                      |  244 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeAllCodeDaoImpl.java                                        |  244 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSynonymServiceI.java                                        |  101 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecLengthTypeEnum.java                                     |  130 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeFixedValueDO.java                                             |   93 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionVO.java                          |   60 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryClassifyVO.java                 |   23 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java                   |  726 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/PreApplyCodeOrderDTO.java                                   |  106 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMap.java                                       |   28 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeButtonServiceI.java                                         |  115 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTempMapItemDTO.java                             |  184 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateServiceImpl.java                       | 1084 +
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMapMethod.java                                 |   24 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryLibraryVO.java                  |   39 
 Source/BladeX/blade-service-api/blade-code-api/pom.xml                                                                                            |   66 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/tt.json                           |   62 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/UpdateSysInfoStatusDTO.java                                 |   40 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntHeaderDaoImpl.java                                       |  258 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSerialAlgorithmController.java                           |   34 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultJsonDTO.java                          |   21 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeUseButtonPositionTypeEnum.java                             |  130 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTempMapItemDO.java                                    |  181 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlUtil.java                                                      |  769 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeTemplateAttrSqlBO.java                                   |  132 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/classify.xml                         |   14 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeDuckingController.java                                   |  286 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeKeyAttrRepeatRuleDTO.java                               |   99 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingLogeDTO.java                                         |  179 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeResembleRuleDO.java                                           |  137 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/HttpUtils.java                                                    |  194 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecTypeEnum.java                                           |  157 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java                           |  212 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntAuthorityDaoImpl.java                                    |  212 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeRuleServiceImpl.java                                   |  679 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingDataDaoImpl.java                                        |  212 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeRuleController.java                                      |  166 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLifeCycleConstant.java                                      |   26 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java                                   |   19 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyProcessTempDTO.java                             |  152 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessPhaseDO.java                                   |  127 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTempMapItemServiceI.java                            |  101 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithmMethod.java                                |   23 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTempMapItemVO.java                     |  210 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataVO.java             |   19 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeFixedValueServiceImpl.java                             |  375 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeClassifyDTO.java                      |  112 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmDuckingConstant.java                                        |  146 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeImprotDataGridVO.java                                         |    4 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/update.json                                                |  111 
 Source/BladeX/blade-service/blade-code/src/main/resources/application-prod.yml                                                                    |   74 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodedataDTO.java                              |   27 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyValueController.java                             |  146 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeRuleDaoI.java                                                   |  155 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/po/CodeClassifyPO.java                                          |  169 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeButtonDTO.java                                          |   85 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyProcessTempDaoI.java                                    |  141 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeRuleDaoImpl.java                                           |  273 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEngineConstant.java                                         |  105 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeButtonController.java                                    |  137 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSerialAlgorithmVO.java                         |   72 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmBtmTypeConstant.java                                        |  169 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyProcessTempDaoImpl.java                            |  244 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeTemplatePhaseDTO.java                                   |   80 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ProppertyVO.java                        |   56 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSynonymDO.java                                                |  121 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionVO.java                          |   42 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSerialValueDaoI.java                                            |  127 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSerialAlgorithmServiceImpl.java                        |   61 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingLogeDaoImpl.java                                        |  213 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/clsfAttrMap.xml                       |   54 
 Source/BladeX/blade-service/pom.xml                                                                                                               |    1 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoBseDTO.java                                       |   46 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/CodeApplication.java                                                    |   36 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyProcessTempController.java                       |  130 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeKeyAttrRepeatRuleController.java                         |  116 
 Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java                                |   27 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeFixedValueController.java                                |  142 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderDTO.java                                           |   92 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotDataVO.java                              |  132 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTempMapItemServiceImpl.java                    |  295 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfysVO.java         |   21 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataInfoDTO.java                             |  126 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlData.java                                                      |  143 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeAllCodeDO.java                                                |  168 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingTaskDaoImpl.java                                        |  212 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeDataDTO.java                      |   28 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingDataDTO.java                                         |  120 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxx.json                              |   24 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/xx.xml                                   |    9 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingSyncServiceImpl.java                            |  630 
 Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java                                   |    5 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/algorithm/CustomSerialAlgorithmExample.java                             |   20 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/GeneralMappingUtil.java               |   30 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/gennerAttrMapUtil.java                                            |   45 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfyVO.java                          |   83 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateMapServiceI.java                            |  100 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultVO.java                            |   21 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeClassifyFullInfoBO.java                                  |   66 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLinkTypeConstant.java                                       |   13 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeCompPreviewDTO.java                                     |   42 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/RootDataVO.java                         |   58 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryData.java                       |   45 
 Source/BladeX/blade-service-api/pom.xml                                                                                                           |    1 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeAllCodeDaoI.java                                                |  141 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateDaoI.java                                       |  169 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTempMapItemDaoI.java                                    |  127 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeFixedValueVO.java                              |   83 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeSynonymDTO.java                                         |  104 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyVO.java                                |  263 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ClassifyVO.java                      |  112 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntBaseDTO.java                                          |   26 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultDataVO.java                        |   47 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictService.java                                           |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateDaoImpl.java                               |  319 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeTemplatePhaseController.java                             |  137 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeClassifyProcessUseEnum.java                                |  150 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeAllCodeLC.java                                            |  165 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateAttrDO.java                                   |  858 +
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsAxis2ClientUtil.java                                            |   59 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java                            |  212 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeResembleRuleServiceI.java                                   |  101 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateServiceI.java                               |  200 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/UserVO.java                             |   56 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/DateUtils.java                                                    |  527 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingSyncServiceI.java                                    |   48 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/InterParameterVO.java                   |   21 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeBasicSecServiceI.java                                       |  186 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultClassifyVO.java                |   21 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/PropertyVO.java                          |   48 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeButtonDaoImpl.java                                         |  244 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSynonymServiceImpl.java                                |  275 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java                    | 1071 +
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingTaskDTO.java                                         |  197 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrMappingDaoImpl.java                              |  202 
 Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java                                 |    1 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/xxx.json                             |   68 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeBasicSecDO.java                                               |  728 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeBasicSecServiceImpl.java                               |  831 +
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSerialValueDO.java                                            |   88 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeExportAttrDTO.java                                      |  134 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataObjectVO.java                     |   24 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeButtonVO.java                                  |   98 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java                         |  212 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Json2XmlUtil.java                                                 |  121 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeDeleteBatchDTO.java                                     |   49 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateMapDaoI.java                                    |  141 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeResembleRuleController.java                              |  115 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyServiceI.java                                       |  240 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntParamDaoImpl.java                                        |  257 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeKeyAttrRepeatRuleDO.java                                      |  120 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/AttributeMapConfig.java                                           |   33 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeBasicSecDTO.java                                        |  669 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfysVO.java                         |   30 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java                 |  380 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeRuleLC.java                                               |  144 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultSystemVO.java           |   52 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeResembleRuleDTO.java                                    |  118 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryClsfDO.java                    |   42 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/BackXml.java                                                      |   42 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateButtonController.java                    |  115 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportTemplateVO.java                          |   42 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeObjectDTO.java                            |   71 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionsVO.java                         |   48 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/JsonRootDataDTO.java                      |   21 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataCondtionsVO.java                     |   20 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyDO.java                                               |  276 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodePhaseAttrVO.java                               |   77 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultClassfyVO.java            |   60 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyDTO.java                                        |  226 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSynonymController.java                                   |  115 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateMapController.java                       |  115 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/tt.xml                                                     |   20 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodePhaseAttrServiceI.java                                      |  107 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoDTO.java                                          |  664 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeLibraryDTO.java                       |   50 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeJosnDTO.java                              |   21 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodePhaseAttrServiceImpl.java                              |  299 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java                            |  213 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrRangeDTO.java                                 |   82 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodePhaseAttrController.java                                 |  115 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportResultVO.java                            |  123 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotResembleVO.java                          |   66 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeTemplatePhaseVO.java                           |   83 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/RowDatas.java                         |  125 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeButtonDO.java                                                 |  125 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyValueServiceImpl.java                          |  479 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeLevelTypeEnum.java                                         |  135 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateDTO.java                                |  104 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateVO.java                        |  105 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/data.json                                     |  137 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeResembleRuleServiceImpl.java                           |  277 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryDO.java                        |   33 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSynonymDaoI.java                                                |  127 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeBasicSecVO.java                                |  651 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeButtonServiceImpl.java                                 |  322 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeTemplatePhaseServiceImpl.java                          |  506 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyProcessTempServiceImpl.java                    |  356 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotParmaDatVO.java                          |   41 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultData.java                      |   45 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeFixedValueDaoImpl.java                                     |  219 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntBaseDaoImpl.java                                         |  212 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingServiceImpl.java                                | 1103 +
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfyVO.java          |   49 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateAttrServiceI.java                           |  133 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeRuleServiceI.java                                           |  175 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeImprotDataDTO.java                                      |   66 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/data.xml                                  |  218 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Pro.java                                                          |   40 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeFixedValueDTO.java                                      |   84 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntHeaderDTO.java                                        |   80 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeResembleRuleVO.java                            |  119 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeClassifyTemplateLC.java                                   |  144 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/PatternUtil.java                                                  |   49 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java                       |   98 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataObjectVO.java                        |   72 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyValueDaoI.java                                          |  147 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeResembleRuleDaoImpl.java                                   |  244 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyValueDTO.java                                   |  104 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodePhaseAttrDaoI.java                                              |  141 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java                            |  244 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeProDTO.java                               |   47 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeTemplatePhaseDaoImpl.java                                  |  244 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateAttrDaoI.java                                   |  127 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeBasicSecController.java                                  |  190 
 Source/BladeX/blade-ops/blade-flow/src/main/resources/mapper/FlowMapper.xml                                                                       |   53 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyValueServiceI.java                                  |  152 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeMapRuleTypeEnum.java                                       |  145 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateMapDTO.java                             |   96 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSynonymDaoImpl.java                                        |  212 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java |   62 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingClassSyncScheduling.java                              |   56 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrRangeDaoImpl.java                                |  202 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyAttributeVO.java                       |   63 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataVO.java               |   19 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSerialValueDaoImpl.java                                    |  212 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/classfy.json                              |   18 
 322 files changed, 49,518 insertions(+), 48 deletions(-)

diff --git a/Source/BladeX/blade-ops/blade-flow/src/main/resources/mapper/FlowMapper.xml b/Source/BladeX/blade-ops/blade-flow/src/main/resources/mapper/FlowMapper.xml
new file mode 100644
index 0000000..a7af970
--- /dev/null
+++ b/Source/BladeX/blade-ops/blade-flow/src/main/resources/mapper/FlowMapper.xml
@@ -0,0 +1,53 @@
+<?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="org.springblade.flow.engine.mapper.FlowMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="flowModelResultMap" type="org.springblade.flow.engine.entity.FlowModel">
+        <result column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="model_key" property="modelKey"/>
+        <result column="description" property="description"/>
+        <result column="model_comment" property="modelComment"/>
+        <result column="created" property="created"/>
+        <result column="created_by" property="createdBy"/>
+        <result column="last_updated" property="lastUpdated"/>
+        <result column="last_updated_by" property="lastUpdatedBy"/>
+        <result column="version" property="version"/>
+        <result column="model_editor_json" property="modelEditorJson"/>
+        <result column="thumbnail" property="thumbnail"/>
+        <result column="model_type" property="modelType"/>
+        <result column="tenant_id" property="tenantId"/>
+    </resultMap>
+
+    <select id="selectFlowPage" resultMap="flowModelResultMap">
+        SELECT
+            a.id,
+            a.name,
+            a.model_key,
+            a.description,
+            a.model_comment,
+            a.created,
+            a.created_by,
+            a.last_updated,
+            a.last_updated_by,
+            a.version,
+            a.model_editor_json,
+            a.thumbnail,
+            a.model_type,
+            a.tenant_id
+        FROM
+            ACT_DE_MODEL a
+        WHERE
+            1 = 1
+        ORDER BY
+            a.created DESC
+    </select>
+
+    <select id="findByParentModelId" parameterType="string" resultMap="flowModelResultMap">
+        select model.* from ACT_DE_MODEL_RELATION modelrelation
+                                inner join ACT_DE_MODEL model on modelrelation.model_id = model.id
+        where modelrelation.parent_model_id = #{_parameter}
+    </select>
+
+</mapper>
diff --git a/Source/BladeX/blade-service-api/blade-code-api/pom.xml b/Source/BladeX/blade-service-api/blade-code-api/pom.xml
new file mode 100644
index 0000000..40bedd7
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/pom.xml
@@ -0,0 +1,66 @@
+<?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>
+        <groupId>org.springblade</groupId>
+        <artifactId>blade-service-api</artifactId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <artifactId>blade-code-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <dependencies>
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-starter-web</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>
+            <artifactId>vci-platform-web</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-platform-webservice</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.vci.mdm</groupId>
+            <artifactId>vci-mdm-wrj-webducking</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>de.odysseus.staxon</groupId>
+            <artifactId>staxon</artifactId>
+            <version>1.3</version>
+        </dependency>
+    </dependencies>
+    <packaging>jar</packaging>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+</project>
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeClassifyFullInfoBO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeClassifyFullInfoBO.java
new file mode 100644
index 0000000..8f20b14
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeClassifyFullInfoBO.java
@@ -0,0 +1,66 @@
+package org.springblade.code.bo;
+
+import org.springblade.code.vo.pagemodel.CodeClassifyVO;
+
+import java.util.List;
+
+/**
+ * 涓婚搴撳垎绫荤浉鍏崇殑鍏ㄩ儴淇℃伅
+ * @author weidy
+ * @date 2022-2-25
+ */
+public class CodeClassifyFullInfoBO implements java.io.Serializable{
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 7416865011120729907L;
+    /**
+     * 涓婄骇鐨勫垎绫�
+     */
+    private List<CodeClassifyVO> parentClassifyVOs;
+
+    /**
+     * 椤跺眰鍒嗙被
+     */
+    private CodeClassifyVO topClassifyVO;
+
+    /**
+     * 褰撳墠鍒嗙被鐨勪俊鎭�
+     */
+    private CodeClassifyVO currentClassifyVO;
+
+
+    public List<CodeClassifyVO> getParentClassifyVOs() {
+        return parentClassifyVOs;
+    }
+
+    public void setParentClassifyVOs(List<CodeClassifyVO> parentClassifyVOs) {
+        this.parentClassifyVOs = parentClassifyVOs;
+    }
+
+    public CodeClassifyVO getTopClassifyVO() {
+        return topClassifyVO;
+    }
+
+    public void setTopClassifyVO(CodeClassifyVO topClassifyVO) {
+        this.topClassifyVO = topClassifyVO;
+    }
+
+    public CodeClassifyVO getCurrentClassifyVO() {
+        return currentClassifyVO;
+    }
+
+    public void setCurrentClassifyVO(CodeClassifyVO currentClassifyVO) {
+        this.currentClassifyVO = currentClassifyVO;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyFullInfo{" +
+                "parentClassifyVOs=" + parentClassifyVOs +
+                ", topClassifyVO=" + topClassifyVO +
+                ", currentClassifyVO=" + currentClassifyVO +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeTemplateAttrSqlBO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeTemplateAttrSqlBO.java
new file mode 100644
index 0000000..5c26424
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/bo/CodeTemplateAttrSqlBO.java
@@ -0,0 +1,132 @@
+package org.springblade.code.bo;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 妯℃澘灞炴�х殑Sql
+ * @author weidy
+ * @date 2022-04-11
+ */
+public class CodeTemplateAttrSqlBO implements java.io.Serializable{
+
+    /**
+     * 琛ㄥ悕
+     */
+    private String tableName;
+
+    /**
+     * 鏄电О
+     */
+    private String nickName;
+
+    /**
+     * 鍏宠仈鐨勮〃
+     */
+    private Map<String/**灞炴�у瓧娈�**/,String> joinTable;
+
+    /**
+     * 鍒嗛〉瀵硅薄
+     */
+    private PageHelper pageHelper;
+
+    /**
+     * 鍖呭惈鍒嗛〉鐨剆ql璇彞
+     */
+    private String sqlHasPage;
+
+    /**
+     * 涓嶅寘鍚垎椤电殑sql璇彞
+     */
+    private String sqlUnPage;
+
+    /**
+     * 鏌ヨ鎬绘暟鐨凷ql璇彞
+     */
+    private String sqlCount;
+
+    /**
+     * 鏈鏌ヨ鐨勫瓧娈�
+     */
+    private  List<String> selectFieldList;
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
+    public Map<String, String> getJoinTable() {
+        return joinTable;
+    }
+
+    public void setJoinTable(Map<String, String> joinTable) {
+        this.joinTable = joinTable;
+    }
+
+    public PageHelper getPageHelper() {
+        return pageHelper;
+    }
+
+    public void setPageHelper(PageHelper pageHelper) {
+        this.pageHelper = pageHelper;
+    }
+
+    public String getSqlHasPage() {
+        return sqlHasPage;
+    }
+
+    public void setSqlHasPage(String sqlHasPage) {
+        this.sqlHasPage = sqlHasPage;
+    }
+
+    public String getSqlUnPage() {
+        return sqlUnPage;
+    }
+
+    public void setSqlUnPage(String sqlUnPage) {
+        this.sqlUnPage = sqlUnPage;
+    }
+
+    public String getSqlCount() {
+        return sqlCount;
+    }
+
+    public void setSqlCount(String sqlCount) {
+        this.sqlCount = sqlCount;
+    }
+
+    public List<String> getSelectFieldList() {
+        return selectFieldList;
+    }
+
+    public void setSelectFieldList(List<String> selectFieldList) {
+        this.selectFieldList = selectFieldList;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeTemplateAttrSqlBO{" +
+                "tableName='" + tableName + '\'' +
+                ", nickName='" + nickName + '\'' +
+                ", joinTable=" + joinTable +
+                ", pageHelper=" + pageHelper +
+                ", sqlHasPage='" + sqlHasPage + '\'' +
+                ", sqlUnPage='" + sqlUnPage + '\'' +
+                ", sqlCount='" + sqlCount + '\'' +
+                ", selectFieldList=" + selectFieldList +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeBasicSecDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeBasicSecDTO.java
new file mode 100644
index 0000000..d968aca
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeBasicSecDTO.java
@@ -0,0 +1,669 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeBasicSecDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117949969514L;
+
+	/**
+	 * 鐮佹绫诲瀷
+	 */
+	private String sectype;
+
+	/**
+	 * 鐮佹绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String sectypeText;
+
+	/**
+	 * 缂栫爜瑙勫垯涓婚敭
+	 */
+	private String pkCodeRule;
+
+	/**
+	 * 鐮佹鎺掑簭鍙�
+	 */
+	private Integer orderNum;
+
+	/**
+	 * 寮曠敤鐨勪笟鍔$被鍨�
+	 */
+	private String referBtmId;
+
+	/**
+	 * 寮曠敤鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	private String referBtmName;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬х殑鏂囨湰
+	 */
+	private String referAttributeName;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	private String referAttributeId;
+
+	/**
+	 * 鍙栧�艰鍒�
+	 */
+	private String getValueClass ;
+
+	//鍓嶇杈撳叆鍚庤嚜鍔ㄥ姞鍏ュ埌鏋氫妇涓�
+	/**
+	 * 鏃ユ湡鏍煎紡
+	 */
+	private String codeDateFormatStr;
+
+	/**
+	 * 鐮佹闀垮害绫诲瀷
+	 */
+	private String codeSecLengthType;
+
+	/**
+	 * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String codeSecLengthTypeText;
+
+	/**
+	 * 鐮佹闀垮害
+	 */
+	private String codeSecLength;
+
+
+	/**
+	 * 灞傜骇绫诲瀷
+	 */
+	private String codeLevelType;
+
+	/**
+	 * 灞傜骇绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String codeLevelTypeText;
+
+	/**
+	 * 灞傜骇鐨勫��
+	 */
+	private Integer codeLevelValue;
+
+	/**
+	 * 鍊兼埅鍙栭暱搴�
+	 */
+	private Integer valueCutLength;
+
+	/**
+	 * 瀛楃鎴彇绫诲瀷
+	 */
+	private String valueCutType;
+
+	/**
+	 * 瀛楃涓叉埅鍙栫被鍨嬫樉绀烘枃鏈�
+	 */
+	private String valueCutTypeText;
+
+	/**
+	 * 鍙栧�肩被鍨�
+	 */
+	private String codeGetValueType;
+
+	/**
+	 * 鍙栧�肩被鍨嬫樉绀烘枃鏈�
+	 */
+	private String codeGetValueTypeText;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ф墍灞炵殑搴撳垎绫�
+	 */
+	private String referCodeClassifyOid;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ф墍灞炲簱鍒嗙被鍚嶇О
+	 */
+	private String referCodeClassifyOidName;
+
+	/**
+	 * 鍙傜収鐨勭獥鍙i厤缃�
+	 */
+	private String referConfig;
+
+	/**
+	 * 鏄剧ず淇℃伅
+	 */
+	private String referValueInfo;
+
+	/**
+	 * 杩囨护鐨剆ql鍐呭
+	 */
+	private String filterSql ;
+
+
+	/**
+	 * 娴佹按鍙疯捣濮嬪��
+	 */
+	private String serialStart;
+
+	/**
+	 * 娴佹按鐨勬闀�
+	 */
+	private Integer serialStep;
+
+
+	/**
+	 * 缂栫爜琛ヤ綅鏂瑰紡
+	 */
+	private String codeFillType;
+
+	/**
+	 * 缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	private String codeFillTypeText;
+
+	/**
+	 * 琛ヤ綅鏃剁殑瀛楃
+	 */
+	private String codeFillSeparator;
+
+	/**
+	 * 濉厖闀垮害
+	 */
+	private String codeFillLength;
+
+	/**
+	 * 涓婇檺
+	 */
+	private Integer codeFillLimit;
+
+	/**
+	 * 娴佹按鏄惁琛ョ爜
+	 */
+	private String codeFillFlag;
+
+	/**
+	 * 鑷畾涔夌殑娴佹按绠楁硶绫�
+	 */
+	private String customCodeSerialClass;
+
+	/**
+	 * 鏄惁鑷姩鍖归厤鍒嗙被鍊�
+	 */
+	private String matchClassifyValueFlag;
+
+	/**
+	 * 鐖跺垎绫荤爜娈典富閿�
+	 */
+	private String parentClassifySecOid;
+
+	/**
+	 * 鐖跺垎绫荤爜娈靛悕绉�
+	 */
+	private String parentClassifySecText;
+
+
+	/**
+	 * 鏄惁鍙互涓虹┖
+	 */
+	private String nullableFlag;
+
+	/**
+	 * 鏄惁鍙備笌缂栫爜
+	 */
+	private String componentCodeFlag;
+
+	/**
+	 * 鏄惁娴佹按渚濊禆
+	 */
+	private String serialDependFlag;
+
+	/**
+	 * 鏄惁鏄剧ず
+	 */
+	private String displayFlag;
+
+	/**
+	 * 娴佹按渚濊禆椤哄簭
+	 */
+	private Integer serialDependOrder;
+
+	/**
+	 * 閫夋嫨鐮佹淇℃伅鐨勪富閿泦鍚�
+	 */
+	private String oidArr;
+	/**
+	 * 鑾峰彇 鐮佹绫诲瀷
+	 */
+	public String getSectype (){
+		return sectype;
+	}
+
+	/**
+	 * 璁剧疆 鐮佹绫诲瀷
+	 */
+	public void setSectype (String sectype){
+		this.sectype = sectype;
+	}
+
+	public String getSectypeText() {
+		return sectypeText;
+	}
+
+	public void setSectypeText(String sectypeText) {
+		this.sectypeText = sectypeText;
+	}
+
+	/**
+	 * 鑾峰彇缂栫爜瑙勫垯涓婚敭
+	 */
+	public String getPkCodeRule() {
+		return pkCodeRule;
+	}
+
+	/**
+	 * 璁剧疆缂栫爜瑙勫垯涓婚敭
+	 */
+	public void setPkCodeRule(String pkCodeRule) {
+		this.pkCodeRule = pkCodeRule;
+	}
+
+	/**
+	 * 鑾峰彇鐮佹闀垮害绫诲瀷
+	 */
+	public String getCodeSecLengthType() {
+		return codeSecLengthType;
+	}
+
+	/**
+	 * 璁剧疆鐮佹闀垮害绫诲瀷
+	 */
+	public void setCodeSecLengthType(String codeSecLengthType) {
+		this.codeSecLengthType = codeSecLengthType;
+	}
+
+	/**
+	 * 鑾峰彇鐮佹闀垮害
+	 */
+	public String getCodeSecLength() {
+		return codeSecLength;
+	}
+
+	/**
+	 * 璁剧疆鐮佹闀垮害
+	 */
+	public void setCodeSecLength(String codeSecLength) {
+		this.codeSecLength = codeSecLength;
+	}
+
+	public String getReferAttributeName() {
+		return referAttributeName;
+	}
+
+	public void setReferAttributeName(String referAttributeName) {
+		this.referAttributeName = referAttributeName;
+	}
+
+	public String getReferAttributeId() {
+		return referAttributeId;
+	}
+
+	public void setReferAttributeId(String referAttributeId) {
+		this.referAttributeId = referAttributeId;
+	}
+
+	public String getGetValueClass() {
+		return getValueClass;
+	}
+
+	public void setGetValueClass(String getValueClass) {
+		this.getValueClass = getValueClass;
+	}
+
+	public String getCodeDateFormatStr() {
+		return codeDateFormatStr;
+	}
+
+	public void setCodeDateFormatStr(String codeDateFormatStr) {
+		this.codeDateFormatStr = codeDateFormatStr;
+	}
+
+
+	public String getCodeLevelType() {
+		return codeLevelType;
+	}
+
+	public void setCodeLevelType(String codeLevelType) {
+		this.codeLevelType = codeLevelType;
+	}
+
+	public String getCodeLevelTypeText() {
+		return codeLevelTypeText;
+	}
+
+	public void setCodeLevelTypeText(String codeLevelTypeText) {
+		this.codeLevelTypeText = codeLevelTypeText;
+	}
+
+	public Integer getCodeLevelValue() {
+		return codeLevelValue;
+	}
+
+	public void setCodeLevelValue(Integer codeLevelValue) {
+		this.codeLevelValue = codeLevelValue;
+	}
+
+	public Integer getValueCutLength() {
+		return valueCutLength;
+	}
+
+	public void setValueCutLength(Integer valueCutLength) {
+		this.valueCutLength = valueCutLength;
+	}
+
+	public String getValueCutType() {
+		return valueCutType;
+	}
+
+	public void setValueCutType(String valueCutType) {
+		this.valueCutType = valueCutType;
+	}
+
+	public String getValueCutTypeText() {
+		return valueCutTypeText;
+	}
+
+	public void setValueCutTypeText(String valueCutTypeText) {
+		this.valueCutTypeText = valueCutTypeText;
+	}
+
+	public String getCodeGetValueType() {
+		return codeGetValueType;
+	}
+
+	public void setCodeGetValueType(String codeGetValueType) {
+		this.codeGetValueType = codeGetValueType;
+	}
+
+	public String getCodeGetValueTypeText() {
+		return codeGetValueTypeText;
+	}
+
+	public void setCodeGetValueTypeText(String codeGetValueTypeText) {
+		this.codeGetValueTypeText = codeGetValueTypeText;
+	}
+
+	public String getReferCodeClassifyOid() {
+		return referCodeClassifyOid;
+	}
+
+	public void setReferCodeClassifyOid(String referCodeClassifyOid) {
+		this.referCodeClassifyOid = referCodeClassifyOid;
+	}
+
+	public String getReferConfig() {
+		return referConfig;
+	}
+
+	public void setReferConfig(String referConfig) {
+		this.referConfig = referConfig;
+	}
+
+	public String getReferValueInfo() {
+		return referValueInfo;
+	}
+
+	public void setReferValueInfo(String referValueInfo) {
+		this.referValueInfo = referValueInfo;
+	}
+
+	public String getFilterSql() {
+		return filterSql;
+	}
+
+	public void setFilterSql(String filterSql) {
+		this.filterSql = filterSql;
+	}
+
+	public String getSerialStart() {
+		return serialStart;
+	}
+
+	public void setSerialStart(String serialStart) {
+		this.serialStart = serialStart;
+	}
+
+	public Integer getSerialStep() {
+		return serialStep;
+	}
+
+	public void setSerialStep(Integer serialStep) {
+		this.serialStep = serialStep;
+	}
+
+	public String getCodeFillType() {
+		return codeFillType;
+	}
+
+	public void setCodeFillType(String codeFillType) {
+		this.codeFillType = codeFillType;
+	}
+
+	public String getCodeFillTypeText() {
+		return codeFillTypeText;
+	}
+
+	public void setCodeFillTypeText(String codeFillTypeText) {
+		this.codeFillTypeText = codeFillTypeText;
+	}
+
+	public String getCodeFillSeparator() {
+		return codeFillSeparator;
+	}
+
+	public void setCodeFillSeparator(String codeFillSeparator) {
+		this.codeFillSeparator = codeFillSeparator;
+	}
+
+	public String getCodeFillLength() {
+		return codeFillLength;
+	}
+
+	public void setCodeFillLength(String codeFillLength) {
+		this.codeFillLength = codeFillLength;
+	}
+
+	public Integer getCodeFillLimit() {
+		return codeFillLimit;
+	}
+
+	public void setCodeFillLimit(Integer codeFillLimit) {
+		this.codeFillLimit = codeFillLimit;
+	}
+
+	public String getCodeFillFlag() {
+		return codeFillFlag;
+	}
+
+	public void setCodeFillFlag(String codeFillFlag) {
+		this.codeFillFlag = codeFillFlag;
+	}
+
+	public String getCustomCodeSerialClass() {
+		return customCodeSerialClass;
+	}
+
+	public void setCustomCodeSerialClass(String customCodeSerialClass) {
+		this.customCodeSerialClass = customCodeSerialClass;
+	}
+
+	public String getOidArr() {
+		return oidArr;
+	}
+
+	public void setOidArr(String oidArr) {
+		this.oidArr = oidArr;
+	}
+
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getCodeSecLengthTypeText() {
+		return codeSecLengthTypeText;
+	}
+
+	public void setCodeSecLengthTypeText(String codeSecLengthTypeText) {
+		this.codeSecLengthTypeText = codeSecLengthTypeText;
+	}
+
+	public String getMatchClassifyValueFlag() {
+		return matchClassifyValueFlag;
+	}
+
+	public void setMatchClassifyValueFlag(String matchClassifyValueFlag) {
+		this.matchClassifyValueFlag = matchClassifyValueFlag;
+	}
+
+	public String getParentClassifySecOid() {
+		return parentClassifySecOid;
+	}
+
+	public void setParentClassifySecOid(String parentClassifySecOid) {
+		this.parentClassifySecOid = parentClassifySecOid;
+	}
+
+	public String getParentClassifySecText() {
+		return parentClassifySecText;
+	}
+
+	public void setParentClassifySecText(String parentClassifySecText) {
+		this.parentClassifySecText = parentClassifySecText;
+	}
+
+	public String getNullableFlag() {
+		return nullableFlag;
+	}
+
+	public void setNullableFlag(String nullableFlag) {
+		this.nullableFlag = nullableFlag;
+	}
+
+	public String getComponentCodeFlag() {
+		return componentCodeFlag;
+	}
+
+	public void setComponentCodeFlag(String componentCodeFlag) {
+		this.componentCodeFlag = componentCodeFlag;
+	}
+
+	public String getSerialDependFlag() {
+		return serialDependFlag;
+	}
+
+	public void setSerialDependFlag(String serialDependFlag) {
+		this.serialDependFlag = serialDependFlag;
+	}
+
+	public String getDisplayFlag() {
+		return displayFlag;
+	}
+
+	public void setDisplayFlag(String displayFlag) {
+		this.displayFlag = displayFlag;
+	}
+
+	public Integer getSerialDependOrder() {
+		return serialDependOrder;
+	}
+
+	public void setSerialDependOrder(Integer serialDependOrder) {
+		this.serialDependOrder = serialDependOrder;
+	}
+
+	public String getReferBtmId() {
+		return referBtmId;
+	}
+
+	public void setReferBtmId(String referBtmId) {
+		this.referBtmId = referBtmId;
+	}
+
+	public String getReferBtmName() {
+		return referBtmName;
+	}
+
+	public void setReferBtmName(String referBtmName) {
+		this.referBtmName = referBtmName;
+	}
+
+	public String getReferCodeClassifyOidName() {
+		return referCodeClassifyOidName;
+	}
+
+	public void setReferCodeClassifyOidName(String referCodeClassifyOidName) {
+		this.referCodeClassifyOidName = referCodeClassifyOidName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeBasicSecDTO{" +
+				"sectype='" + sectype + '\'' +
+				", sectypeText='" + sectypeText + '\'' +
+				", pkCodeRule='" + pkCodeRule + '\'' +
+				", orderNum=" + orderNum +
+				", referBtmId='" + referBtmId + '\'' +
+				", referBtmName='" + referBtmName + '\'' +
+				", referAttributeName='" + referAttributeName + '\'' +
+				", referAttributeId='" + referAttributeId + '\'' +
+				", getValueClass='" + getValueClass + '\'' +
+				", codeDateFormatStr='" + codeDateFormatStr + '\'' +
+				", codeSecLengthType='" + codeSecLengthType + '\'' +
+				", codeSecLengthTypeText='" + codeSecLengthTypeText + '\'' +
+				", codeSecLength='" + codeSecLength + '\'' +
+				", codeLevelType='" + codeLevelType + '\'' +
+				", codeLevelTypeText='" + codeLevelTypeText + '\'' +
+				", codeLevelValue=" + codeLevelValue +
+				", valueCutLength=" + valueCutLength +
+				", valueCutType='" + valueCutType + '\'' +
+				", valueCutTypeText='" + valueCutTypeText + '\'' +
+				", codeGetValueType='" + codeGetValueType + '\'' +
+				", codeGetValueTypeText='" + codeGetValueTypeText + '\'' +
+				", referCodeClassifyOid='" + referCodeClassifyOid + '\'' +
+				", referCodeClassifyOidName='" + referCodeClassifyOidName + '\'' +
+				", referConfig='" + referConfig + '\'' +
+				", referValueInfo='" + referValueInfo + '\'' +
+				", filterSql='" + filterSql + '\'' +
+				", serialStart='" + serialStart + '\'' +
+				", serialStep=" + serialStep +
+				", codeFillType='" + codeFillType + '\'' +
+				", codeFillTypeText='" + codeFillTypeText + '\'' +
+				", codeFillSeparator='" + codeFillSeparator + '\'' +
+				", codeFillLength='" + codeFillLength + '\'' +
+				", codeFillLimit=" + codeFillLimit +
+				", codeFillFlag='" + codeFillFlag + '\'' +
+				", customCodeSerialClass='" + customCodeSerialClass + '\'' +
+				", matchClassifyValueFlag='" + matchClassifyValueFlag + '\'' +
+				", parentClassifySecOid='" + parentClassifySecOid + '\'' +
+				", parentClassifySecText='" + parentClassifySecText + '\'' +
+				", nullableFlag='" + nullableFlag + '\'' +
+				", componentCodeFlag='" + componentCodeFlag + '\'' +
+				", serialDependFlag='" + serialDependFlag + '\'' +
+				", displayFlag='" + displayFlag + '\'' +
+				", serialDependOrder=" + serialDependOrder +
+				", oidArr='" + oidArr + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeButtonDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeButtonDTO.java
new file mode 100644
index 0000000..cc173b7
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeButtonDTO.java
@@ -0,0 +1,85 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeButtonDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118494102363L;
+
+	/**
+	 * 鎸夐挳鐨勫浘鏍囨牱寮�
+	 */
+	private String iconcls;
+
+	/**
+	 * 鎵ц鐨刯s鍐呭
+	 */
+	private String executejs;
+
+	/**
+	 * 鎸夐挳鐨勪綅缃�
+	 */
+	private String usedpositiontype;
+
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勫浘鏍囨牱寮�
+	 */
+	public String getIconcls (){
+		return iconcls;
+	}
+
+	/**
+	 * 璁剧疆 鎸夐挳鐨勫浘鏍囨牱寮�
+	 */
+	public void setIconcls (String iconcls){
+		this.iconcls = iconcls;
+	}
+
+	/**
+	 * 鑾峰彇 鎵ц鐨刯s鍐呭
+	 */
+	public String getExecutejs (){
+		return executejs;
+	}
+
+	/**
+	 * 璁剧疆 鎵ц鐨刯s鍐呭
+	 */
+	public void setExecutejs (String executejs){
+		this.executejs = executejs;
+	}
+
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勪綅缃�
+	 */
+	public String getUsedpositiontype (){
+		return usedpositiontype;
+	}
+
+	/**
+	 * 璁剧疆 鎸夐挳鐨勪綅缃�
+	 */
+	public void setUsedpositiontype (String usedpositiontype){
+		this.usedpositiontype = usedpositiontype;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeButtonDTO{" +
+		"iconcls='" + iconcls +"',"+
+		"executejs='" + executejs +"',"+
+		"usedpositiontype='" + usedpositiontype +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyDTO.java
new file mode 100644
index 0000000..86dc156
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyDTO.java
@@ -0,0 +1,226 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+public class CodeClassifyDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118655590281L;
+
+	/**
+	 * 灞炴�ф帓搴忓彿
+	 */
+	private Integer ordernum;
+
+	/**
+	 * 鎵�灞炰笟鍔$被鍨�
+	 */
+	private String btmtypeid;
+
+	/**
+	 * 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	 */
+	private String btmtypename;
+
+	/**
+	 * 缂栫爜瑙勫垯鐨勪富閿�
+	 */
+	private String coderuleoid;
+
+	/**
+	 * 缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	 */
+	private String coderuleoidName;
+	/**
+	 * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	 */
+	private String codekeyattrrepeatoid;
+
+	/**
+	 * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	 */
+	private String codekeyattrrepeatoidName;
+	/**
+	 * 涓婄骇鏁版嵁鐨勪富閿�
+	 */
+	private String parentcodeclassifyoid;
+
+	/**
+	 * 鏄惁鍚敤涓嬬骇
+	 */
+	private boolean ablechildren;
+
+	/**
+	 * 鐩镐技鏌ヨ瑙勫垯涓婚敭
+	 */
+	private String codeResembleRuleOid;
+
+	/**
+	 * 鐩镐技鏌ヨ瑙勫垯鍚嶇О
+	 */
+	private String codeResembleRuleOidName;
+
+	public boolean getAblechildren() {
+		return ablechildren;
+	}
+
+	public void setAblechildren(boolean ablechildren) {
+		this.ablechildren = ablechildren;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�ф帓搴忓彿
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�ф帓搴忓彿
+	 */
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	/**
+	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨�
+	 */
+	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 getCoderuleoid (){
+		return coderuleoid;
+	}
+
+	/**
+	 * 璁剧疆 缂栫爜瑙勫垯鐨勪富閿�
+	 */
+	public void setCoderuleoid (String coderuleoid){
+		this.coderuleoid = coderuleoid;
+	}
+
+	/**
+	 * 鑾峰彇缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	 */
+	public String getCoderuleoidName (){
+		return coderuleoidName;
+	}
+
+	/**
+	 * 璁剧疆缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	 */
+	public void setCoderuleoidName (String coderuleoidName){
+		this.coderuleoidName = coderuleoidName;
+	}
+	/**
+	 * 鑾峰彇 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	 */
+	public String getCodekeyattrrepeatoid (){
+		return codekeyattrrepeatoid;
+	}
+
+	/**
+	 * 璁剧疆 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	 */
+	public void setCodekeyattrrepeatoid (String codekeyattrrepeatoid){
+		this.codekeyattrrepeatoid = codekeyattrrepeatoid;
+	}
+
+	/**
+	 * 鑾峰彇鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	 */
+	public String getCodekeyattrrepeatoidName (){
+		return codekeyattrrepeatoidName;
+	}
+
+	/**
+	 * 璁剧疆鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	 */
+	public void setCodekeyattrrepeatoidName (String codekeyattrrepeatoidName){
+		this.codekeyattrrepeatoidName = codekeyattrrepeatoidName;
+	}
+	/**
+	 * 鑾峰彇 涓婄骇鏁版嵁鐨勪富閿�
+	 */
+	public String getParentcodeclassifyoid (){
+		return parentcodeclassifyoid;
+	}
+
+	/**
+	 * 璁剧疆 涓婄骇鏁版嵁鐨勪富閿�
+	 */
+	public void setParentcodeclassifyoid (String parentcodeclassifyoid){
+		this.parentcodeclassifyoid = parentcodeclassifyoid;
+	}
+
+	public boolean isAblechildren() {
+		return ablechildren;
+	}
+
+	public String getCodeResembleRuleOid() {
+		return codeResembleRuleOid;
+	}
+
+	public void setCodeResembleRuleOid(String codeResembleRuleOid) {
+		this.codeResembleRuleOid = codeResembleRuleOid;
+	}
+
+	public String getCodeResembleRuleOidName() {
+		return codeResembleRuleOidName;
+	}
+
+	public void setCodeResembleRuleOidName(String codeResembleRuleOidName) {
+		this.codeResembleRuleOidName = codeResembleRuleOidName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyDTO{" +
+				"ordernum=" + ordernum +
+				", btmtypeid='" + btmtypeid + '\'' +
+				", btmtypename='" + btmtypename + '\'' +
+				", coderuleoid='" + coderuleoid + '\'' +
+				", coderuleoidName='" + coderuleoidName + '\'' +
+				", codekeyattrrepeatoid='" + codekeyattrrepeatoid + '\'' +
+				", codekeyattrrepeatoidName='" + codekeyattrrepeatoidName + '\'' +
+				", parentcodeclassifyoid='" + parentcodeclassifyoid + '\'' +
+				", ablechildren=" + ablechildren +
+				", codeResembleRuleOid='" + codeResembleRuleOid + '\'' +
+				", codeResembleRuleOidName='" + codeResembleRuleOidName + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyProcessTempDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyProcessTempDTO.java
new file mode 100644
index 0000000..d3ffbbd
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyProcessTempDTO.java
@@ -0,0 +1,152 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyProcessTempDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117374292084L;
+
+	/**
+	 * 涓婚搴撳垎绫讳富閿�
+	 */
+	private String codeclassifyoid;
+
+	/**
+	 * 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	private String codeclassifyoidName;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	private String classifyTemplateOid;
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ��
+	 */
+	private String codeprocessuse;
+
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ�旀樉绀烘枃鏈�
+	 */
+	private String codeprocessuseText;
+
+	/**
+	 * 娴佺▼妯℃澘鐨勭増鏈�
+	 */
+	private String processVersion;
+
+	/**
+	 * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬т富閿�
+	 */
+	private String codeTempAttrOidArr;
+
+	/**
+	 * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬у悕绉�
+	 */
+	private String codeTempAttrOidArrName;
+
+	/**
+	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
+	 */
+	public String getCodeclassifyoid (){
+		return codeclassifyoid;
+	}
+
+	/**
+	 * 璁剧疆 涓婚搴撳垎绫讳富閿�
+	 */
+	public void setCodeclassifyoid (String codeclassifyoid){
+		this.codeclassifyoid = codeclassifyoid;
+	}
+
+	/**
+	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public String getCodeclassifyoidName (){
+		return codeclassifyoidName;
+	}
+
+	/**
+	 * 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public void setCodeclassifyoidName (String codeclassifyoidName){
+		this.codeclassifyoidName = codeclassifyoidName;
+	}
+	/**
+	 * 鑾峰彇 娴佺▼妯℃澘鐢ㄩ��
+	 */
+	public String getCodeprocessuse (){
+		return codeprocessuse;
+	}
+
+	/**
+	 * 璁剧疆 娴佺▼妯℃澘鐢ㄩ��
+	 */
+	public void setCodeprocessuse (String codeprocessuse){
+		this.codeprocessuse = codeprocessuse;
+	}
+
+	public String getCodeprocessuseText() {
+		return codeprocessuseText;
+	}
+
+	public void setCodeprocessuseText(String codeprocessuseText) {
+		this.codeprocessuseText = codeprocessuseText;
+	}
+
+	public String getProcessVersion() {
+		return processVersion;
+	}
+
+	public void setProcessVersion(String processVersion) {
+		this.processVersion = processVersion;
+	}
+
+	public String getClassifyTemplateOid() {
+		return classifyTemplateOid;
+	}
+
+	public void setClassifyTemplateOid(String classifyTemplateOid) {
+		this.classifyTemplateOid = classifyTemplateOid;
+	}
+
+	public String getCodeTempAttrOidArr() {
+		return codeTempAttrOidArr;
+	}
+
+	public void setCodeTempAttrOidArr(String codeTempAttrOidArr) {
+		this.codeTempAttrOidArr = codeTempAttrOidArr;
+	}
+
+	public String getCodeTempAttrOidArrName() {
+		return codeTempAttrOidArrName;
+	}
+
+	public void setCodeTempAttrOidArrName(String codeTempAttrOidArrName) {
+		this.codeTempAttrOidArrName = codeTempAttrOidArrName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyProcessTempDTO{" +
+				"codeclassifyoid='" + codeclassifyoid + '\'' +
+				", codeclassifyoidName='" + codeclassifyoidName + '\'' +
+				", classifyTemplateOid='" + classifyTemplateOid + '\'' +
+				", codeprocessuse='" + codeprocessuse + '\'' +
+				", codeprocessuseText='" + codeprocessuseText + '\'' +
+				", processVersion='" + processVersion + '\'' +
+				", codeTempAttrOidArr='" + codeTempAttrOidArr + '\'' +
+				", codeTempAttrOidArrName='" + codeTempAttrOidArrName + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTempMapItemDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTempMapItemDTO.java
new file mode 100644
index 0000000..416dc6d
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTempMapItemDTO.java
@@ -0,0 +1,184 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+public class CodeClassifyTempMapItemDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118229256252L;
+
+	/**
+	 * 鍒嗙被妯℃澘灞炴�т富閿�
+	 */
+	private String classifytemplateattroid;
+
+	/**
+	 * 鏄犲皠瑙勫垯涓婚敭
+	 */
+	private String classifytemplatemapoid;
+
+	/**
+	 * 鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	 */
+	private String classifytemplatemapoidName;
+	/**
+	 * 闆嗗洟鐮佸睘鎬ey
+	 */
+	private String groupcodeattrid;
+
+	/**
+	 * 闆嗗洟鐮佸睘鎬у悕绉�
+	 */
+	private String groupcodeattrname;
+
+	/**
+	 * 杞崲鐨勮嚜瀹氫箟绫�
+	 */
+	private String switchclassname;
+
+	/**
+	 * 杞崲鍏紡
+	 */
+	private String switcheval;
+
+	/**
+	 * 鐩爣绔殑鏃堕棿鏍煎紡
+	 */
+	private String targetdateformat;
+
+
+	/**
+	 * 鑾峰彇 鍒嗙被妯℃澘灞炴�т富閿�
+	 */
+	public String getClassifytemplateattroid (){
+		return classifytemplateattroid;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被妯℃澘灞炴�т富閿�
+	 */
+	public void setClassifytemplateattroid (String classifytemplateattroid){
+		this.classifytemplateattroid = classifytemplateattroid;
+	}
+
+	/**
+	 * 鑾峰彇 鏄犲皠瑙勫垯涓婚敭
+	 */
+	public String getClassifytemplatemapoid (){
+		return classifytemplatemapoid;
+	}
+
+	/**
+	 * 璁剧疆 鏄犲皠瑙勫垯涓婚敭
+	 */
+	public void setClassifytemplatemapoid (String classifytemplatemapoid){
+		this.classifytemplatemapoid = classifytemplatemapoid;
+	}
+
+	/**
+	 * 鑾峰彇鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getClassifytemplatemapoidName (){
+		return classifytemplatemapoidName;
+	}
+
+	/**
+	 * 璁剧疆鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	 */
+	public void setClassifytemplatemapoidName (String classifytemplatemapoidName){
+		this.classifytemplatemapoidName = classifytemplatemapoidName;
+	}
+	/**
+	 * 鑾峰彇 闆嗗洟鐮佸睘鎬ey
+	 */
+	public String getGroupcodeattrid (){
+		return groupcodeattrid;
+	}
+
+	/**
+	 * 璁剧疆 闆嗗洟鐮佸睘鎬ey
+	 */
+	public void setGroupcodeattrid (String groupcodeattrid){
+		this.groupcodeattrid = groupcodeattrid;
+	}
+
+	/**
+	 * 鑾峰彇 闆嗗洟鐮佸睘鎬у悕绉�
+	 */
+	public String getGroupcodeattrname (){
+		return groupcodeattrname;
+	}
+
+	/**
+	 * 璁剧疆 闆嗗洟鐮佸睘鎬у悕绉�
+	 */
+	public void setGroupcodeattrname (String groupcodeattrname){
+		this.groupcodeattrname = groupcodeattrname;
+	}
+
+	/**
+	 * 鑾峰彇 杞崲鐨勮嚜瀹氫箟绫�
+	 */
+	public String getSwitchclassname (){
+		return switchclassname;
+	}
+
+	/**
+	 * 璁剧疆 杞崲鐨勮嚜瀹氫箟绫�
+	 */
+	public void setSwitchclassname (String switchclassname){
+		this.switchclassname = switchclassname;
+	}
+
+	/**
+	 * 鑾峰彇 杞崲鍏紡
+	 */
+	public String getSwitcheval (){
+		return switcheval;
+	}
+
+	/**
+	 * 璁剧疆 杞崲鍏紡
+	 */
+	public void setSwitcheval (String switcheval){
+		this.switcheval = switcheval;
+	}
+
+	/**
+	 * 鑾峰彇 鐩爣绔殑鏃堕棿鏍煎紡
+	 */
+	public String getTargetdateformat (){
+		return targetdateformat;
+	}
+
+	/**
+	 * 璁剧疆 鐩爣绔殑鏃堕棿鏍煎紡
+	 */
+	public void setTargetdateformat (String targetdateformat){
+		this.targetdateformat = targetdateformat;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTempMapItemDTO{" +
+		"classifytemplateattroid='" + classifytemplateattroid +"',"+
+		"classifytemplatemapoid='" + classifytemplatemapoid +"',"+
+		"classifytemplatemapoidName='" + classifytemplatemapoidName +"'," +
+		"groupcodeattrid='" + groupcodeattrid +"',"+
+		"groupcodeattrname='" + groupcodeattrname +"',"+
+		"switchclassname='" + switchclassname +"',"+
+		"switcheval='" + switcheval +"',"+
+		"targetdateformat='" + targetdateformat +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateAttrDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateAttrDTO.java
new file mode 100644
index 0000000..90f908e
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateAttrDTO.java
@@ -0,0 +1,1053 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateAttrDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118652601470L;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	private String classifytemplateoid;
+
+	/**
+	 * 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	private String classifytemplateoidName;
+	/**
+	 * 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	 */
+	private String classifyattributeoid;
+
+	/**
+	 * 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	 */
+	private String classifyattributeoidName;
+	/**
+	 * 灞炴�х殑绫诲瀷
+	 */
+	private String attributedatatype;
+
+	/**
+	 * 鏄惁鍏抽敭灞炴��
+	 */
+	private String keyattrflag;
+
+	/**
+	 * 鏄惁蹇�熸煡璇㈠睘鎬�
+	 */
+	private String queryattrflag;
+
+	/**
+	 * 鏄惁楂樼骇鏌ヨ灞炴��
+	 */
+	private String seniorqueryattrflag;
+
+	/**
+	 * 鐩镐技鏌ラ噸灞炴��
+	 */
+	private String samerepeatattrflag;
+
+	/**
+	 * 鏄惁鎺掑簭
+	 */
+	private String sortattrflag;
+
+	/**
+	 * 鏄惁鐢熸垚浜岀淮鐮�
+	 */
+	private String qrcodeflag;
+
+	/**
+	 * 鏄惁鐢熸垚涓�缁寸爜
+	 */
+	private String barcodeflag;
+
+	/**
+	 * 缁勫悎瑙勫垯
+	 */
+	private String componentrule;
+
+	/**
+	 * 楠岃瘉瑙勫垯
+	 */
+	private String verifyrule;
+
+	/**
+	 * 鍒嗙被娉ㄥ叆灞傜骇
+	 */
+	private String classifyinvokelevel;
+
+	/**
+	 * 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	private String classifyinvokeattr;
+
+	/**
+	 * 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	 */
+	private String classifyinvokeattrname;
+
+	/**
+	 * 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	 */
+	private String classifyinvokeeditflag;
+
+	/**
+	 * 鐮佸�煎簭鍙�
+	 */
+	private Integer ordernum;
+
+	/**
+	 * 琛ㄥ崟閲屾槸鍚︽樉绀�
+	 */
+	private String formdisplayflag;
+
+	/**
+	 * 鍒楄〃閲屾槸鍚︽樉绀�
+	 */
+	private String tabledisplayflag;
+
+	/**
+	 * 鎵�灞炲睘鎬у垎缁�
+	 */
+	private String attributegroup;
+
+	/**
+	 * 浣跨敤鏋氫妇娉ㄥ叆鐨勫瓧绗︿覆鏍煎紡
+	 */
+	private String enumString;
+
+	/**
+	 * 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	 */
+	private String enumid;
+
+	/**
+	 * 浣跨敤鏋氫妇涓枃鍚嶇О
+	 */
+	private String enumname;
+
+	/**
+	 * 鏋氫妇鏄惁鍙互缂栬緫
+	 */
+	private String enumeditflag;
+
+	/**
+	 * 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	 */
+	private String referbtmid;
+
+	/**
+	 * 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	 */
+	private String referbtmname;
+
+	/**
+	 * 鍙傜収绐楀彛閰嶇疆
+	 */
+	private String referConfig;
+
+	/**
+	 * 鏄惁蹇呰緭
+	 */
+	private String requireflag;
+
+	/**
+	 * 鏄惁鍙
+	 */
+	private String readonlyflag;
+
+	/**
+	 * 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	 */
+	private Integer controllength;
+
+	/**
+	 * 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	 */
+	private String formdisplaystyle;
+
+	/**
+	 * 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	 */
+	private String tabledisplaystyle;
+
+	/**
+	 * 琛ㄥ崟涓秴閾炬帴鍐呭
+	 */
+	private String formhref;
+
+	/**
+	 * 琛ㄦ牸涓秴閾炬帴鍐呭
+	 */
+	private String tablehref;
+
+	/**
+	 * 灏忔暟绮惧害
+	 */
+	private Integer precisionlength;
+
+	/**
+	 * 灏忔暟鍒诲害
+	 */
+	private Integer scalelength;
+
+	/**
+	 * 鍙栧�艰寖鍥�
+	 */
+	private String valuearea;
+
+	/**
+	 * 鏃堕棿鏍煎紡
+	 */
+	private String codedateformat;
+
+	/**
+	 * 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	 */
+	private String tabledisplayjs;
+
+	/**
+	 * 鏄惁鏄剧ず澶氳鏂囨湰
+	 */
+	private String textareaflag;
+
+	/**
+	 * 棰勮鍥�
+	 */
+	private String imageflag;
+
+	/**
+	 * 榛樿鍊�
+	 */
+	private String defaultvalue;
+
+	/**
+	 * 鍓嶇紑
+	 */
+	private String prefixvalue;
+
+	/**
+	 * 鍚庣紑
+	 */
+	private String suffixvalue;
+
+	/**
+	 * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	 */
+	private String filtersourceattr;
+
+	/**
+	 * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	 */
+	private String filtersourceattrname;
+
+	/**
+	 * 灞炴�у垪琛ㄤ腑鐨勫搴�
+	 */
+	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;
+
+	public String getExplain() {
+		return explain;
+	}
+
+	public void setExplain(String explain) {
+		this.explain = explain;
+	}
+
+	public String getLibraryIdentification() {
+		return libraryIdentification;
+	}
+
+	public void setLibraryIdentification(String libraryIdentification) {
+		this.libraryIdentification = libraryIdentification;
+	}
+
+	public String getParentCode() {
+		return parentCode;
+	}
+
+	public void setParentCode(String parentCode) {
+		this.parentCode = parentCode;
+	}
+
+	public String getParentName() {
+		return parentName;
+	}
+
+	public void setParentName(String parentName) {
+		this.parentName = parentName;
+	}
+
+	public String getParentQueryAttr() {
+		return parentQueryAttr;
+	}
+
+	public void setParentQueryAttr(String parentQueryAttr) {
+		this.parentQueryAttr = parentQueryAttr;
+	}
+
+	public String getEnumString() {
+		return enumString;
+	}
+
+	public void setEnumString(String enumString) {
+		this.enumString = enumString;
+	}
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifytemplateoid (){
+		return classifytemplateoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炴ā鏉�
+	 */
+	public void setClassifytemplateoid (String classifytemplateoid){
+		this.classifytemplateoid = classifytemplateoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifytemplateoidName (){
+		return classifytemplateoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public void setClassifytemplateoidName (String classifytemplateoidName){
+		this.classifytemplateoidName = classifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	 */
+	public String getClassifyattributeoid (){
+		return classifyattributeoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	 */
+	public void setClassifyattributeoid (String classifyattributeoid){
+		this.classifyattributeoid = classifyattributeoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	 */
+	public String getClassifyattributeoidName (){
+		return classifyattributeoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	 */
+	public void setClassifyattributeoidName (String classifyattributeoidName){
+		this.classifyattributeoidName = classifyattributeoidName;
+	}
+	/**
+	 * 鑾峰彇 灞炴�х殑绫诲瀷
+	 */
+	public String getAttributedatatype (){
+		return attributedatatype;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�х殑绫诲瀷
+	 */
+	public void setAttributedatatype (String attributedatatype){
+		this.attributedatatype = attributedatatype;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鍏抽敭灞炴��
+	 */
+	public String getKeyattrflag (){
+		return keyattrflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鍏抽敭灞炴��
+	 */
+	public void setKeyattrflag (String keyattrflag){
+		this.keyattrflag = keyattrflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇�熸煡璇㈠睘鎬�
+	 */
+	public String getQueryattrflag (){
+		return queryattrflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇�熸煡璇㈠睘鎬�
+	 */
+	public void setQueryattrflag (String queryattrflag){
+		this.queryattrflag = queryattrflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁楂樼骇鏌ヨ灞炴��
+	 */
+	public String getSeniorqueryattrflag (){
+		return seniorqueryattrflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁楂樼骇鏌ヨ灞炴��
+	 */
+	public void setSeniorqueryattrflag (String seniorqueryattrflag){
+		this.seniorqueryattrflag = seniorqueryattrflag;
+	}
+
+	/**
+	 * 鑾峰彇 鐩镐技鏌ラ噸灞炴��
+	 */
+	public String getSamerepeatattrflag (){
+		return samerepeatattrflag;
+	}
+
+	/**
+	 * 璁剧疆 鐩镐技鏌ラ噸灞炴��
+	 */
+	public void setSamerepeatattrflag (String samerepeatattrflag){
+		this.samerepeatattrflag = samerepeatattrflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鎺掑簭
+	 */
+	public String getSortattrflag (){
+		return sortattrflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鎺掑簭
+	 */
+	public void setSortattrflag (String sortattrflag){
+		this.sortattrflag = sortattrflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鐢熸垚浜岀淮鐮�
+	 */
+	public String getQrcodeflag (){
+		return qrcodeflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鐢熸垚浜岀淮鐮�
+	 */
+	public void setQrcodeflag (String qrcodeflag){
+		this.qrcodeflag = qrcodeflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鐢熸垚涓�缁寸爜
+	 */
+	public String getBarcodeflag (){
+		return barcodeflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鐢熸垚涓�缁寸爜
+	 */
+	public void setBarcodeflag (String barcodeflag){
+		this.barcodeflag = barcodeflag;
+	}
+
+	/**
+	 * 鑾峰彇 缁勫悎瑙勫垯
+	 */
+	public String getComponentrule (){
+		return componentrule;
+	}
+
+	/**
+	 * 璁剧疆 缁勫悎瑙勫垯
+	 */
+	public void setComponentrule (String componentrule){
+		this.componentrule = componentrule;
+	}
+
+	/**
+	 * 鑾峰彇 楠岃瘉瑙勫垯
+	 */
+	public String getVerifyrule (){
+		return verifyrule;
+	}
+
+	/**
+	 * 璁剧疆 楠岃瘉瑙勫垯
+	 */
+	public void setVerifyrule (String verifyrule){
+		this.verifyrule = verifyrule;
+	}
+
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆灞傜骇
+	 */
+	public String getClassifyinvokelevel (){
+		return classifyinvokelevel;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被娉ㄥ叆灞傜骇
+	 */
+	public void setClassifyinvokelevel (String classifyinvokelevel){
+		this.classifyinvokelevel = classifyinvokelevel;
+	}
+
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	public String getClassifyinvokeattr (){
+		return classifyinvokeattr;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	public void setClassifyinvokeattr (String classifyinvokeattr){
+		this.classifyinvokeattr = classifyinvokeattr;
+	}
+
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	 */
+	public String getClassifyinvokeattrname (){
+		return classifyinvokeattrname;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	 */
+	public void setClassifyinvokeattrname (String classifyinvokeattrname){
+		this.classifyinvokeattrname = classifyinvokeattrname;
+	}
+
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	 */
+	public String getClassifyinvokeeditflag (){
+		return classifyinvokeeditflag;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	 */
+	public void setClassifyinvokeeditflag (String classifyinvokeeditflag){
+		this.classifyinvokeeditflag = classifyinvokeeditflag;
+	}
+
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	 * 璁剧疆 鐮佸�煎簭鍙�
+	 */
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄥ崟閲屾槸鍚︽樉绀�
+	 */
+	public String getFormdisplayflag (){
+		return formdisplayflag;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄥ崟閲屾槸鍚︽樉绀�
+	 */
+	public void setFormdisplayflag (String formdisplayflag){
+		this.formdisplayflag = formdisplayflag;
+	}
+
+	/**
+	 * 鑾峰彇 鍒楄〃閲屾槸鍚︽樉绀�
+	 */
+	public String getTabledisplayflag (){
+		return tabledisplayflag;
+	}
+
+	/**
+	 * 璁剧疆 鍒楄〃閲屾槸鍚︽樉绀�
+	 */
+	public void setTabledisplayflag (String tabledisplayflag){
+		this.tabledisplayflag = tabledisplayflag;
+	}
+
+	/**
+	 * 鑾峰彇 鎵�灞炲睘鎬у垎缁�
+	 */
+	public String getAttributegroup (){
+		return attributegroup;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炲睘鎬у垎缁�
+	 */
+	public void setAttributegroup (String attributegroup){
+		this.attributegroup = attributegroup;
+	}
+
+	/**
+	 * 鑾峰彇 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	 */
+	public String getEnumid (){
+		return enumid;
+	}
+
+	/**
+	 * 璁剧疆 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	 */
+	public void setEnumid (String enumid){
+		this.enumid = enumid;
+	}
+
+	/**
+	 * 鑾峰彇 浣跨敤鏋氫妇涓枃鍚嶇О
+	 */
+	public String getEnumname (){
+		return enumname;
+	}
+
+	/**
+	 * 璁剧疆 浣跨敤鏋氫妇涓枃鍚嶇О
+	 */
+	public void setEnumname (String enumname){
+		this.enumname = enumname;
+	}
+
+	/**
+	 * 鑾峰彇 鏋氫妇鏄惁鍙互缂栬緫
+	 */
+	public String getEnumeditflag (){
+		return enumeditflag;
+	}
+
+	/**
+	 * 璁剧疆 鏋氫妇鏄惁鍙互缂栬緫
+	 */
+	public void setEnumeditflag (String enumeditflag){
+		this.enumeditflag = enumeditflag;
+	}
+
+	/**
+	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	 */
+	public String getReferbtmid (){
+		return referbtmid;
+	}
+
+	/**
+	 * 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	 */
+	public void setReferbtmid (String referbtmid){
+		this.referbtmid = referbtmid;
+	}
+
+	/**
+	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	 */
+	public String getReferbtmname (){
+		return referbtmname;
+	}
+
+	/**
+	 * 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	 */
+	public void setReferbtmname (String referbtmname){
+		this.referbtmname = referbtmname;
+	}
+
+
+	/**
+	 * 鑾峰彇 鏄惁蹇呰緭
+	 */
+	public String getRequireflag (){
+		return requireflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇呰緭
+	 */
+	public void setRequireflag (String requireflag){
+		this.requireflag = requireflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鍙
+	 */
+	public String getReadonlyflag (){
+		return readonlyflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鍙
+	 */
+	public void setReadonlyflag (String readonlyflag){
+		this.readonlyflag = readonlyflag;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	 */
+	public Integer getControllength (){
+		return controllength;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	 */
+	public void setControllength (Integer controllength){
+		this.controllength = controllength;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	 */
+	public String getFormdisplaystyle (){
+		return formdisplaystyle;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	 */
+	public void setFormdisplaystyle (String formdisplaystyle){
+		this.formdisplaystyle = formdisplaystyle;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	 */
+	public String getTabledisplaystyle (){
+		return tabledisplaystyle;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	 */
+	public void setTabledisplaystyle (String tabledisplaystyle){
+		this.tabledisplaystyle = tabledisplaystyle;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄥ崟涓秴閾炬帴鍐呭
+	 */
+	public String getFormhref (){
+		return formhref;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄥ崟涓秴閾炬帴鍐呭
+	 */
+	public void setFormhref (String formhref){
+		this.formhref = formhref;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄦ牸涓秴閾炬帴鍐呭
+	 */
+	public String getTablehref (){
+		return tablehref;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄦ牸涓秴閾炬帴鍐呭
+	 */
+	public void setTablehref (String tablehref){
+		this.tablehref = tablehref;
+	}
+
+	/**
+	 * 鑾峰彇 灏忔暟绮惧害
+	 */
+	public Integer getPrecisionlength (){
+		return precisionlength;
+	}
+
+	/**
+	 * 璁剧疆 灏忔暟绮惧害
+	 */
+	public void setPrecisionlength (Integer precisionlength){
+		this.precisionlength = precisionlength;
+	}
+
+	/**
+	 * 鑾峰彇 灏忔暟鍒诲害
+	 */
+	public Integer getScalelength (){
+		return scalelength;
+	}
+
+	/**
+	 * 璁剧疆 灏忔暟鍒诲害
+	 */
+	public void setScalelength (Integer scalelength){
+		this.scalelength = scalelength;
+	}
+
+	/**
+	 * 鑾峰彇 鍙栧�艰寖鍥�
+	 */
+	public String getValuearea (){
+		return valuearea;
+	}
+
+	/**
+	 * 璁剧疆 鍙栧�艰寖鍥�
+	 */
+	public void setValuearea (String valuearea){
+		this.valuearea = valuearea;
+	}
+
+	/**
+	 * 鑾峰彇 鏃堕棿鏍煎紡
+	 */
+	public String getCodedateformat (){
+		return codedateformat;
+	}
+
+	/**
+	 * 璁剧疆 鏃堕棿鏍煎紡
+	 */
+	public void setCodedateformat (String codedateformat){
+		this.codedateformat = codedateformat;
+	}
+
+	/**
+	 * 鑾峰彇 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	 */
+	public String getTabledisplayjs (){
+		return tabledisplayjs;
+	}
+
+	/**
+	 * 璁剧疆 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	 */
+	public void setTabledisplayjs (String tabledisplayjs){
+		this.tabledisplayjs = tabledisplayjs;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁鏄剧ず澶氳鏂囨湰
+	 */
+	public String getTextareaflag (){
+		return textareaflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁鏄剧ず澶氳鏂囨湰
+	 */
+	public void setTextareaflag (String textareaflag){
+		this.textareaflag = textareaflag;
+	}
+
+	/**
+	 * 鑾峰彇 棰勮鍥�
+	 */
+	public String getImageflag (){
+		return imageflag;
+	}
+
+	/**
+	 * 璁剧疆 棰勮鍥�
+	 */
+	public void setImageflag (String imageflag){
+		this.imageflag = imageflag;
+	}
+
+	/**
+	 * 鑾峰彇 榛樿鍊�
+	 */
+	public String getDefaultvalue (){
+		return defaultvalue;
+	}
+
+	/**
+	 * 璁剧疆 榛樿鍊�
+	 */
+	public void setDefaultvalue (String defaultvalue){
+		this.defaultvalue = defaultvalue;
+	}
+
+	/**
+	 * 鑾峰彇 鍓嶇紑
+	 */
+	public String getPrefixvalue (){
+		return prefixvalue;
+	}
+
+	/**
+	 * 璁剧疆 鍓嶇紑
+	 */
+	public void setPrefixvalue (String prefixvalue){
+		this.prefixvalue = prefixvalue;
+	}
+
+	/**
+	 * 鑾峰彇 鍚庣紑
+	 */
+	public String getSuffixvalue (){
+		return suffixvalue;
+	}
+
+	/**
+	 * 璁剧疆 鍚庣紑
+	 */
+	public void setSuffixvalue (String suffixvalue){
+		this.suffixvalue = suffixvalue;
+	}
+
+	/**
+	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	 */
+	public String getFiltersourceattr (){
+		return filtersourceattr;
+	}
+
+	/**
+	 * 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	 */
+	public void setFiltersourceattr (String filtersourceattr){
+		this.filtersourceattr = filtersourceattr;
+	}
+
+	/**
+	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	 */
+	public String getFiltersourceattrname (){
+		return filtersourceattrname;
+	}
+
+	/**
+	 * 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	 */
+	public void setFiltersourceattrname (String filtersourceattrname){
+		this.filtersourceattrname = filtersourceattrname;
+	}
+
+	public Integer getAttrTableWidth() {
+		return attrTableWidth;
+	}
+
+	public void setAttrTableWidth(Integer attrTableWidth) {
+		this.attrTableWidth = attrTableWidth;
+	}
+
+	public String getReferConfig() {
+		return referConfig;
+	}
+
+	public void setReferConfig(String referConfig) {
+		this.referConfig = referConfig;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateAttrDTO{" +
+				"classifytemplateoid='" + classifytemplateoid + '\'' +
+				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
+				", classifyattributeoid='" + classifyattributeoid + '\'' +
+				", classifyattributeoidName='" + classifyattributeoidName + '\'' +
+				", attributedatatype='" + attributedatatype + '\'' +
+				", keyattrflag='" + keyattrflag + '\'' +
+				", queryattrflag='" + queryattrflag + '\'' +
+				", seniorqueryattrflag='" + seniorqueryattrflag + '\'' +
+				", samerepeatattrflag='" + samerepeatattrflag + '\'' +
+				", sortattrflag='" + sortattrflag + '\'' +
+				", qrcodeflag='" + qrcodeflag + '\'' +
+				", barcodeflag='" + barcodeflag + '\'' +
+				", componentrule='" + componentrule + '\'' +
+				", verifyrule='" + verifyrule + '\'' +
+				", classifyinvokelevel='" + classifyinvokelevel + '\'' +
+				", classifyinvokeattr='" + classifyinvokeattr + '\'' +
+				", classifyinvokeattrname='" + classifyinvokeattrname + '\'' +
+				", classifyinvokeeditflag='" + classifyinvokeeditflag + '\'' +
+				", ordernum=" + ordernum +
+				", formdisplayflag='" + formdisplayflag + '\'' +
+				", tabledisplayflag='" + tabledisplayflag + '\'' +
+				", attributegroup='" + attributegroup + '\'' +
+				", enumString='" + enumString + '\'' +
+				", enumid='" + enumid + '\'' +
+				", enumname='" + enumname + '\'' +
+				", enumeditflag='" + enumeditflag + '\'' +
+				", referbtmid='" + referbtmid + '\'' +
+				", referbtmname='" + referbtmname + '\'' +
+				", referConfig='" + referConfig + '\'' +
+				", requireflag='" + requireflag + '\'' +
+				", readonlyflag='" + readonlyflag + '\'' +
+				", controllength=" + controllength +
+				", formdisplaystyle='" + formdisplaystyle + '\'' +
+				", tabledisplaystyle='" + tabledisplaystyle + '\'' +
+				", formhref='" + formhref + '\'' +
+				", tablehref='" + tablehref + '\'' +
+				", precisionlength=" + precisionlength +
+				", scalelength=" + scalelength +
+				", valuearea='" + valuearea + '\'' +
+				", codedateformat='" + codedateformat + '\'' +
+				", tabledisplayjs='" + tabledisplayjs + '\'' +
+				", textareaflag='" + textareaflag + '\'' +
+				", imageflag='" + imageflag + '\'' +
+				", defaultvalue='" + defaultvalue + '\'' +
+				", prefixvalue='" + prefixvalue + '\'' +
+				", suffixvalue='" + suffixvalue + '\'' +
+				", filtersourceattr='" + filtersourceattr + '\'' +
+				", filtersourceattrname='" + filtersourceattrname + '\'' +
+				", attrTableWidth=" + attrTableWidth +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateButtonDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateButtonDTO.java
new file mode 100644
index 0000000..37269b4
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateButtonDTO.java
@@ -0,0 +1,155 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateButtonDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119032349661L;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	private String classifytemplateoid;
+
+	/**
+	 * 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	private String classifytemplateoidName;
+	/**
+	 * 鎸夐挳鐨勪富閿�
+	 */
+	private String classifybuttonoid;
+
+	/**
+	 * 鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	 */
+	private String classifybuttonoidName;
+	/**
+	 * 鎸夐挳鐢ㄩ��
+	 */
+	private String buttonuse;
+
+	/**
+	 * 鎸夐挳鐢ㄩ�旀樉绀哄璞�
+	 */
+	private String buttonUseText;
+
+	/**
+	 * 鐮佸�煎簭鍙�
+	 */
+	private Integer ordernum;
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifytemplateoid (){
+		return classifytemplateoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炴ā鏉�
+	 */
+	public void setClassifytemplateoid (String classifytemplateoid){
+		this.classifytemplateoid = classifytemplateoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifytemplateoidName (){
+		return classifytemplateoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public void setClassifytemplateoidName (String classifytemplateoidName){
+		this.classifytemplateoidName = classifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勪富閿�
+	 */
+	public String getClassifybuttonoid (){
+		return classifybuttonoid;
+	}
+
+	/**
+	 * 璁剧疆 鎸夐挳鐨勪富閿�
+	 */
+	public void setClassifybuttonoid (String classifybuttonoid){
+		this.classifybuttonoid = classifybuttonoid;
+	}
+
+	/**
+	 * 鑾峰彇鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	 */
+	public String getClassifybuttonoidName (){
+		return classifybuttonoidName;
+	}
+
+	/**
+	 * 璁剧疆鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	 */
+	public void setClassifybuttonoidName (String classifybuttonoidName){
+		this.classifybuttonoidName = classifybuttonoidName;
+	}
+	/**
+	 * 鑾峰彇 鎸夐挳鐢ㄩ��
+	 */
+	public String getButtonuse (){
+		return buttonuse;
+	}
+
+	/**
+	 * 璁剧疆 鎸夐挳鐢ㄩ��
+	 */
+	public void setButtonuse (String buttonuse){
+		this.buttonuse = buttonuse;
+	}
+
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	 * 璁剧疆 鐮佸�煎簭鍙�
+	 */
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	public String getButtonUseText() {
+		return buttonUseText;
+	}
+
+	public void setButtonUseText(String buttonUseText) {
+		this.buttonUseText = buttonUseText;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateButtonDTO{" +
+				"classifytemplateoid='" + classifytemplateoid + '\'' +
+				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
+				", classifybuttonoid='" + classifybuttonoid + '\'' +
+				", classifybuttonoidName='" + classifybuttonoidName + '\'' +
+				", buttonuse='" + buttonuse + '\'' +
+				", buttonUseText='" + buttonUseText + '\'' +
+				", ordernum=" + ordernum +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateDTO.java
new file mode 100644
index 0000000..883a256
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateDTO.java
@@ -0,0 +1,104 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120463849391L;
+
+	/**
+	 * 涓婚搴撳垎绫讳富閿�
+	 */
+	private String codeclassifyoid;
+
+	/**
+	 * 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	private String codeclassifyoidName;
+
+	/**
+	 * 鎵�灞炰笟鍔$被鍨�
+	 */
+	private String btmtypeid;
+
+	/**
+	 * 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	 */
+	private String btmtypename;
+
+	/**
+	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨�
+	 */
+	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 getCodeclassifyoid (){
+		return codeclassifyoid;
+	}
+
+	/**
+	 * 璁剧疆 涓婚搴撳垎绫讳富閿�
+	 */
+	public void setCodeclassifyoid (String codeclassifyoid){
+		this.codeclassifyoid = codeclassifyoid;
+	}
+
+	/**
+	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public String getCodeclassifyoidName (){
+		return codeclassifyoidName;
+	}
+
+	/**
+	 * 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public void setCodeclassifyoidName (String codeclassifyoidName){
+		this.codeclassifyoidName = codeclassifyoidName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateDTO{" +
+		"codeclassifyoid='" + codeclassifyoid +"',"+
+		"codeclassifyoidName='" + codeclassifyoidName +"'," +
+		"btmtypeid='" + btmtypeid +"',"+
+		"btmtypename='" + btmtypename +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateMapDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateMapDTO.java
new file mode 100644
index 0000000..24e1c6c
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyTemplateMapDTO.java
@@ -0,0 +1,96 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateMapDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117068736629L;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	private String classifyTemplateOid;
+
+	/**
+	 * 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	private String classifyTemplateName;
+	/**
+	 * 鏄犲皠瑙勫垯绫诲瀷
+	 */
+	private String codemapruletype;
+
+	/**
+	 * 鏄犲皠瑙勫垯绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String codemapruletypeText;
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifyTemplateOid (){
+		return classifyTemplateOid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炴ā鏉�
+	 */
+	public void setClassifyTemplateOid (String classifyTemplateOid){
+		this.classifyTemplateOid = classifyTemplateOid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifyTemplateName (){
+		return classifyTemplateName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public void setClassifyTemplateName (String classifyTemplateName){
+		this.classifyTemplateName = classifyTemplateOid;
+	}
+	/**
+	 * 鑾峰彇 鏄犲皠瑙勫垯绫诲瀷
+	 */
+	public String getCodemapruletype (){
+		return codemapruletype;
+	}
+
+	/**
+	 * 璁剧疆 鏄犲皠瑙勫垯绫诲瀷
+	 */
+	public void setCodemapruletype (String codemapruletype){
+		this.codemapruletype = codemapruletype;
+	}
+
+	public String getCodemapruletypeText() {
+		return codemapruletypeText;
+	}
+
+	public void setCodemapruletypeText(String codemapruletypeText) {
+		this.codemapruletypeText = codemapruletypeText;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateMapDTO{" +
+				"classifytemplateoid='" + classifyTemplateOid + '\'' +
+				", classifytemplateoidName='" + classifyTemplateName + '\'' +
+				", codemapruletype='" + codemapruletype + '\'' +
+				", codemapruletypeText='" + codemapruletypeText + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyValueDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyValueDTO.java
new file mode 100644
index 0000000..e94f6f2
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeClassifyValueDTO.java
@@ -0,0 +1,104 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyValueDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117098778726L;
+
+	/**
+	 * 鍒嗙被鐮佹涓婚敭
+	 */
+	private String codeclassifysecoid;
+
+	/**
+	 * 鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	private String codeclassifysecoidName;
+	/**
+	 * 鐮佸�煎簭鍙�
+	 */
+	private Integer ordernum;
+
+	/**
+	 * 涓婄骇鍒嗙被鐮佸�间富閿�
+	 */
+	private String parentclassifyvalueoid;
+
+
+	/**
+	 * 鑾峰彇 鍒嗙被鐮佹涓婚敭
+	 */
+	public String getCodeclassifysecoid (){
+		return codeclassifysecoid;
+	}
+
+	/**
+	 * 璁剧疆 鍒嗙被鐮佹涓婚敭
+	 */
+	public void setCodeclassifysecoid (String codeclassifysecoid){
+		this.codeclassifysecoid = codeclassifysecoid;
+	}
+
+	/**
+	 * 鑾峰彇鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getCodeclassifysecoidName (){
+		return codeclassifysecoidName;
+	}
+
+	/**
+	 * 璁剧疆鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public void setCodeclassifysecoidName (String codeclassifysecoidName){
+		this.codeclassifysecoidName = codeclassifysecoidName;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	 * 璁剧疆 鐮佸�煎簭鍙�
+	 */
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	/**
+	 * 鑾峰彇 涓婄骇鍒嗙被鐮佸�间富閿�
+	 */
+	public String getParentclassifyvalueoid (){
+		return parentclassifyvalueoid;
+	}
+
+	/**
+	 * 璁剧疆 涓婄骇鍒嗙被鐮佸�间富閿�
+	 */
+	public void setParentclassifyvalueoid (String parentclassifyvalueoid){
+		this.parentclassifyvalueoid = parentclassifyvalueoid;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeClassifyValueDTO{" +
+		"codeclassifysecoid='" + codeclassifysecoid +"',"+
+		"codeclassifysecoidName='" + codeclassifysecoidName +"'," +
+		"ordernum='" + ordernum +"',"+
+		"parentclassifyvalueoid='" + parentclassifyvalueoid +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeCompPreviewDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeCompPreviewDTO.java
new file mode 100644
index 0000000..111c4c5
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeCompPreviewDTO.java
@@ -0,0 +1,42 @@
+package org.springblade.code.dto;
+
+import java.util.Map;
+
+/**
+ * 缁勫悎瑙勫垯鐨勯瑙堟樉绀�
+ * @author weidy
+ * @date 2022-04-06
+ */
+public class CodeCompPreviewDTO implements java.io.Serializable{
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 7023496831561755321L;
+    /**
+     * 妯℃澘鐨勪富閿�
+     */
+    private String codeClassifyTemplateOid;
+
+    /**
+     * 褰撳墠鐨勮〃鍗曢噷鐨勫睘鎬у唴瀹�
+     */
+    private Map<String,String> data;
+
+    public String getCodeClassifyTemplateOid() {
+        return codeClassifyTemplateOid;
+    }
+
+    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
+        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
+    }
+
+
+    public Map<String, String> getData() {
+        return data;
+    }
+
+    public void setData(Map<String, String> data) {
+        this.data = data;
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeDeleteBatchDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeDeleteBatchDTO.java
new file mode 100644
index 0000000..c6f43ec
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeDeleteBatchDTO.java
@@ -0,0 +1,49 @@
+package org.springblade.code.dto;
+
+import java.util.List;
+
+/**
+ * 缂栫爜鍒犻櫎鐨勬暟鎹紶杈撳璞�
+ * @author weidy
+ * @date 2022-3-2
+ */
+public class CodeDeleteBatchDTO implements java.io.Serializable{
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -4153558541948865667L;
+    /**
+     * 鏁版嵁鐨勪富閿�
+     */
+    private List<String> oidList;
+
+    /**
+     * 涓婚搴撳垎绫讳富閿�
+     */
+    private String codeClassifyOid;
+
+    public List<String> getOidList() {
+        return oidList;
+    }
+
+    public void setOidList(List<String> oidList) {
+        this.oidList = oidList;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeDeleteBatchDTO{" +
+                "oidList=" + oidList +
+                ", codeClassifyOid='" + codeClassifyOid + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeExportAttrDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeExportAttrDTO.java
new file mode 100644
index 0000000..148bab2
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeExportAttrDTO.java
@@ -0,0 +1,134 @@
+package org.springblade.code.dto;
+
+import java.util.Map;
+
+/**
+ * 缂栫爜瀵煎嚭閰嶇疆鐨勪俊鎭�
+ * @author weidy
+ * @date 2022-03-2
+ */
+public class CodeExportAttrDTO implements java.io.Serializable{
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 2048221367839030718L;
+
+    /**
+     * 瑕佸鍑虹殑灞炴��,key鏄帓搴忥紝value鏄睘鎬х殑缂栧彿
+     */
+    private Map<Integer,String> attrIdIndexMap ;
+
+    /**
+     * 褰撳墠绗嚑椤�
+     */
+    private Integer page;
+
+    /**
+     * 姣忛〉鏄剧ず鏈�澶ф暟
+     */
+    private Integer limit;
+
+    /**
+     * 鎴鍒扮鍑犻〉
+     */
+    private Integer endPage;
+
+    /**
+     * 鎺掑簭鐨勫瓧娈�
+     */
+    private String sort;
+
+    /**
+     * 鎺掑簭鐨勯『搴�
+     */
+    private String order;
+
+    /**
+     * 鏌ヨ鏉′欢
+     */
+    private Map<String,String> conditionMap;
+
+    /**
+     * 鍒嗙被鐨勪富閿�
+     */
+    private String codeClassifyOid;
+
+    public Integer getEndPage() {
+        return endPage;
+    }
+
+    public void setEndPage(Integer endPage) {
+        this.endPage = endPage;
+    }
+
+    public Map<Integer, String> getAttrIdIndexMap() {
+        return attrIdIndexMap;
+    }
+
+    public void setAttrIdIndexMap(Map<Integer, String> attrIdIndexMap) {
+        this.attrIdIndexMap = attrIdIndexMap;
+    }
+
+    public Integer getPage() {
+        return page;
+    }
+
+    public void setPage(Integer page) {
+        this.page = page;
+    }
+
+    public Integer getLimit() {
+        return limit;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public String getSort() {
+        return sort;
+    }
+
+    public void setSort(String sort) {
+        this.sort = sort;
+    }
+
+    public String getOrder() {
+        return order;
+    }
+
+    public void setOrder(String order) {
+        this.order = order;
+    }
+
+    public Map<String, String> getConditionMap() {
+        return conditionMap;
+    }
+
+    public void setConditionMap(Map<String, String> conditionMap) {
+        this.conditionMap = conditionMap;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeExportAttrDTO{" +
+                "attrIdIndexMap=" + attrIdIndexMap +
+                ", page=" + page +
+                ", limit=" + limit +
+                ", endPage=" + endPage +
+                ", sort='" + sort + '\'' +
+                ", order='" + order + '\'' +
+                ", conditionMap=" + conditionMap +
+                ", codeClassifyOid='" + codeClassifyOid + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeFixedValueDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeFixedValueDTO.java
new file mode 100644
index 0000000..4d897fb
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeFixedValueDTO.java
@@ -0,0 +1,84 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeFixedValueDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118504469968L;
+
+	/**
+	 * 鍥哄畾鐮佹涓婚敭
+	 */
+	private String codefixedsecoid;
+
+	/**
+	 * 鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	private String codefixedsecoidName;
+	/**
+	 * 鐮佸�煎簭鍙�
+	 */
+	private Integer ordernum;
+
+
+	/**
+	 * 鑾峰彇 鍥哄畾鐮佹涓婚敭
+	 */
+	public String getCodefixedsecoid (){
+		return codefixedsecoid;
+	}
+
+	/**
+	 * 璁剧疆 鍥哄畾鐮佹涓婚敭
+	 */
+	public void setCodefixedsecoid (String codefixedsecoid){
+		this.codefixedsecoid = codefixedsecoid;
+	}
+
+	/**
+	 * 鑾峰彇鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getCodefixedsecoidName (){
+		return codefixedsecoidName;
+	}
+
+	/**
+	 * 璁剧疆鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public void setCodefixedsecoidName (String codefixedsecoidName){
+		this.codefixedsecoidName = codefixedsecoidName;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	 * 璁剧疆 鐮佸�煎簭鍙�
+	 */
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeFixedValueDTO{" +
+		"codefixedsecoid='" + codefixedsecoid +"',"+
+		"codefixedsecoidName='" + codefixedsecoidName +"'," +
+		"ordernum='" + ordernum +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeImprotDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeImprotDataDTO.java
new file mode 100644
index 0000000..70c090f
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeImprotDataDTO.java
@@ -0,0 +1,66 @@
+package org.springblade.code.dto;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class CodeImprotDataDTO implements java.io.Serializable{
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1880155181507713248L;
+        /**
+         * 涓婚搴撳垎绫讳富閿�
+         */
+        private String codeClassifyOid;
+
+        /**
+         * 妯℃澘鐨勪富閿�
+         */
+        private String templateOid;
+        /**
+         * 缂栫爜瑙勫垯鐨勪富閿�
+         */
+        private String codeRuleOid;
+        /**
+         * 鏁版嵁
+         */
+        private List<Map<String,String>> datas = new ArrayList<>();
+
+        public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+        public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+        public String getTemplateOid() {
+        return templateOid;
+    }
+        public void setTemplateOid(String templateOid) {
+        this.templateOid = templateOid;
+    }
+        public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+        public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+        public List<Map<String, String>> getDatas() {
+        return datas;
+    }
+
+        public void setDatas(List<Map<String, String>> datas) {
+        this.datas = datas;
+    }
+
+        @Override
+        public String toString() {
+        return "CodeImprotDatasVO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", templateOid='" + templateOid + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", datas=" + datas +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeKeyAttrRepeatRuleDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeKeyAttrRepeatRuleDTO.java
new file mode 100644
index 0000000..01cc36a
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeKeyAttrRepeatRuleDTO.java
@@ -0,0 +1,99 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeKeyAttrRepeatRuleDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118144488876L;
+
+	/**
+	 * 鏄惁蹇界暐澶у皬鍐�
+	 */
+	private String ignorecaseflag;
+
+	/**
+	 * 鏄惁蹇界暐绌烘牸
+	 */
+	private String ignorespaceflag;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	private String ignoreallspaceflag;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	private String ignorewidthflag;
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public String getIgnorecaseflag (){
+		return ignorecaseflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public void setIgnorecaseflag (String ignorecaseflag){
+		this.ignorecaseflag = ignorecaseflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
+	 */
+	public String getIgnorespaceflag (){
+		return ignorespaceflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐绌烘牸
+	 */
+	public void setIgnorespaceflag (String ignorespaceflag){
+		this.ignorespaceflag = ignorespaceflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public String getIgnoreallspaceflag (){
+		return ignoreallspaceflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public void setIgnoreallspaceflag (String ignoreallspaceflag){
+		this.ignoreallspaceflag = ignoreallspaceflag;
+	}
+
+	public String getIgnorewidthflag() {
+		return ignorewidthflag;
+	}
+
+	public void setIgnorewidthflag(String ignorewidthflag) {
+		this.ignorewidthflag = ignorewidthflag;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeKeyAttrRepeatRuleDTO{" +
+				"ignorecaseflag='" + ignorecaseflag + '\'' +
+				", ignorespaceflag='" + ignorespaceflag + '\'' +
+				", ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
+				", ignorewidthflag='" + ignorewidthflag + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderDTO.java
new file mode 100644
index 0000000..95a90f5
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderDTO.java
@@ -0,0 +1,92 @@
+package org.springblade.code.dto;
+
+import com.vci.web.dto.BaseModelDTO;
+
+import java.util.List;
+
+/**
+ * 缂栫爜鐢宠鐨勪俊鎭�
+ * @author weidy
+ * @date 2022-2-28
+ */
+public class CodeOrderDTO extends BaseModelDTO {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1880155181507713245L;
+    /**
+     * 涓婚搴撳垎绫讳富閿�
+     */
+    private String codeClassifyOid;
+
+    /**
+     * 妯℃澘鐨勪富閿�
+     */
+    private String templateOid;
+    /**
+     * 缂栫爜瑙勫垯鐨勪富閿�
+     */
+    private String codeRuleOid;
+
+    /**
+     * 鏄惁鍦ㄦ祦绋嬩腑涓慨鏀�
+     */
+    private boolean editInProcess;
+
+    /**
+     * 鐮佹閫夋嫨鐨勪俊鎭�
+     */
+    private List<CodeOrderSecDTO> secDTOList;
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    public String getTemplateOid() {
+        return templateOid;
+    }
+
+    public void setTemplateOid(String templateOid) {
+        this.templateOid = templateOid;
+    }
+
+    public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+
+    public List<CodeOrderSecDTO> getSecDTOList() {
+        return secDTOList;
+    }
+
+    public void setSecDTOList(List<CodeOrderSecDTO> secDTOList) {
+        this.secDTOList = secDTOList;
+    }
+
+    public boolean isEditInProcess() {
+        return editInProcess;
+    }
+
+    public void setEditInProcess(boolean editInProcess) {
+        this.editInProcess = editInProcess;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeOrderDTO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", templateOid='" + templateOid + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", editInProcess=" + editInProcess +
+                ", secDTOList=" + secDTOList +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderSecDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderSecDTO.java
new file mode 100644
index 0000000..fdafd21
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeOrderSecDTO.java
@@ -0,0 +1,44 @@
+package org.springblade.code.dto;
+
+/**
+ * 缂栫爜鐢宠鐨勭爜娈电浉鍏充俊鎭�
+ * @author weidy
+ * @date 2022-02-28
+ */
+public class CodeOrderSecDTO implements java.io.Serializable{
+
+    /**
+     * 鐮佹鐨勪富閿�
+     */
+    private String secOid;
+
+    /**
+     * 鐮佹鍦ㄥ墠绔緭鍏ョ殑鍐呭
+     */
+    private String secValue;
+
+    public String getSecOid() {
+        return secOid;
+    }
+
+    public void setSecOid(String secOid) {
+        this.secOid = secOid;
+    }
+
+    public String getSecValue() {
+        return secValue;
+    }
+
+    public void setSecValue(String secValue) {
+        this.secValue = secValue;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeOrderSecDTO{" +
+                "secOid='" + secOid + '\'' +
+                ", secValue='" + secValue + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodePhaseAttrDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodePhaseAttrDTO.java
new file mode 100644
index 0000000..8757fd7
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodePhaseAttrDTO.java
@@ -0,0 +1,64 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodePhaseAttrDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118720105671L;
+
+	/**
+	 * 鎵�灞炴ā鏉块樁娈�
+	 */
+	private String codephaseoid;
+
+	/**
+	 * 鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	 */
+	private String codephaseoidName;
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉块樁娈�
+	 */
+	public String getCodephaseoid (){
+		return codephaseoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炴ā鏉块樁娈�
+	 */
+	public void setCodephaseoid (String codephaseoid){
+		this.codephaseoid = codephaseoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	 */
+	public String getCodephaseoidName (){
+		return codephaseoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	 */
+	public void setCodephaseoidName (String codephaseoidName){
+		this.codephaseoidName = codephaseoidName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodePhaseAttrDTO{" +
+		"codephaseoid='" + codephaseoid +"',"+
+		"codephaseoidName='" + codephaseoidName +"'," +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeResembleRuleDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeResembleRuleDTO.java
new file mode 100644
index 0000000..5ee214b
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeResembleRuleDTO.java
@@ -0,0 +1,118 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+public class CodeResembleRuleDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118908699390L;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	private String ignoreallspaceflag;
+
+	/**
+	 * 鏄惁蹇界暐澶у皬鍐�
+	 */
+	private String ignorecaseflag;
+
+	/**
+	 * 鏄惁蹇界暐绌烘牸
+	 */
+	private String ignorespaceflag;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	private String ignorewidthflag;
+
+	/**
+	 * 杩炴帴瀛楃
+	 */
+	private String linkCharacter;
+
+	public String getLinkCharacter() {
+		return linkCharacter;
+	}
+
+	public void setLinkCharacter(String linkCharacter) {
+		this.linkCharacter = linkCharacter;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public String getIgnoreallspaceflag (){
+		return ignoreallspaceflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public void setIgnoreallspaceflag (String ignoreallspaceflag){
+		this.ignoreallspaceflag = ignoreallspaceflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public String getIgnorecaseflag (){
+		return ignorecaseflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public void setIgnorecaseflag (String ignorecaseflag){
+		this.ignorecaseflag = ignorecaseflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
+	 */
+	public String getIgnorespaceflag (){
+		return ignorespaceflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐绌烘牸
+	 */
+	public void setIgnorespaceflag (String ignorespaceflag){
+		this.ignorespaceflag = ignorespaceflag;
+	}
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	public String getIgnorewidthflag (){
+		return ignorewidthflag;
+	}
+
+	/**
+	 * 璁剧疆 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	public void setIgnorewidthflag (String ignorewidthflag){
+		this.ignorewidthflag = ignorewidthflag;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeResembleRuleDTO{" +
+				"ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
+				", ignorecaseflag='" + ignorecaseflag + '\'' +
+				", ignorespaceflag='" + ignorespaceflag + '\'' +
+				", ignorewidthflag='" + ignorewidthflag + '\'' +
+				", linkCharacter='" + linkCharacter + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeRuleDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeRuleDTO.java
new file mode 100644
index 0000000..3dd7f99
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeRuleDTO.java
@@ -0,0 +1,40 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeRuleDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117067738769L;
+
+	/**
+	 * 鐮佹闆嗗悎
+	 */
+	private List<CodeBasicSecDTO> elements;
+
+	public List<CodeBasicSecDTO> getElements() {
+		return elements;
+	}
+
+	public void setElements(List<CodeBasicSecDTO> elements) {
+		this.elements = elements;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeRuleDTO{" +
+				"elements=" + elements +
+				'}'+ super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeSynonymDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeSynonymDTO.java
new file mode 100644
index 0000000..e313bff
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeSynonymDTO.java
@@ -0,0 +1,104 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+public class CodeSynonymDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117393017144L;
+
+	/**
+	 * 鎵�灞炵紪鐮佽鍒�
+	 */
+	private String codeclassifytemplateoid;
+
+	/**
+	 * 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	private String codeclassifytemplateoidName;
+	/**
+	 * 婧愬��
+	 */
+	private String sourcevalue;
+
+	/**
+	 * 鍚屼箟璇�
+	 */
+	private String synonymvalue;
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
+	 */
+	public String getCodeclassifytemplateoid (){
+		return codeclassifytemplateoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炵紪鐮佽鍒�
+	 */
+	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
+		this.codeclassifytemplateoid = codeclassifytemplateoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public String getCodeclassifytemplateoidName (){
+		return codeclassifytemplateoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
+		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 婧愬��
+	 */
+	public String getSourcevalue (){
+		return sourcevalue;
+	}
+
+	/**
+	 * 璁剧疆 婧愬��
+	 */
+	public void setSourcevalue (String sourcevalue){
+		this.sourcevalue = sourcevalue;
+	}
+
+	/**
+	 * 鑾峰彇 鍚屼箟璇�
+	 */
+	public String getSynonymvalue (){
+		return synonymvalue;
+	}
+
+	/**
+	 * 璁剧疆 鍚屼箟璇�
+	 */
+	public void setSynonymvalue (String synonymvalue){
+		this.synonymvalue = synonymvalue;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeSynonymDTO{" +
+		"codeclassifytemplateoid='" + codeclassifytemplateoid +"',"+
+		"codeclassifytemplateoidName='" + codeclassifytemplateoidName +"'," +
+		"sourcevalue='" + sourcevalue +"',"+
+		"synonymvalue='" + synonymvalue +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeTemplatePhaseDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeTemplatePhaseDTO.java
new file mode 100644
index 0000000..8c89f38
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/CodeTemplatePhaseDTO.java
@@ -0,0 +1,80 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeTemplatePhaseDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117809299474L;
+
+	/**
+	 * 鎵�灞炵紪鐮佽鍒�
+	 */
+	private String codeclassifytemplateoid;
+
+	/**
+	 * 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	private String codeclassifytemplateoidName;
+
+	/**
+	 * 鍖呭惈鐨勫睘鎬�
+	 */
+	private List<CodePhaseAttrDTO> attributes;
+
+	/**
+	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
+	 */
+	public String getCodeclassifytemplateoid (){
+		return codeclassifytemplateoid;
+	}
+
+	/**
+	 * 璁剧疆 鎵�灞炵紪鐮佽鍒�
+	 */
+	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
+		this.codeclassifytemplateoid = codeclassifytemplateoid;
+	}
+
+	/**
+	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public String getCodeclassifytemplateoidName (){
+		return codeclassifytemplateoidName;
+	}
+
+	/**
+	 * 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
+		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
+	}
+
+	public List<CodePhaseAttrDTO> getAttributes() {
+		return attributes;
+	}
+
+	public void setAttributes(List<CodePhaseAttrDTO> attributes) {
+		this.attributes = attributes;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeTemplatePhaseDTO{" +
+				"codeclassifytemplateoid='" + codeclassifytemplateoid + '\'' +
+				", codeclassifytemplateoidName='" + codeclassifytemplateoidName + '\'' +
+				", attributes=" + attributes +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingDataDTO.java
new file mode 100644
index 0000000..a229780
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingDataDTO.java
@@ -0,0 +1,120 @@
+package org.springblade.code.dto;
+
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 瑕佹帹閫佸緱鏁版嵁
+ * @author wangyi
+ * @date 2022-10-7
+ */
+public class DockingDataDTO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 5020487634341415429L;
+
+    /**
+     * 绯荤粺鎺ュ彛oid
+     */
+    private String classifyoid;
+
+    /**
+     * 绯荤粺id
+     */
+    private String btmoid;
+
+    /**
+     * 绯荤粺id
+     */
+    private String btmid;
+
+    /**
+     * 绯荤粺id
+     */
+    private String sendtype;
+
+    /**
+     * 鏄惁鍒嗚В浠诲姟
+     */
+    private String sendflag;
+
+    /**
+     * 绯荤粺id
+     */
+    private String classifyid;
+
+    /**
+     * 绯荤粺id
+     */
+    private String classifyname;
+
+    public String getClassifyoid() {
+        return classifyoid;
+    }
+
+    public void setClassifyoid(String classifyoid) {
+        this.classifyoid = classifyoid;
+    }
+
+    public String getBtmoid() {
+        return btmoid;
+    }
+
+    public void setBtmoid(String btmoid) {
+        this.btmoid = btmoid;
+    }
+
+    public String getBtmid() {
+        return btmid;
+    }
+
+    public void setBtmid(String btmid) {
+        this.btmid = btmid;
+    }
+
+    public String getSendtype() {
+        return sendtype;
+    }
+
+    public void setSendtype(String sendtype) {
+        this.sendtype = sendtype;
+    }
+
+    public String getSendflag() {
+        return sendflag;
+    }
+
+    public void setSendflag(String sendflag) {
+        this.sendflag = sendflag;
+    }
+
+    public String getClassifyid() {
+        return classifyid;
+    }
+
+    public void setClassifyid(String classifyid) {
+        this.classifyid = classifyid;
+    }
+
+    public String getClassifyname() {
+        return classifyname;
+    }
+
+    public void setClassifyname(String classifyname) {
+        this.classifyname = classifyname;
+    }
+
+    @Override
+    public String toString() {
+        return "DockingDataDO{" +
+                "classifyoid='" + classifyoid + '\'' +
+                ", btmoid='" + btmoid + '\'' +
+                ", btmid='" + btmid + '\'' +
+                ", sendtype='" + sendtype + '\'' +
+                ", sendflag='" + sendflag + '\'' +
+                ", classifyid='" + classifyid + '\'' +
+                ", classifyname='" + classifyname + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingLogeDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingLogeDTO.java
new file mode 100644
index 0000000..0b6f872
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingLogeDTO.java
@@ -0,0 +1,179 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+public class DockingLogeDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120475192779L;
+
+	/**
+	 * 鎺ュ彛鐘舵��
+	 */
+	private String interfacestatus;
+
+	/**
+	 * 鍙傛暟
+	 */
+	private String paramstring;
+
+	/**
+	 * 杩斿洖
+	 */
+	private String returnstring;
+
+	/**
+	 * 绯荤粺缂栧彿
+	 */
+	private String systemcode;
+
+	/**
+	 * 绯荤粺鍚嶇О
+	 */
+	private String systemname;
+
+	/**
+	 * 绯荤粺id
+	 */
+	private String systemoid;
+
+	/**
+	 * 鎺ュ彛绫诲瀷
+	 */
+	private String type;
+
+	/**
+	 * 杩旇繕鎻愮ず
+	 */
+	private String msg;
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	/**
+	 * 鑾峰彇 鎺ュ彛鐘舵��
+	 */
+	public String getInterfacestatus (){
+		return interfacestatus;
+	}
+
+	/**
+	 * 璁剧疆 鎺ュ彛鐘舵��
+	 */
+	public void setInterfacestatus (String interfacestatus){
+		this.interfacestatus = interfacestatus;
+	}
+
+	/**
+	 * 鑾峰彇 鍙傛暟
+	 */
+	public String getParamstring (){
+		return paramstring;
+	}
+
+	/**
+	 * 璁剧疆 鍙傛暟
+	 */
+	public void setParamstring (String paramstring){
+		this.paramstring = paramstring;
+	}
+
+	/**
+	 * 鑾峰彇 杩斿洖
+	 */
+	public String getReturnstring (){
+		return returnstring;
+	}
+
+	/**
+	 * 璁剧疆 杩斿洖
+	 */
+	public void setReturnstring (String returnstring){
+		this.returnstring = returnstring;
+	}
+
+	/**
+	 * 鑾峰彇 绯荤粺缂栧彿
+	 */
+	public String getSystemcode (){
+		return systemcode;
+	}
+
+	/**
+	 * 璁剧疆 绯荤粺缂栧彿
+	 */
+	public void setSystemcode (String systemcode){
+		this.systemcode = systemcode;
+	}
+
+	/**
+	 * 鑾峰彇 绯荤粺鍚嶇О
+	 */
+	public String getSystemname (){
+		return systemname;
+	}
+
+	/**
+	 * 璁剧疆 绯荤粺鍚嶇О
+	 */
+	public void setSystemname (String systemname){
+		this.systemname = systemname;
+	}
+
+	/**
+	 * 鑾峰彇 绯荤粺id
+	 */
+	public String getSystemoid (){
+		return systemoid;
+	}
+
+	/**
+	 * 璁剧疆 绯荤粺id
+	 */
+	public void setSystemoid (String systemoid){
+		this.systemoid = systemoid;
+	}
+
+	/**
+	 * 鑾峰彇 鎺ュ彛绫诲瀷
+	 */
+	public String getType (){
+		return type;
+	}
+
+	/**
+	 * 璁剧疆 鎺ュ彛绫诲瀷
+	 */
+	public void setType (String type){
+		this.type = type;
+	}
+
+
+	@Override
+	public String toString() {
+		return "DockingLogeDTO{" +
+				"interfacestatus='" + interfacestatus + '\'' +
+				", paramstring='" + paramstring + '\'' +
+				", returnstring='" + returnstring + '\'' +
+				", systemcode='" + systemcode + '\'' +
+				", systemname='" + systemname + '\'' +
+				", systemoid='" + systemoid + '\'' +
+				", type='" + type + '\'' +
+				", msg='" + msg + '\'' +
+				'}';
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataDTO.java
new file mode 100644
index 0000000..b7809c8
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataDTO.java
@@ -0,0 +1,244 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+public class DockingPreApplyDataDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119386802588L;
+
+	/**
+	 * 鐢宠oid
+	 */
+	private String preapplyoid;
+
+	/**
+	 * 鍞竴鏍囪瘑锛屽伐鑹洪噷杈圭殑鍥惧彿
+	 */
+	private String uniquecode;
+
+	/**
+	 * 涓婚搴撶紪鍙�
+	 */
+	private String type;
+
+	/**
+	 * 绯荤粺缂栧彿
+	 */
+	private String systemid;
+
+	/**
+	 * 姝e湪浣跨敤鏍囧織
+	 */
+	private String useddflag;
+
+	/**
+	 * 鍏宠仈鍒嗙被鎿嶄綔杩囧悗锛岃褰曠殑鍏宠仈鍒嗙被oid
+	 */
+	private String classifyoid;
+
+	/**
+	 * 鍏宠仈鍒嗙被鎿嶄綔杩囧悗锛岃褰曠殑鍏宠仈鍒嗙被鍚嶇О
+	 */
+	private String classifyname;
+
+	/**
+	 * 鐢宠鎴愬姛鍚庣殑缂栫爜,鎴栬�呭凡缁忓瓨鍦ㄧ殑缂栫爜
+	 */
+	private String num;
+	/**
+	 * 瑙勬牸鍨嬪彿
+	 */
+	private String model;
+	/**
+	 * 闆朵欢绫诲瀷
+	 */
+	private String parttype;
+	/**
+	 * 璁¢噺鍗曚綅
+	 */
+	private String unit;
+
+	/**
+	 * 鍗曢噸
+	 */
+	private String weight;
+
+	/**
+	 * 鏄惁閲嶈浠�
+	 */
+	private String importantPart;
+
+	/**
+	 * 鏄惁鍏抽敭浠�
+	 */
+	private String keyPart;
+	/**
+	 * 鏁版嵁澶勭悊杩斿洖鐘舵�佺爜
+	 */
+	private String datacode;
+
+	/**
+	 * 鏁版嵁澶勭悊杩斿洖淇℃伅
+	 */
+	private String datamsg;
+
+	public String getPreapplyoid() {
+		return preapplyoid;
+	}
+
+	public void setPreapplyoid(String preapplyoid) {
+		this.preapplyoid = preapplyoid;
+	}
+
+	public String getUniquecode() {
+		return uniquecode;
+	}
+
+	public void setUniquecode(String uniquecode) {
+		this.uniquecode = uniquecode;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getSystemid() {
+		return systemid;
+	}
+
+	public void setSystemid(String systemid) {
+		this.systemid = systemid;
+	}
+
+	public String getUseddflag() {
+		return useddflag;
+	}
+
+	public void setUseddflag(String useddflag) {
+		this.useddflag = useddflag;
+	}
+
+	public String getClassifyoid() {
+		return classifyoid;
+	}
+
+	public void setClassifyoid(String classifyoid) {
+		this.classifyoid = classifyoid;
+	}
+
+	public String getClassifyname() {
+		return classifyname;
+	}
+
+	public void setClassifyname(String classifyname) {
+		this.classifyname = classifyname;
+	}
+
+	public String getNum() {
+		return num;
+	}
+
+	public void setNum(String num) {
+		this.num = num;
+	}
+
+	public String getDatacode() {
+		return datacode;
+	}
+
+	public void setDatacode(String datacode) {
+		this.datacode = datacode;
+	}
+
+	public String getDatamsg() {
+		return datamsg;
+	}
+
+	public void setDatamsg(String datamsg) {
+		this.datamsg = datamsg;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	public String getParttype() {
+		return parttype;
+	}
+
+	public void setParttype(String parttype) {
+		this.parttype = parttype;
+	}
+
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+
+	public String getWeight() {
+		return weight;
+	}
+
+	public void setWeight(String weight) {
+		this.weight = weight;
+	}
+
+	public String getImportantPart() {
+		return importantPart;
+	}
+
+	public void setImportantPart(String importantPart) {
+		this.importantPart = importantPart;
+	}
+
+	public String getKeyPart() {
+		return keyPart;
+	}
+
+	public void setKeyPart(String keyPart) {
+		this.keyPart = keyPart;
+	}
+
+	@Override
+	public String toString() {
+		return "DockingPreApplyDataDTO{" +
+				"preapplyoid='" + preapplyoid + '\'' +
+				", uniquecode='" + uniquecode + '\'' +
+				", type='" + type + '\'' +
+				", systemid='" + systemid + '\'' +
+				", useddflag='" + useddflag + '\'' +
+				", classifyoid='" + classifyoid + '\'' +
+				", classifyname='" + classifyname + '\'' +
+				", num='" + num + '\'' +
+				", model='" + model + '\'' +
+				", parttype='" + parttype + '\'' +
+				", unit='" + unit + '\'' +
+				", weight='" + weight + '\'' +
+				", importantPart='" + importantPart + '\'' +
+				", keyPart='" + keyPart + '\'' +
+				", datacode='" + datacode + '\'' +
+				", datamsg='" + datamsg + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataInfoDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataInfoDTO.java
new file mode 100644
index 0000000..e9714d3
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreApplyDataInfoDTO.java
@@ -0,0 +1,126 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+public class DockingPreApplyDataInfoDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117408397326L;
+
+	/**
+	 * data鐨刼id
+	 */
+	private String dataoid;
+
+	/**
+	 * 鍞竴鏍囪瘑锛屽伐鑹洪噷杈圭殑鍥惧彿
+	 */
+	private String uniquecode;
+
+	/**
+	 * 灞炴�ey
+	 */
+	private String key;
+
+	/**
+	 * 灞炴�ey鍚箟
+	 */
+	private String mean;
+
+	/**
+	 * 灞炴�alue
+	 */
+	private String value;
+
+
+	/**
+	 * 鑾峰彇 data鐨刼id
+	 */
+	public String getDataoid (){
+		return dataoid;
+	}
+
+	/**
+	 * 璁剧疆 data鐨刼id
+	 */
+	public void setDataoid (String dataoid){
+		this.dataoid = dataoid;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�ey
+	 */
+	public String getKey (){
+		return key;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�ey
+	 */
+	public void setKey (String key){
+		this.key = key;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�ey鍚箟
+	 */
+	public String getMean (){
+		return mean;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�ey鍚箟
+	 */
+	public void setMean (String mean){
+		this.mean = mean;
+	}
+
+	/**
+	 * 鑾峰彇 鍞竴鏍囪瘑
+	 */
+	public String getUniquecode (){
+		return uniquecode;
+	}
+
+	/**
+	 * 璁剧疆 鍞竴鏍囪瘑
+	 */
+	public void setUniquecode (String uniquecode){
+		this.uniquecode = uniquecode;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�alue
+	 */
+	public String getValue (){
+		return value;
+	}
+
+	/**
+	 * 璁剧疆 灞炴�alue
+	 */
+	public void setValue (String value){
+		this.value = value;
+	}
+
+
+	@Override
+	public String toString() {
+		return "DockingPreApplyDataInfoDTO{" +
+		"dataoid='" + dataoid +"',"+
+		"key='" + key +"',"+
+		"mean='" + mean +"',"+
+		"uniquecode='" + uniquecode +"',"+
+		"value='" + value +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrMappingDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrMappingDTO.java
new file mode 100644
index 0000000..354f713
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrMappingDTO.java
@@ -0,0 +1,200 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 璁板綍闆嗘垚灞炴�т笌涓绘暟鎹睘鎬ф槧灏勫叧绯诲璞�
+ * @author xiejun
+ * @date 2023-01-06
+ */
+public class DockingPreAttrMappingDTO extends BaseModelVO {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6020487634341415429L;
+    /***
+     * 榛樿鍊�
+     */
+    private String jdefaultValue;
+
+    /***
+     * 榛樿鍊�
+     */
+    private String jmetaListId;
+    /**
+     * 婧愬垎绫籭d
+     */
+    private  String jsourceClsfId;
+    /**
+     * 婧愬垎绫诲悕绉�
+     */
+    private String jsourceClsfName;
+    /**
+     * 婧愬睘鎬id
+     */
+    private String jtargetAttrId;
+
+    /**
+     * 鐩爣灞炴�id
+     */
+    private String jtargetClsfId;
+
+    /***
+     * 妯℃澘Id
+     */
+    private String jviewModeId;
+    /***
+     * 妯℃澘鍚嶇О
+     */
+    private String jviewModeName;
+
+    /***
+     * 鐩爣灞炴�у唴閮ㄥ悕绉�
+     */
+    private String jtargetAttrKey;
+
+    /***
+     * 鐩爣灞炴�у悕绉�
+     */
+    private String jtargetAttrName;
+
+    /***
+     * 鐩爣灞炴�у唴閮ㄥ悕绉�
+     */
+    private String jsourceAttrKey;
+
+    /***
+     * 鐩爣灞炴�у悕绉�
+     */
+    private String jsourceAttrName;
+    /**
+     * 灞炴�у彇鍊艰寖鍥�
+     */
+    private List<DockingPreAttrRangeDTO> dockingPreAttrRangeDTOS;
+
+    public String getJdefaultValue() {
+        return jdefaultValue;
+    }
+
+    public void setJdefaultValue(String jdefaultValue) {
+        this.jdefaultValue = jdefaultValue;
+    }
+
+    public String getJmetaListId() {
+        return jmetaListId;
+    }
+
+    public void setJmetaListId(String jmetaListId) {
+        this.jmetaListId = jmetaListId;
+    }
+
+    public String getJsourceClsfId() {
+        return jsourceClsfId;
+    }
+
+    public void setJsourceClsfId(String jsourceClsfId) {
+        this.jsourceClsfId = jsourceClsfId;
+    }
+
+    public String getJsourceClsfName() {
+        return jsourceClsfName;
+    }
+
+    public void setJsourceClsfName(String jsourceClsfName) {
+        this.jsourceClsfName = jsourceClsfName;
+    }
+
+    public String getJtargetAttrId() {
+        return jtargetAttrId;
+    }
+
+    public void setJtargetAttrId(String jtargetAttrId) {
+        this.jtargetAttrId = jtargetAttrId;
+    }
+
+    public String getJtargetClsfId() {
+        return jtargetClsfId;
+    }
+
+    public void setJtargetClsfId(String jtargetClsfId) {
+        this.jtargetClsfId = jtargetClsfId;
+    }
+
+    public String getJviewModeId() {
+        return jviewModeId;
+    }
+
+    public void setJviewModeId(String jviewModeId) {
+        this.jviewModeId = jviewModeId;
+    }
+
+    public String getJviewModeName() {
+        return jviewModeName;
+    }
+
+    public void setJviewModeName(String jviewModeName) {
+        this.jviewModeName = jviewModeName;
+    }
+
+    public String getJtargetAttrKey() {
+        return jtargetAttrKey;
+    }
+
+    public void setJtargetAttrKey(String jtargetAttrKey) {
+        this.jtargetAttrKey = jtargetAttrKey;
+    }
+
+    public String getJtargetAttrName() {
+        return jtargetAttrName;
+    }
+
+    public void setJtargetAttrName(String jtargetAttrName) {
+        this.jtargetAttrName = jtargetAttrName;
+    }
+
+    public String getJsourceAttrKey() {
+        return jsourceAttrKey;
+    }
+
+    public void setJsourceAttrKey(String jsourceAttrKey) {
+        this.jsourceAttrKey = jsourceAttrKey;
+    }
+
+    public String getJsourceAttrName() {
+        return jsourceAttrName;
+    }
+
+    public void setJsourceAttrName(String jsourceAttrName) {
+        this.jsourceAttrName = jsourceAttrName;
+    }
+
+    public List<DockingPreAttrRangeDTO> getDockingPreAttrRangeDTOS() {
+        return dockingPreAttrRangeDTOS;
+    }
+
+    public void setDockingPreAttrRangeDTOS(List<DockingPreAttrRangeDTO> dockingPreAttrRangeDTOS) {
+        this.dockingPreAttrRangeDTOS = dockingPreAttrRangeDTOS;
+    }
+
+    @Override
+    public String toString() {
+        return "DockingPreAttrMappingDTO{" +
+                "jdefaultValue='" + jdefaultValue + '\'' +
+                ", jmetaListId='" + jmetaListId + '\'' +
+                ", jsourceClsfId='" + jsourceClsfId + '\'' +
+                ", jsourceClsfName='" + jsourceClsfName + '\'' +
+                ", jtargetAttrId='" + jtargetAttrId + '\'' +
+                ", jtargetClsfId='" + jtargetClsfId + '\'' +
+                ", jviewModeId='" + jviewModeId + '\'' +
+                ", jviewModeName='" + jviewModeName + '\'' +
+                ", jtargetAttrKey='" + jtargetAttrKey + '\'' +
+                ", jtargetAttrName='" + jtargetAttrName + '\'' +
+                ", jsourceAttrKey='" + jsourceAttrKey + '\'' +
+                ", jsourceAttrName='" + jsourceAttrName + '\'' +
+                ", dockingPreAttrRangeDTOS=" + dockingPreAttrRangeDTOS +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrRangeDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrRangeDTO.java
new file mode 100644
index 0000000..9cf54ff
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingPreAttrRangeDTO.java
@@ -0,0 +1,82 @@
+package org.springblade.code.dto;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+public class DockingPreAttrRangeDTO extends BaseModelVO {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6020487634341415410L;
+    /***
+     *灞炴�d
+     */
+    private String jmetaListId;
+    /**
+     * 灞炴�ф灇涓炬樉绀哄悕绉�
+     */
+    private  String jnumText;
+    /**
+     * 灞炴�ф灇涓惧唴閮ㄥ悕绉�
+     */
+    private String jnumTextValue;
+
+    /**
+     * 婧愬睘鎬ф灇涓炬樉绀哄悕绉�
+     */
+    private  String jtargeNumText;
+    /**
+     * 婧愬睘鎬ф灇涓惧唴閮ㄥ悕绉�
+     */
+    private String jtargeNumTextValue;
+
+    public String getJnumText() {
+        return jnumText;
+    }
+
+    public void setJnumText(String jnumText) {
+        this.jnumText = jnumText;
+    }
+
+    public String getJnumTextValue() {
+        return jnumTextValue;
+    }
+
+    public void setJnumTextValue(String jnumTextValue) {
+        this.jnumTextValue = jnumTextValue;
+    }
+
+    public String getJtargeNumText() {
+        return jtargeNumText;
+    }
+
+    public void setJtargeNumText(String jtargeNumText) {
+        this.jtargeNumText = jtargeNumText;
+    }
+
+    public String getJtargeNumTextValue() {
+        return jtargeNumTextValue;
+    }
+
+    public void setJtargeNumTextValue(String jtargeNumTextValue) {
+        this.jtargeNumTextValue = jtargeNumTextValue;
+    }
+
+    public String getJmetaListId() {
+        return jmetaListId;
+    }
+
+    public void setJmetaListId(String jmetaListId) {
+        this.jmetaListId = jmetaListId;
+    }
+
+    @Override
+    public String toString() {
+        return "DockingPreAttrRangeDTO{" +
+                "jmetaListId='" + jmetaListId + '\'' +
+                ", jnumText='" + jnumText + '\'' +
+                ", jnumTextValue='" + jnumTextValue + '\'' +
+                ", jtargeNumText='" + jtargeNumText + '\'' +
+                ", jtargeNumTextValue='" + jtargeNumTextValue + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingTaskDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingTaskDTO.java
new file mode 100644
index 0000000..e9a05ff
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/DockingTaskDTO.java
@@ -0,0 +1,197 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+public class DockingTaskDTO extends BaseModelVO {
+
+	/**
+	 * 绂佹淇敼杩欎釜鍊�
+	 */
+	private static final long serialVersionUID = 4615707120806149100L;
+
+	/**
+	 * 绯荤粺鎺ュ彛oid
+	 */
+	private String sysinfooid;
+
+	/**
+	 * 绯荤粺id
+	 */
+	private String systemoid;
+
+	/**
+	 * 绯荤粺缂栧彿
+	 */
+	private String systemcode;
+
+	/**
+	 * 绯荤粺鍚嶇О
+	 */
+	private String systemname;
+
+	/**
+	 * 鍒嗙被oid
+	 */
+	private String classifyoid;
+
+	/**
+	 * 鍒嗙被id
+	 */
+	private String classifyid;
+
+	/**
+	 * 鍒嗙被鍚嶇О
+	 */
+	private String classifyname;
+
+	/**
+	 * 涓氬姟绫诲瀷鏁版嵁oid
+	 */
+	private String btmoid;
+
+	/**
+	 * 涓氬姟绫诲瀷鏁版嵁oid
+	 */
+	private String btmid;
+
+	/**
+	 * uniquecode
+	 */
+	private String uniquecode;
+
+	/**
+	 * 鏄惁鍙戦�佹垚鍔�
+	 */
+	private String sendflag;
+
+	private String sendtype;
+	/**
+	 * 鏄惁鍙戦�佹垚鍔�
+	 */
+	private String dataoid;
+
+	public String getDataoid() {
+		return dataoid;
+	}
+
+	public void setDataoid(String dataoid) {
+		this.dataoid = dataoid;
+	}
+	public String getSendtype() {
+		return sendtype;
+	}
+
+	public void setSendtype(String sendtype) {
+		this.sendtype = sendtype;
+	}
+	public String getSysinfooid() {
+		return sysinfooid;
+	}
+
+	public void setSysinfooid(String sysinfooid) {
+		this.sysinfooid = sysinfooid;
+	}
+
+	public String getSystemoid() {
+		return systemoid;
+	}
+
+	public void setSystemoid(String systemoid) {
+		this.systemoid = systemoid;
+	}
+
+	public String getSystemcode() {
+		return systemcode;
+	}
+
+	public void setSystemcode(String systemcode) {
+		this.systemcode = systemcode;
+	}
+
+	public String getSystemname() {
+		return systemname;
+	}
+
+	public void setSystemname(String systemname) {
+		this.systemname = systemname;
+	}
+
+	public String getClassifyoid() {
+		return classifyoid;
+	}
+
+	public void setClassifyoid(String classifyoid) {
+		this.classifyoid = classifyoid;
+	}
+	public String getClassifyid() {
+		return classifyid;
+	}
+
+	public void setClassifyid(String classifyid) {
+		this.classifyid = classifyid;
+	}
+	public String getClassifyname() {
+		return classifyname;
+	}
+
+	public void setClassifyname(String classifyname) {
+		this.classifyname = classifyname;
+	}
+
+	public String getBtmoid() {
+		return btmoid;
+	}
+
+	public void setBtmoid(String btmoid) {
+		this.btmoid = btmoid;
+	}
+	public String getBtmid() {
+		return btmid;
+	}
+
+	public void setBtmid(String btmid) {
+		this.btmid = btmid;
+	}
+
+	public String getSendflag() {
+		return sendflag;
+	}
+
+	public void setSendflag(String sendflag) {
+		this.sendflag = sendflag;
+	}
+
+	public String getUniquecode() {
+		return uniquecode;
+	}
+
+	public void setUniquecode(String uniquecode) {
+		this.uniquecode = uniquecode;
+	}
+
+	@Override
+	public String toString() {
+		return "DockingTaskDTO{" +
+				"sysinfooid='" + sysinfooid + '\'' +
+				", systemoid='" + systemoid + '\'' +
+				", systemcode='" + systemcode + '\'' +
+				", systemname='" + systemname + '\'' +
+				", classifyoid='" + classifyoid + '\'' +
+				", classifyid='" + classifyid + '\'' +
+				", classifyname='" + classifyname + '\'' +
+				", btmoid='" + btmoid + '\'' +
+				", btmo='" + btmid + '\'' +
+				", uniquecode='" + uniquecode + '\'' +
+				", sendflag='" + sendflag + '\'' +
+				", sendtype='" + sendtype + '\'' +
+				", dataoid='" + dataoid + '\'' +
+				'}';
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/PreApplyCodeOrderDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/PreApplyCodeOrderDTO.java
new file mode 100644
index 0000000..9ea3fdf
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/PreApplyCodeOrderDTO.java
@@ -0,0 +1,106 @@
+package org.springblade.code.dto;
+
+import com.vci.web.dto.BaseModelDTO;
+
+import java.util.List;
+
+/**
+ * 棰勭敵璇风紪鐮佺敵璇风殑淇℃伅
+ * @author weidy
+ * @date 2022-2-28
+ */
+public class PreApplyCodeOrderDTO extends BaseModelDTO {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1880155181507713245L;
+    /**
+     * 涓婚搴撳垎绫讳富閿�
+     */
+    private String codeClassifyOid;
+
+    /**
+     * 妯℃澘鐨勪富閿�
+     */
+    private String templateOid;
+    /**
+     * 缂栫爜瑙勫垯鐨勪富閿�
+     */
+    private String codeRuleOid;
+
+    /**
+     * 鏄惁鍦ㄦ祦绋嬩腑涓慨鏀�
+     */
+    private boolean editInProcess;
+
+    /**
+     * dockingpadata data鐨刼id
+     */
+    private String dataoid;
+
+    /**
+     * 鐮佹閫夋嫨鐨勪俊鎭�
+     */
+    private List<CodeOrderSecDTO> secDTOList;
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    public String getTemplateOid() {
+        return templateOid;
+    }
+
+    public void setTemplateOid(String templateOid) {
+        this.templateOid = templateOid;
+    }
+
+    public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+
+    public List<CodeOrderSecDTO> getSecDTOList() {
+        return secDTOList;
+    }
+
+    public void setSecDTOList(List<CodeOrderSecDTO> secDTOList) {
+        this.secDTOList = secDTOList;
+    }
+
+    public boolean isEditInProcess() {
+        return editInProcess;
+    }
+
+    public void setEditInProcess(boolean editInProcess) {
+        this.editInProcess = editInProcess;
+    }
+
+    public String getDataoid() {
+        return dataoid;
+    }
+
+    public void setDataoid(String dataoid) {
+        this.dataoid = dataoid;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeOrderDTO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", templateOid='" + templateOid + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", editInProcess=" + editInProcess +
+                ", secDTOList=" + secDTOList +
+                ", dataoid=" + dataoid +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntAuthorityDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntAuthorityDTO.java
new file mode 100644
index 0000000..b363829
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntAuthorityDTO.java
@@ -0,0 +1,124 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public class SysIntAuthorityDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119813649189L;
+
+	/**
+	 * 楠岃瘉浠ょ墝
+	 */
+	private String token;
+
+	/**
+	 * 璁よ瘉鏂瑰紡
+	 */
+	private String type;
+
+	/**
+	 * 璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	private String typeText;
+	/**
+	 * 楠岃瘉鐢ㄦ埛
+	 */
+	private String useraccount;
+
+	/**
+	 * 楠岃瘉瀵嗙爜
+	 */
+	private String usercode;
+
+
+	/**
+	 * 鑾峰彇 楠岃瘉浠ょ墝
+	 */
+	public String getToken (){
+		return token;
+	}
+
+	/**
+	 * 璁剧疆 楠岃瘉浠ょ墝
+	 */
+	public void setToken (String token){
+		this.token = token;
+	}
+
+	/**
+	 * 鑾峰彇 璁よ瘉鏂瑰紡
+	 */
+	public String getType (){
+		return type;
+	}
+
+	/**
+	 * 璁剧疆 璁よ瘉鏂瑰紡
+	 */
+	public void setType (String type){
+		this.type = type;
+	}
+
+	/**
+	 * 鑾峰彇璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public String getTypeText (){
+		return typeText;
+	}
+
+	/**
+	 * 璁剧疆璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public void setTypeText (String typeText){
+		this.typeText = typeText;
+	}
+	/**
+	 * 鑾峰彇 楠岃瘉鐢ㄦ埛
+	 */
+	public String getUseraccount (){
+		return useraccount;
+	}
+
+	/**
+	 * 璁剧疆 楠岃瘉鐢ㄦ埛
+	 */
+	public void setUseraccount (String useraccount){
+		this.useraccount = useraccount;
+	}
+
+	/**
+	 * 鑾峰彇 楠岃瘉瀵嗙爜
+	 */
+	public String getUsercode (){
+		return usercode;
+	}
+
+	/**
+	 * 璁剧疆 楠岃瘉瀵嗙爜
+	 */
+	public void setUsercode (String usercode){
+		this.usercode = usercode;
+	}
+
+
+	@Override
+	public String toString() {
+		return "SysIntAuthorityDTO{" +
+		"token='" + token +"',"+
+		"type='" + type +"',"+
+		"typeText='" + typeText + "',"  +
+		"useraccount='" + useraccount +"',"+
+		"usercode='" + usercode +"',"+
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntBaseDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntBaseDTO.java
new file mode 100644
index 0000000..3cd36f9
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntBaseDTO.java
@@ -0,0 +1,26 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public class SysIntBaseDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117775925895L;
+
+
+
+	@Override
+	public String toString() {
+		return "SysIntBaseDTO{" +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntHeaderDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntHeaderDTO.java
new file mode 100644
index 0000000..af10f11
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntHeaderDTO.java
@@ -0,0 +1,80 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+public class SysIntHeaderDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117695864945L;
+
+	/**
+	 * SysIntInfoDO 鐨刼id
+	 */
+	private String infoOid;
+
+	/**
+	 * 鍙傛暟key
+	 */
+	private String headerkey;
+
+	/**
+	 * 鍙傛暟value
+	 */
+	private String headeralue;
+
+	/**
+	 * 鏄惁浣跨敤
+	 */
+	private String usedflag;
+
+	public String getInfoOid() {
+		return infoOid;
+	}
+
+	public void setInfoOid(String infoOid) {
+		this.infoOid = infoOid;
+	}
+
+	public String getHeaderkey() {
+		return headerkey;
+	}
+
+	public void setHeaderkey(String headerkey) {
+		this.headerkey = headerkey;
+	}
+
+	public String getHeaderalue() {
+		return headeralue;
+	}
+
+	public void setHeaderalue(String headeralue) {
+		this.headeralue = headeralue;
+	}
+
+	public String getUsedflag() {
+		return usedflag;
+	}
+
+	public void setUsedflag(String usedflag) {
+		this.usedflag = usedflag;
+	}
+
+	@Override
+	public String toString() {
+		return "SysIntHeaderDO{" +
+				"infoOid='" + infoOid + '\'' +
+				", headerkey='" + headerkey + '\'' +
+				", headeralue='" + headeralue + '\'' +
+				", usedflag='" + usedflag + '\'' +
+				'}';
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoBseDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoBseDTO.java
new file mode 100644
index 0000000..1aeeb6b
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoBseDTO.java
@@ -0,0 +1,46 @@
+package org.springblade.code.dto;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+public class SysIntInfoBseDTO extends BaseModelVO {
+    private SysIntInfoDTO sysIntInfoDTO;
+
+    private List<SysIntParamDTO> sysIntParamDTO;
+
+    private List<SysIntHeaderDTO> sysIntHeaderDTOS;
+
+    public SysIntInfoDTO getSysIntInfoDTO() {
+        return sysIntInfoDTO;
+    }
+
+    public void setSysIntInfoDTO(SysIntInfoDTO sysIntInfoDTO) {
+        this.sysIntInfoDTO = sysIntInfoDTO;
+    }
+
+    public List<SysIntParamDTO> getSysIntParamDTO() {
+        return sysIntParamDTO;
+    }
+
+    public void setSysIntParamDTO(List<SysIntParamDTO> sysIntParamDTO) {
+        this.sysIntParamDTO = sysIntParamDTO;
+    }
+
+    public List<SysIntHeaderDTO> getSysIntHeaderDTOS() {
+        return sysIntHeaderDTOS;
+    }
+
+    public void setSysIntHeaderDTOS(List<SysIntHeaderDTO> sysIntHeaderDTOS) {
+        this.sysIntHeaderDTOS = sysIntHeaderDTOS;
+    }
+
+    @Override
+    public String toString() {
+        return "SysIntInfoBseDTO{" +
+                "sysIntInfoDTO=" + sysIntInfoDTO +
+                ", sysIntParamDTO=" + sysIntParamDTO +
+                ", sysIntHeaderDTOS=" + sysIntHeaderDTOS +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoDTO.java
new file mode 100644
index 0000000..6c4b3e0
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntInfoDTO.java
@@ -0,0 +1,664 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public class SysIntInfoDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120053955466L;
+
+	/**
+	 * 璁よ瘉鏂瑰紡
+	 */
+	private String authorityoid;
+
+	/**
+	 * 璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	private String authorityoidName;
+	/**
+	 * 鎺ュ彛鍑芥暟
+	 */
+	private String interfaceFunction;
+
+	/**
+	 * 鎺ュ彛绫诲瀷
+	 */
+	private String interfacetype;
+
+	/**
+	 * 鎺ュ彛绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String interfacetypeText;
+	/**
+	 * 鍙傛暟绫诲瀷
+	 */
+	private String paramtype;
+
+	/**
+	 * 鍙傛暟绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String paramtypeText;
+	/**
+	 * 璇锋眰鏂瑰紡
+	 */
+	private String requestmethod;
+
+	/**
+	 * 璇锋眰鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	private String requestmethodText;
+	/**
+	 * 鍒嗙被oid
+	 */
+	private String classifyoid;
+	/**
+	 * 鍚敤銆佸仠鐢╰rue/false锛屼笉鐢ㄥ钩鍙扮殑鏋氫妇锛屽噺灏戝骞冲彴鐨勮�﹀悎
+	 */
+	private String usedflag;
+	/**
+	 * 鎺ㄩ�佺郴缁無id
+	 */
+	private String sysbaseoid;
+	/**
+	 * 鎺ㄩ�佺郴缁熺紪鍙�
+	 */
+	private String sysbaseid;
+	/**
+	 * 鎺ㄩ�佺郴缁熷悕绉�
+	 */
+	private String sysbasename;
+	/**
+	 * 璇锋眰鍦板潃
+	 */
+	private String requesturl;
+
+	/**
+	 * 杩斿洖鍊肩被鍨�
+	 */
+	private String returntype;
+
+	/**
+	 * 杩斿洖鍊肩被鍨嬫樉绀烘枃鏈�
+	 */
+	private String returntypeText;
+	/**
+	 * 鏉ユ簮绯荤粺涓婚敭
+	 */
+	private String sourcesystemoid;
+
+	/**
+	 * 鏉ユ簮绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	private String sourcesystemoidName;
+
+	/**
+	 * 鏉ユ簮绯荤粺鍚嶇О
+	 */
+	private String sourceSysName;
+
+	/**
+	 * 鏉ユ簮绯荤粺鏍囪瘑
+	 */
+	private String sourceSysId;
+
+	/**
+	 * 鐩爣绯荤粺涓婚敭
+	 */
+	private String targetsystemoid;
+
+	/**
+	 * 鐩爣绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	private String targetsystemoidName;
+
+	/**
+	 * 鐩爣绯荤粺鍚嶇О
+	 */
+	private String targetSysName;
+
+	/**
+	 * 鐩爣绯荤粺鏍囪瘑
+	 */
+	private String targetSysId;
+
+
+
+	/**
+	 * 鎺ュ彛鎻忚堪
+	 */
+	private String description;
+
+	/**
+	 * 绫昏矾寰�
+	 */
+	private String classPath;
+
+	/**
+	 * 鏁版嵁娴佸悜鏂瑰紡
+	 */
+	private String dataFlowType;
+
+	/**
+	 * 鏁版嵁娴佸悜鏂瑰紡鐨勬樉绀哄瓧娈�
+	 */
+	private String dataFlowTypeText;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨�
+	 */
+	private String btmTypeId;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨嬬殑涓枃鍚嶇О
+	 */
+	private String btmTypeName;
+
+	/**
+	 * 鍛藉悕绌洪棿
+	 */
+	private String namespace;
+
+	/**
+	 * soapAction
+	 */
+	private String soapaction;
+
+	/**
+	 * 鍙傛暟鍚嶇О
+	 */
+	private String targName;
+
+	/**
+	 * cxfaxis
+	 */
+	private String cxfaxis;
+
+	/**
+	 * 鍒嗙被id
+	 */
+	private String classifyid;
+
+	/**
+	 * 鍒嗙被鍚嶇О
+	 */
+	private String classifyname;
+	/***
+	 * 鍙傛暟淇℃伅瀵硅薄
+	 */
+	private List<SysIntParamDTO> sysIntParamDTOs;
+	/***
+	 * header淇℃伅瀵硅薄
+	 */
+	private List<SysIntHeaderDTO> sysIntHeaderDTOS;
+
+	public String pushType;
+
+	public String getClassifyid() {
+		return classifyid;
+	}
+
+	public void setClassifyid(String classifyid) {
+		this.classifyid = classifyid;
+	}
+
+	public String getClassifyname() {
+		return classifyname;
+	}
+
+	public void setClassifyname(String classifyname) {
+		this.classifyname = classifyname;
+	}
+
+	public String getTargName() {
+		return targName;
+	}
+
+	public void setTargName(String targName) {
+		this.targName = targName;
+	}
+
+	public String getSoapaction() {
+		return soapaction;
+	}
+
+	public void setSoapaction(String soapaction) {
+		this.soapaction = soapaction;
+	}
+
+	public String getCxfaxis() {
+		return cxfaxis;
+	}
+
+	public void setCxfaxis(String cxfaxis) {
+		this.cxfaxis = cxfaxis;
+	}
+
+	public String getNamespace() {
+		return namespace;
+	}
+
+	public void setNamespace(String namespace) {
+		this.namespace = namespace;
+	}
+
+	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 getAuthorityoid (){
+		return authorityoid;
+	}
+
+	/**
+	 * 璁剧疆 璁よ瘉鏂瑰紡
+	 */
+	public void setAuthorityoid (String authorityoid){
+		this.authorityoid = authorityoid;
+	}
+
+	/**
+	 * 鑾峰彇璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public String getAuthorityoidName (){
+		return authorityoidName;
+	}
+
+	/**
+	 * 璁剧疆璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public void setAuthorityoidName (String authorityoidName){
+		this.authorityoidName = authorityoidName;
+	}
+	/**
+	 * 鑾峰彇 鎺ュ彛鍑芥暟
+	 */
+	public String getInterfaceFunction (){
+		return interfaceFunction;
+	}
+
+	/**
+	 * 璁剧疆 鎺ュ彛鍑芥暟
+	 */
+	public void setInterfaceFunction (String interfaceFunction){
+		this.interfaceFunction = interfaceFunction;
+	}
+
+	/**
+	 * 鑾峰彇 鎺ュ彛绫诲瀷
+	 */
+	public String getInterfacetype (){
+		return interfacetype;
+	}
+
+	/**
+	 * 璁剧疆 鎺ュ彛绫诲瀷
+	 */
+	public void setInterfacetype (String interfacetype){
+		this.interfacetype = interfacetype;
+	}
+
+	/**
+	 * 鑾峰彇鎺ュ彛绫诲瀷鏄剧ず鏂囨湰
+	 */
+	public String getInterfacetypeText (){
+		return interfacetypeText;
+	}
+
+	/**
+	 * 璁剧疆鎺ュ彛绫诲瀷鏄剧ず鏂囨湰
+	 */
+	public void setInterfacetypeText (String interfacetypeText){
+		this.interfacetypeText = interfacetypeText;
+	}
+	/**
+	 * 鑾峰彇 鍙傛暟绫诲瀷
+	 */
+	public String getParamtype (){
+		return paramtype;
+	}
+
+	/**
+	 * 璁剧疆 鍙傛暟绫诲瀷
+	 */
+	public void setParamtype (String paramtype){
+		this.paramtype = paramtype;
+	}
+
+	/**
+	 * 鑾峰彇鍙傛暟绫诲瀷鏄剧ず鏂囨湰
+	 */
+	public String getParamtypeText (){
+		return paramtypeText;
+	}
+
+	/**
+	 * 璁剧疆鍙傛暟绫诲瀷鏄剧ず鏂囨湰
+	 */
+	public void setParamtypeText (String paramtypeText){
+		this.paramtypeText = paramtypeText;
+	}
+	/**
+	 * 鑾峰彇 璇锋眰鏂瑰紡
+	 */
+	public String getRequestmethod (){
+		return requestmethod;
+	}
+
+	/**
+	 * 璁剧疆 璇锋眰鏂瑰紡
+	 */
+	public void setRequestmethod (String requestmethod){
+		this.requestmethod = requestmethod;
+	}
+
+	/**
+	 * 鑾峰彇璇锋眰鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public String getRequestmethodText (){
+		return requestmethodText;
+	}
+
+	/**
+	 * 璁剧疆璇锋眰鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	public void setRequestmethodText (String requestmethodText){
+		this.requestmethodText = requestmethodText;
+	}
+	/**
+	 * 鑾峰彇 璇锋眰鍦板潃
+	 */
+	public String getRequesturl (){
+		return requesturl;
+	}
+
+	/**
+	 * 璁剧疆 璇锋眰鍦板潃
+	 */
+	public void setRequesturl (String requesturl){
+		this.requesturl = requesturl;
+	}
+
+	/**
+	 * 鑾峰彇 杩斿洖鍊肩被鍨�
+	 */
+	public String getReturntype (){
+		return returntype;
+	}
+
+	/**
+	 * 璁剧疆 杩斿洖鍊肩被鍨�
+	 */
+	public void setReturntype (String returntype){
+		this.returntype = returntype;
+	}
+
+	/**
+	 * 鑾峰彇杩斿洖鍊肩被鍨嬫樉绀烘枃鏈�
+	 */
+	public String getReturntypeText (){
+		return returntypeText;
+	}
+
+	/**
+	 * 璁剧疆杩斿洖鍊肩被鍨嬫樉绀烘枃鏈�
+	 */
+	public void setReturntypeText (String returntypeText){
+		this.returntypeText = returntypeText;
+	}
+	/**
+	 * 鑾峰彇 鏉ユ簮绯荤粺涓婚敭
+	 */
+	public String getSourcesystemoid (){
+		return sourcesystemoid;
+	}
+
+	/**
+	 * 璁剧疆 鏉ユ簮绯荤粺涓婚敭
+	 */
+	public void setSourcesystemoid (String sourcesystemoid){
+		this.sourcesystemoid = sourcesystemoid;
+	}
+
+	/**
+	 * 鑾峰彇鏉ユ簮绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getSourcesystemoidName (){
+		return sourcesystemoidName;
+	}
+
+	/**
+	 * 璁剧疆鏉ユ簮绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	public void setSourcesystemoidName (String sourcesystemoidName){
+		this.sourcesystemoidName = sourcesystemoidName;
+	}
+	/**
+	 * 鑾峰彇 鐩爣绯荤粺涓婚敭
+	 */
+	public String getTargetsystemoid (){
+		return targetsystemoid;
+	}
+
+	/**
+	 * 璁剧疆 鐩爣绯荤粺涓婚敭
+	 */
+	public void setTargetsystemoid (String targetsystemoid){
+		this.targetsystemoid = targetsystemoid;
+	}
+
+	/**
+	 * 鑾峰彇鐩爣绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getTargetsystemoidName (){
+		return targetsystemoidName;
+	}
+
+	/**
+	 * 璁剧疆鐩爣绯荤粺涓婚敭鏄剧ず鏂囨湰
+	 */
+	public void setTargetsystemoidName (String targetsystemoidName){
+		this.targetsystemoidName = targetsystemoidName;
+	}
+
+	@Override
+	public String getDescription() {
+		return description;
+	}
+
+	@Override
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getClassPath() {
+		return classPath;
+	}
+
+	public void setClassPath(String classPath) {
+		this.classPath = classPath;
+	}
+
+	public String getDataFlowType() {
+		return dataFlowType;
+	}
+
+	public void setDataFlowType(String dataFlowType) {
+		this.dataFlowType = dataFlowType;
+	}
+
+	public String getDataFlowTypeText() {
+		return dataFlowTypeText;
+	}
+
+	public void setDataFlowTypeText(String dataFlowTypeText) {
+		this.dataFlowTypeText = dataFlowTypeText;
+	}
+
+	public String getClassifyoid() {
+		return classifyoid;
+	}
+
+	public void setClassifyoid(String classifyoid) {
+		this.classifyoid = classifyoid;
+	}
+
+	public String getUsedflag() {
+		return usedflag;
+	}
+
+	public void setUsedflag(String usedflag) {
+		this.usedflag = usedflag;
+	}
+
+	public String getSysbaseoid() {
+		return sysbaseoid;
+	}
+
+	public void setSysbaseoid(String sysbaseoid) {
+		this.sysbaseoid = sysbaseoid;
+	}
+
+	public String getSysbasename() {
+		return sysbasename;
+	}
+
+	public void setSysbasename(String sysbasename) {
+		this.sysbasename = sysbasename;
+	}
+
+	public String getSysbaseid() {
+		return sysbaseid;
+	}
+
+	public void setSysbaseid(String sysbaseid) {
+		this.sysbaseid = sysbaseid;
+	}
+
+	public List<SysIntParamDTO> getSysIntParamDTOs() {
+		return sysIntParamDTOs;
+	}
+
+	public void setSysIntParamDTOs(List<SysIntParamDTO> sysIntParamDTOs) {
+		this.sysIntParamDTOs = sysIntParamDTOs;
+	}
+
+	public List<SysIntHeaderDTO> getSysIntHeaderDTOS() {
+		return sysIntHeaderDTOS;
+	}
+
+	public void setSysIntHeaderDTOS(List<SysIntHeaderDTO> sysIntHeaderDTOS) {
+		this.sysIntHeaderDTOS = sysIntHeaderDTOS;
+	}
+
+	public String getPushType() {
+		return pushType;
+	}
+
+	public void setPushType(String pushType) {
+		this.pushType = pushType;
+	}
+
+	public String getSourceSysName() {
+		return sourceSysName;
+	}
+
+	public void setSourceSysName(String sourceSysName) {
+		this.sourceSysName = sourceSysName;
+	}
+
+	public String getSourceSysId() {
+		return sourceSysId;
+	}
+
+	public void setSourceSysId(String sourceSysId) {
+		this.sourceSysId = sourceSysId;
+	}
+
+	public String getTargetSysName() {
+		return targetSysName;
+	}
+
+	public void setTargetSysName(String targetSysName) {
+		this.targetSysName = targetSysName;
+	}
+
+	public String getTargetSysId() {
+		return targetSysId;
+	}
+
+	public void setTargetSysId(String targetSysId) {
+		this.targetSysId = targetSysId;
+	}
+
+	@Override
+	public String toString() {
+		return "SysIntInfoDTO{" +
+				"authorityoid='" + authorityoid + '\'' +
+				", authorityoidName='" + authorityoidName + '\'' +
+				", interfaceFunction='" + interfaceFunction + '\'' +
+				", interfacetype='" + interfacetype + '\'' +
+				", interfacetypeText='" + interfacetypeText + '\'' +
+				", paramtype='" + paramtype + '\'' +
+				", paramtypeText='" + paramtypeText + '\'' +
+				", requestmethod='" + requestmethod + '\'' +
+				", requestmethodText='" + requestmethodText + '\'' +
+				", classifyoid='" + classifyoid + '\'' +
+				", usedflag='" + usedflag + '\'' +
+				", sysbaseoid='" + sysbaseoid + '\'' +
+				", sysbaseid='" + sysbaseid + '\'' +
+				", sysbasename='" + sysbasename + '\'' +
+				", requesturl='" + requesturl + '\'' +
+				", returntype='" + returntype + '\'' +
+				", returntypeText='" + returntypeText + '\'' +
+				", sourcesystemoid='" + sourcesystemoid + '\'' +
+				", sourcesystemoidName='" + sourcesystemoidName + '\'' +
+				", sourceSysName='" + sourceSysName + '\'' +
+				", sourceSysId='" + sourceSysId + '\'' +
+				", targetsystemoid='" + targetsystemoid + '\'' +
+				", targetsystemoidName='" + targetsystemoidName + '\'' +
+				", targetSysName='" + targetSysName + '\'' +
+				", targetSysId='" + targetSysId + '\'' +
+				", description='" + description + '\'' +
+				", classPath='" + classPath + '\'' +
+				", dataFlowType='" + dataFlowType + '\'' +
+				", dataFlowTypeText='" + dataFlowTypeText + '\'' +
+				", btmTypeId='" + btmTypeId + '\'' +
+				", btmTypeName='" + btmTypeName + '\'' +
+				", namespace='" + namespace + '\'' +
+				", soapaction='" + soapaction + '\'' +
+				", targName='" + targName + '\'' +
+				", cxfaxis='" + cxfaxis + '\'' +
+				", classifyid='" + classifyid + '\'' +
+				", classifyname='" + classifyname + '\'' +
+				", sysIntParamDTOs=" + sysIntParamDTOs +
+				", sysIntHeaderDTOS=" + sysIntHeaderDTOS +
+				", pushType='" + pushType + '\'' +
+				'}';
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntParamDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntParamDTO.java
new file mode 100644
index 0000000..9b13e88
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/SysIntParamDTO.java
@@ -0,0 +1,81 @@
+package org.springblade.code.dto;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+public class SysIntParamDTO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120661255093L;
+
+	/**
+	 * SysIntInfoDO 鐨刼id
+	 */
+	private String infoOid;
+
+	/**
+	 * 鍙傛暟key
+	 */
+	private String paramkey;
+
+	/**
+	 * 鍙傛暟value
+	 */
+	private String paramvalue;
+
+	/**
+	 * 鏄惁浣跨敤
+	 */
+	private String usedflag;
+
+
+	public String getInfoOid() {
+		return infoOid;
+	}
+
+	public void setInfoOid(String infoOid) {
+		this.infoOid = infoOid;
+	}
+
+	public String getParamkey() {
+		return paramkey;
+	}
+
+	public void setParamkey(String paramkey) {
+		this.paramkey = paramkey;
+	}
+
+	public String getParamvalue() {
+		return paramvalue;
+	}
+
+	public void setParamvalue(String paramvalue) {
+		this.paramvalue = paramvalue;
+	}
+
+	public String getUsedflag() {
+		return usedflag;
+	}
+
+	public void setUsedflag(String usedflag) {
+		this.usedflag = usedflag;
+	}
+
+	@Override
+	public String toString() {
+		return "SysIntParamDO{" +
+				"infoOid='" + infoOid + '\'' +
+				", paramkey='" + paramkey + '\'' +
+				", paramvalue='" + paramvalue + '\'' +
+				", usedflag='" + usedflag + '\'' +
+				'}';
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/UpdateSysInfoStatusDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/UpdateSysInfoStatusDTO.java
new file mode 100644
index 0000000..30c677a
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/UpdateSysInfoStatusDTO.java
@@ -0,0 +1,40 @@
+package org.springblade.code.dto;
+
+public class UpdateSysInfoStatusDTO {
+    private String oid;
+    private String update;
+    private String ts;
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public String getUpdate() {
+        return update;
+    }
+
+    public void setUpdate(String update) {
+        this.update = update;
+    }
+
+    public String getTs() {
+        return ts;
+    }
+    public void setTs(String ts) {
+        this.ts = ts;
+    }
+    @Override
+    public String toString() {
+        return "SysInfoDTO{" +
+                "oid='" + oid + '\'' +
+                ", update='" + update + '\'' +
+                ", ts='" + ts + '\'' +
+                '}';
+    }
+
+
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/JsonRootDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/JsonRootDataDTO.java
new file mode 100644
index 0000000..612eafc
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/JsonRootDataDTO.java
@@ -0,0 +1,21 @@
+package org.springblade.code.dto.datapush.classify;
+
+
+public class JsonRootDataDTO {
+    private NodeDataDTO data;
+
+    public NodeDataDTO getData() {
+        return data;
+    }
+
+    public void setData(NodeDataDTO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "JsonRootDataDTO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeClassifyDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeClassifyDTO.java
new file mode 100644
index 0000000..a43f55f
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeClassifyDTO.java
@@ -0,0 +1,112 @@
+package org.springblade.code.dto.datapush.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("classify")
+public class NodeClassifyDTO {
+        /**
+         * 鍒嗙被id
+         */
+        @XStreamAsAttribute
+        private String id;
+        /***
+         * 鍒嗙被鍚嶇О
+         */
+        @XStreamAsAttribute
+        private String name;
+        /***
+         * 鐖惰妭鐐筰d
+         */
+        @XStreamAsAttribute
+        private String pid;
+        /***
+         * 鍒嗙被浠e彿
+         */
+        @XStreamAsAttribute
+        private String classCode;
+        /***
+         * 鎻忚堪
+         */
+        @XStreamAsAttribute
+        private  String description;
+        /***
+         * 鍒嗙被閾炬帴璺緞
+         */
+        @XStreamAsAttribute
+        private  String fullPathName;
+        /***
+         * 鍒嗙被鐘舵��
+         */
+        @XStreamAsAttribute
+        private String lcStatus;
+
+        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 getPid() {
+        return pid;
+    }
+
+        public void setPid(String pid) {
+        this.pid = pid;
+    }
+
+        public String getClassCode() {
+        return classCode;
+    }
+
+        public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+        public String getDescription() {
+        return description;
+    }
+
+        public void setDescription(String description) {
+        this.description = description;
+    }
+
+        public String getFullPathName() {
+        return fullPathName;
+    }
+
+        public void setFullPathName(String fullPathName) {
+        this.fullPathName = fullPathName;
+    }
+
+        public String getLcStatus() {
+        return lcStatus;
+    }
+
+        public void setLcStatus(String lcStatus) {
+        this.lcStatus = lcStatus;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeClassifyDTO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", pid='" + pid + '\'' +
+                ", classCode='" + classCode + '\'' +
+                ", description='" + description + '\'' +
+                ", fullPathName='" + fullPathName + '\'' +
+                ", lcStatus='" + lcStatus + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeDataDTO.java
new file mode 100644
index 0000000..f715422
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeDataDTO.java
@@ -0,0 +1,24 @@
+package org.springblade.code.dto.datapush.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+
+@XStreamAlias("data")
+public class NodeDataDTO {
+
+    private NodeLibraryDTO library;
+
+    public NodeLibraryDTO getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(NodeLibraryDTO library) {
+        this.library = library;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeDataDTO{" +
+                "library=" + library +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeLibraryDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeLibraryDTO.java
new file mode 100644
index 0000000..c227328
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/NodeLibraryDTO.java
@@ -0,0 +1,50 @@
+package org.springblade.code.dto.datapush.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("library")
+public class NodeLibraryDTO {
+    @XStreamAsAttribute
+    private String id;
+    @XStreamAsAttribute
+    private String name;
+    @XStreamImplicit
+    private List<NodeClassifyDTO> classify;
+
+    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 List<NodeClassifyDTO> getClassify() {
+        return classify;
+    }
+
+    public void setClassify(List<NodeClassifyDTO> classify) {
+        this.classify = classify;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeLibraryDTO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", classify=" + classify +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/classfy.json b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/classfy.json
new file mode 100644
index 0000000..7b57d00
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/classfy.json
@@ -0,0 +1,18 @@
+{
+  "data": {
+    "library": {
+      "classify": [
+        {
+          "classCode": "0101",
+          "lcStatus": "Enabled",
+          "name": "涓绘満浜у搧",
+          "description": "涓绘満浜у搧1",
+          "pid": "01",
+          "id": "8EB35A1D-AB8B-2255-565C-84D309E0C62B"
+        }
+      ],
+      "name": "鐗╁搧",
+      "id": "D9CF223F-317D-71EB-BD11-433A94CAD9F3"
+    }
+  }
+}
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/data.xml b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/data.xml
new file mode 100644
index 0000000..e7584d5
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/classify/data.xml
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<data>
+    <library id="D9CF223F-317D-71EB-BD11-433A94CAD9F3" name="鐗╁搧">
+        <classify id="1C7A2455-5831-1535-2A21-B4C1CC9C7C9D" name="鏍囧噯浠�" pid="02" classCode="02" description="" fullPathName="#02" lcStatus="Enabled"/>
+        <classify id="0C600A6A-6398-FC30-D13E-121201FDA908" name="鏈轰綋鏋勪欢" pid="0202" classCode="0202" description="鏈轰綋鏋勪欢" fullPathName="#02#0202" lcStatus="Enabled"/>
+        <classify id="07A245BB-1A7D-6380-49C5-0B2465BCE7D5" name="灞傛澘闄愬埗鍣ㄥ強鍏堕浂缁勪欢" pid="020205" classCode="020205" description="灞傛澘闄愬埗鍣ㄥ強鍏堕浂缁勪欢" fullPathName="#02#0202#020205" lcStatus="Enabled"/>
+        <classify id="18387448-E157-F341-2A04-7B9FC420003F" name="瑙掔墖" pid="020204" classCode="020204" description="瑙掔墖" fullPathName="#02#0202#020204" lcStatus="Enabled"/>
+        <classify id="226B19C5-AFA6-7823-E696-7796A931BDC5" name="鍏朵粬" pid="020207" classCode="020207" description="鍏朵粬" fullPathName="#02#0202#020207" lcStatus="Enabled"/>
+        <classify id="46B5DB5E-F783-DFE9-B48A-C4A367D02AC0" name="閿�" pid="020201" classCode="020201" description="閿�" fullPathName="#02#0202#020201" lcStatus="Enabled"/>
+        <classify id="6AE13517-FF46-3651-5893-407BB9E340DB" name="鏍囩墝" pid="020206" classCode="020206" description="鏍囩墝" fullPathName="#02#0202#020206" lcStatus="Enabled"/>
+        <classify id="82F2FD9E-6B52-64D2-3B6E-D6F74B050968" name="鍚堥〉銆侀�氭潯銆侀摪閾�" pid="020203" classCode="020203" description="鍚堥〉銆侀�氭潯銆侀摪閾�" fullPathName="#02#0202#020203" lcStatus="Enabled"/>
+        <classify id="B6C55202-A224-9098-6A82-E3FC5DEEF790" name="鍙g洊" pid="020202" classCode="020202" description="鍙g洊" fullPathName="#02#0202#020202" lcStatus="Enabled"/>
+        <classify id="155C9154-CBA2-8764-08C9-0D54E4E9727A" name="浼犲姩浠�" pid="0208" classCode="0208" description="浼犲姩浠�" fullPathName="#02#0208" lcStatus="Enabled"/>
+        <classify id="A3B59CA7-271E-95A5-7A51-AB70F111DB35" name="閿�" pid="020801" classCode="020801" description="閿�" fullPathName="#02#0208#020801" lcStatus="Enabled"/>
+        <classify id="C5FC4587-9732-418F-0866-46756EFD9957" name="鍏朵粬浼犲姩浠�" pid="020805" classCode="020805" description="鍏朵粬浼犲姩浠�" fullPathName="#02#0208#020805" lcStatus="Enabled"/>
+        <classify id="C6EC41D1-908E-D7CD-7224-25D7DBDD16B1" name="浼犲姩閾�" pid="020803" classCode="020803" description="浼犲姩閾�" fullPathName="#02#0208#020803" lcStatus="Enabled"/>
+        <classify id="E28CA126-BDF8-27DA-F661-187BC0F99B5C" name="浼犲姩甯�" pid="020804" classCode="020804" description="浼犲姩甯�" fullPathName="#02#0208#020804" lcStatus="Enabled"/>
+        <classify id="F6C1DF9D-9558-0B29-BA98-7D576C800FC4" name="榻胯疆" pid="020802" classCode="020802" description="榻胯疆" fullPathName="#02#0208#020802" lcStatus="Enabled"/>
+        <classify id="435B7B1E-99D4-6710-8A87-62809873A840" name="绠¤矾杩炴帴鍙婂瘑灏�" pid="0204" classCode="0204" description="绠¤矾杩炴帴鍙婂瘑灏�" fullPathName="#02#0204" lcStatus="Enabled"/>
+        <classify id="18F369E2-870B-B043-D4F5-C02031145366" name="鍏朵粬杩炴帴鍙婂瘑灏�" pid="020403" classCode="020403" description="鍏朵粬杩炴帴鍙婂瘑灏�" fullPathName="#02#0204#020403" lcStatus="Enabled"/>
+        <classify id="295FA6A0-29AA-0D0D-7414-B9F045745962" name="瀵肩杩炴帴" pid="020401" classCode="020401" description="瀵肩杩炴帴" fullPathName="#02#0204#020401" lcStatus="Enabled"/>
+        <classify id="A36BBBF5-7D8E-F47E-F343-949E5E489FE6" name="绠¤矾閰嶄欢" pid="020402" classCode="020402" description="绠¤矾閰嶄欢" fullPathName="#02#0204#020402" lcStatus="Enabled"/>
+        <classify id="81580E96-B28F-10F1-27E8-F2511F4F13E9" name="鐢垫皵銆佷华琛ㄦ爣鍑嗕欢" pid="0206" classCode="0206" description="鐢垫皵銆佷华琛ㄦ爣鍑嗕欢" fullPathName="#02#0206" lcStatus="Enabled"/>
+        <classify id="035E12F8-340F-5157-79F1-D7A99EA5974D" name="鍏朵粬鐢垫皵銆佷华琛ㄦ爣鍑嗕欢" pid="020606" classCode="020606" description="鍏朵粬鐢垫皵銆佷华琛ㄦ爣鍑嗕欢" fullPathName="#02#0206#020606" lcStatus="Enabled"/>
+        <classify id="59F6B61D-48D9-4AA8-DF1E-FC90111B1A78" name="浠〃鍑忛渿鍣�" pid="020604" classCode="020604" description="浠〃鍑忛渿鍣�" fullPathName="#02#0206#020604" lcStatus="Enabled"/>
+        <classify id="687AFB76-AB5F-CA5A-0524-851573D120C2" name="鐢电嚎鎺ュご銆佺瀛愬強鍘嬫帴" pid="020601" classCode="020601" description="鐢电嚎鎺ュご銆佺瀛愬強鍘嬫帴" fullPathName="#02#0206#020601" lcStatus="Enabled"/>
+        <classify id="8EB95F93-CB56-CE23-4CC7-893B1BFD3BD2" name="鎺ョ嚎鏉�" pid="020602" classCode="020602" description="鎺ョ嚎鏉�" fullPathName="#02#0206#020602" lcStatus="Enabled"/>
+        <classify id="9F967FDA-7FB7-3BBD-D66E-F765D0D17CB0" name="鎼帴绾�" pid="020603" classCode="020603" description="鎼帴绾�" fullPathName="#02#0206#020603" lcStatus="Enabled"/>
+        <classify id="9FA88B06-D959-CAD1-3A88-056B156EAC11" name="鎸夐挳淇濋櫓鍣�" pid="020605" classCode="020605" description="鎸夐挳淇濋櫓鍣�" fullPathName="#02#0206#020605" lcStatus="Enabled"/>
+        <classify id="8A520426-55F0-AFC7-806E-ADF3A98F7E18" name="绱у浐浠�" pid="0201" classCode="0201" description="绱у浐浠�" fullPathName="#02#0201" lcStatus="Enabled"/>
+        <classify id="003FBD37-9D69-073D-C197-C5A9ACEE5DDD" name="鍨湀" pid="020107" classCode="020107" description="鍨湀" fullPathName="#02#0201#020107" lcStatus="Enabled"/>
+        <classify id="1BB3AD73-5645-0ED0-213D-BD82E7BD2B1F" name="鍏朵粬绱у浐浠�" pid="020111" classCode="020111" description="鍏朵粬绱у浐浠�" fullPathName="#02#0201#020111" lcStatus="Enabled"/>
+        <classify id="28412305-0271-F0F0-8FAE-8A16F7EFA2F8" name="铻烘瘝" pid="020102" classCode="020102" description="铻烘瘝" fullPathName="#02#0201#020102" lcStatus="Enabled"/>
+        <classify id="2E10AD65-5100-2461-AC9E-5900CE83129B" name="铻洪拤" pid="020104" classCode="020104" description="铻洪拤" fullPathName="#02#0201#020104" lcStatus="Enabled"/>
+        <classify id="79CA8787-5525-52B3-1733-EC2410E06734" name="鑷攣铻烘瘝" pid="020110" classCode="020110" description="鑷攣铻烘瘝" fullPathName="#02#0201#020110" lcStatus="Enabled"/>
+        <classify id="913AE6A2-4B0C-E463-4CA0-2187FC235941" name="铻烘煴" pid="020103" classCode="020103" description="铻烘煴" fullPathName="#02#0201#020103" lcStatus="Enabled"/>
+        <classify id="B57A2FCB-6CC3-F063-9EE7-3377B455FD20" name="閽笣铻哄" pid="020109" classCode="020109" description="閽笣铻哄" fullPathName="#02#0201#020109" lcStatus="Enabled"/>
+        <classify id="D2DC11DD-B28A-8874-B656-10A1E0569FF3" name="铻烘爴" pid="020101" classCode="020101" description="铻烘爴" fullPathName="#02#0201#020101" lcStatus="Enabled"/>
+        <classify id="D40D7E08-B7B9-7F1E-7FA4-370023E24972" name="閾嗛拤" pid="020105" classCode="020105" description="閾嗛拤" fullPathName="#02#0201#020105" lcStatus="Enabled"/>
+        <classify id="DC14BB45-54C1-93CB-B41C-AF0D03443C02" name="鎸″湀" pid="020108" classCode="020108" description="鎸″湀" fullPathName="#02#0201#020108" lcStatus="Enabled"/>
+        <classify id="F68B2C03-696A-DB01-8847-5F45E7496EC1" name="閿�銆佽酱" pid="020106" classCode="020106" description="閿�銆佽酱" fullPathName="#02#0201#020106" lcStatus="Enabled"/>
+        <classify id="D440A156-5D21-4494-A136-2C099848B3CF" name="杞存壙" pid="0207" classCode="0207" description="杞存壙" fullPathName="#02#0207" lcStatus="Enabled"/>
+        <classify id="3230C8B8-6D39-B89C-BB32-576E25940FB0" name="閽㈢悆" pid="020702" classCode="020702" description="閽㈢悆" fullPathName="#02#0207#020702" lcStatus="Enabled"/>
+        <classify id="37D5DDB8-F1AA-1211-A350-1E83CC3DEFC5" name="鍏朵粬杞存壙闆剁粍浠�" pid="020703" classCode="020703" description="鍏朵粬杞存壙闆剁粍浠�" fullPathName="#02#0207#020703" lcStatus="Enabled"/>
+        <classify id="D80ABF56-3E36-610B-63F9-1FF0ECB2FD32" name="杞存壙" pid="020701" classCode="020701" description="杞存壙" fullPathName="#02#0207#020701" lcStatus="Enabled"/>
+        <classify id="D6BD1110-3EA9-DB40-1E67-EAC3824DF6DD" name="鍗$畭銆佽‖濂椼�佸脊绨�" pid="0203" classCode="0203" description="鍗$畭銆佽‖濂椼�佸脊绨�" fullPathName="#02#0203" lcStatus="Enabled"/>
+        <classify id="127C78EC-AD20-6E2F-2B25-5371EFD81E13" name="琛" pid="020302" classCode="020302" description="琛" fullPathName="#02#0203#020302" lcStatus="Enabled"/>
+        <classify id="1B269518-212F-013C-818E-F0DFC6EA9E13" name="寮圭哀" pid="020303" classCode="020303" description="寮圭哀" fullPathName="#02#0203#020303" lcStatus="Enabled"/>
+        <classify id="A81DC3A2-AAB0-C369-8354-1BCCCD059876" name="鍗$畭" pid="020301" classCode="020301" description="鍗$畭" fullPathName="#02#0203#020301" lcStatus="Enabled"/>
+        <classify id="E6AA0B5E-9B07-A000-FC95-8114C27BE8CE" name="鎿嶇旱绯荤粺鏍囧噯浠�" pid="0205" classCode="0205" description="鎿嶇旱绯荤粺鏍囧噯浠�" fullPathName="#02#0205" lcStatus="Enabled"/>
+        <classify id="4D151E9D-5761-D990-CC56-657FE1C4F320" name="閽笣缁宠繛鎺ヤ欢" pid="020501" classCode="020501" description="閽笣缁宠繛鎺ヤ欢" fullPathName="#02#0205#020501" lcStatus="Enabled"/>
+        <classify id="9125E074-02A3-8721-EA45-2C0547FDA3FA" name="鎷夋潌鎺ュご浠�" pid="020503" classCode="020503" description="鎷夋潌鎺ュご浠�" fullPathName="#02#0205#020503" lcStatus="Enabled"/>
+        <classify id="B6BDD21B-0E07-78CB-8773-5E0BE4D4C932" name="鍏朵粬鎿嶇旱绯荤粺鏍囧噯浠�" pid="020504" classCode="020504" description="鍏朵粬鎿嶇旱绯荤粺鏍囧噯浠�" fullPathName="#02#0205#020504" lcStatus="Enabled"/>
+        <classify id="C81DBA9F-0EB6-8B9A-3295-937B2172DC18" name="婊戣疆" pid="020502" classCode="020502" description="婊戣疆" fullPathName="#02#0205#020502" lcStatus="Enabled"/>
+        <classify id="535FC9B6-FE27-241F-5FCA-ED4DC17CF95B" name="浜у搧" pid="01" classCode="01" description="浜у搧" fullPathName="#01" lcStatus="Enabled"/>
+        <classify id="5B72F92C-39EF-3CEB-8474-6B561DC8402B" name="鍦伴潰绔�" pid="0102" classCode="0102" description="鍦伴潰绔�" fullPathName="#01#0102" lcStatus="Enabled"/>
+        <classify id="2F5F0CB1-12AB-5D73-657E-0C14B7ECF951" name="MNQ" pid="010205" classCode="010205" description="MNQ" fullPathName="#01#0102#010205" lcStatus="Enabled"/>
+        <classify id="56AE339C-9B2F-4298-6F9B-9F0615993DB1" name="CCS" pid="010201" classCode="010201" description="CCS" fullPathName="#01#0102#010201" lcStatus="Enabled"/>
+        <classify id="6B165D01-289D-6B94-8773-B8987D8B6A6C" name="DGPS" pid="010204" classCode="010204" description="DGPS" fullPathName="#01#0102#010204" lcStatus="Enabled"/>
+        <classify id="AB557DD1-44F7-6256-C772-254605D9E554" name="SGDT" pid="010203" classCode="010203" description="SGDT" fullPathName="#01#0102#010203" lcStatus="Enabled"/>
+        <classify id="FDB76D0A-D52B-45B6-47B4-89FE9C004ACD" name="DLS" pid="010202" classCode="010202" description="DLS" fullPathName="#01#0102#010202" lcStatus="Enabled"/>
+        <classify id="8EB35A1D-AB8B-2255-565C-84D309E0C62B" name="涓绘満浜у搧" pid="0101" classCode="0101" description="涓绘満浜у搧1" fullPathName="#01#0101" lcStatus="Enabled"/>
+        <classify id="4524E801-6CC6-92E8-1AC3-2AB9604E8F96" name="涓绘満浜у搧" pid="010100" classCode="010100" description="涓绘満浜у搧" fullPathName="#01#0101#010100" lcStatus="Enabled"/>
+        <classify id="C5F145AD-935D-FF2B-A7FC-EDFDB3BA6DA7" name="淇濋殰绯荤粺" pid="0103" classCode="0103" description="淇濋殰绯荤粺" fullPathName="#01#0103" lcStatus="Enabled"/>
+        <classify id="738C2B3D-8413-B956-7B13-E64BD18A996B" name="淇濋殰璁惧闆剁粍浠�" pid="010302" classCode="010302" description="淇濋殰璁惧闆剁粍浠�" fullPathName="#01#0103#010302" lcStatus="Enabled"/>
+        <classify id="76E8BD48-0EE4-3389-33DD-80CD8129BAD0" name="淇濋殰璁惧" pid="010301" classCode="010301" description="淇濋殰璁惧" fullPathName="#01#0103#010301" lcStatus="Enabled"/>
+        <classify id="8557B4D9-6F51-5AEF-93D8-048CB3D5A253" name="鍔充繚鐢ㄥ搧鍙婂姙鍏�楁潗" pid="09" classCode="09" description="鍔充繚鐢ㄥ搧鍙婂姙鍏�楁潗" fullPathName="#09" lcStatus="Enabled"/>
+        <classify id="272863C7-8FA7-AB6F-60DD-547EC72198A8" name="鍔充繚鐢ㄥ搧" pid="090100" classCode="090100" description="鍔充繚鐢ㄥ搧" fullPathName="#09#090100" lcStatus="Enabled"/>
+        <classify id="348BB65D-9BDE-501B-D7FD-EAAD692FBFD9" name="鍔炲叕鐢ㄥ搧" pid="090300" classCode="090300" description="鍔炲叕鐢ㄥ搧" fullPathName="#09#090300" lcStatus="Enabled"/>
+        <classify id="6C206159-26B1-ED9F-88F3-759A1E80839D" name="鍔炲叕鐢靛櫒" pid="090200" classCode="090200" description="鍔炲叕鐢靛櫒" fullPathName="#09#090200" lcStatus="Enabled"/>
+        <classify id="91CE2686-B6F0-B897-38B4-6A14471E6FB3" name="缁翠慨淇濋殰" pid="090500" classCode="090500" description="缁翠慨淇濋殰" fullPathName="#09#090500" lcStatus="Enabled"/>
+        <classify id="A494828E-4C83-BEF0-0F85-D980C2D7353B" name="妯″瀷" pid="090400" classCode="090400" description="妯″瀷" fullPathName="#09#090400" lcStatus="Enabled"/>
+        <classify id="90FD60B3-763D-1987-F9FD-35DB1B72309E" name="璧勪骇" pid="08" classCode="08" description="璧勪骇" fullPathName="#08" lcStatus="Enabled"/>
+        <classify id="3cc88fd4-858b-4683-b423-729bada6cf45" name="杩愯緭璁惧" pid="0807" classCode="0807" description="" fullPathName="#08#0807" lcStatus="Enabled"/>
+        <classify id="3c6621b7-ba2d-4a14-8ee0-ba6fc4b3510a" name="鍏朵粬杩愯緭宸ュ叿" pid="080702" classCode="080702" description="" fullPathName="#08#0807#080702" lcStatus="Enabled"/>
+        <classify id="4cf9ace6-811f-4caf-a84a-5e1154b38462" name="杞藉姹借溅" pid="080704" classCode="080704" description="" fullPathName="#08#0807#080704" lcStatus="Enabled"/>
+        <classify id="8751141e-aaba-47a2-bc0d-d8064e31474e" name="杞借揣姹借溅" pid="080703" classCode="080703" description="" fullPathName="#08#0807#080703" lcStatus="Enabled"/>
+        <classify id="96f7f32f-f2a6-4230-b504-39e1d55000e6" name="鐢靛姩杞�" pid="080701" classCode="080701" description="" fullPathName="#08#0807#080701" lcStatus="Enabled"/>
+        <classify id="6fb2fa85-dce6-4e8a-8f35-9352512dc2ce" name="鐢靛瓙璁惧" pid="0805" classCode="0805" description="" fullPathName="#08#0805" lcStatus="Enabled"/>
+        <classify id="503ce093-f400-4365-84a0-2f463d955c9f" name="娴嬮噺浠櫒浠〃" pid="080502" classCode="080502" description="" fullPathName="#08#0805#080502" lcStatus="Enabled"/>
+        <classify id="88c2932a-0d00-401a-90d0-482954562dfa" name="鍏朵粬鐢靛瓙璁惧" pid="080501" classCode="080501" description="" fullPathName="#08#0805#080501" lcStatus="Enabled"/>
+        <classify id="c34d3c1a-7b58-4919-86a1-886fce77eeab" name="閫氱敤鍙婅埅绌轰笓鐢ㄤ华鍣�" pid="080503" classCode="080503" description="" fullPathName="#08#0805#080503" lcStatus="Enabled"/>
+        <classify id="70d2805b-87bd-48ff-8daf-47713fe7f18b" name="鏈哄櫒璁惧" pid="0806" classCode="0806" description="" fullPathName="#08#0806" lcStatus="Enabled"/>
+        <classify id="56b8ee46-6fb3-4b30-8f71-0b9ed980d6f8" name="鍏朵粬鏈哄櫒璁惧" pid="080601" classCode="080601" description="" fullPathName="#08#0806#080601" lcStatus="Enabled"/>
+        <classify id="8ed4641d-2b8b-4989-bce9-ea33163fb673" name="璧烽噸璁惧" pid="080602" classCode="080602" description="" fullPathName="#08#0806#080602" lcStatus="Enabled"/>
+        <classify id="728eb26e-0d5a-4f05-9e5b-e9734d8fe5ca" name="鐢靛瓙鍔炲叕璁惧" pid="0801" classCode="0801" description="" fullPathName="#08#0801" lcStatus="Enabled"/>
+        <classify id="4ce0cd85-8352-4d3d-9829-a1f90120b5ab" name="鍏朵粬鍔炲叕璁惧" pid="080103" classCode="080103" description="" fullPathName="#08#0801#080103" lcStatus="Enabled"/>
+        <classify id="5ab8c015-ae96-499c-8908-3bb04ca0f258" name="鐢佃鏈�" pid="080101" classCode="080101" description="" fullPathName="#08#0801#080101" lcStatus="Enabled"/>
+        <classify id="957243e2-8fe9-4227-8627-061d3ceb033c" name="鎶曞奖浠�" pid="080104" classCode="080104" description="" fullPathName="#08#0801#080104" lcStatus="Enabled"/>
+        <classify id="9cf867b9-f1e3-488c-9c3d-646c9e428bb2" name="鎵撳嵃鏈�" pid="080102" classCode="080102" description="" fullPathName="#08#0801#080102" lcStatus="Enabled"/>
+        <classify id="78c6dba7-422f-42bc-899e-3bda5e046087" name="鏃犲舰璧勪骇" pid="0808" classCode="0808" description="" fullPathName="#08#0808" lcStatus="Enabled"/>
+        <classify id="134fd250-b3dd-4085-b775-0d169ff80477" name="鍟嗘爣" pid="080801" classCode="080801" description="" fullPathName="#08#0808#080801" lcStatus="Enabled"/>
+        <classify id="7648c951-a1bb-44c2-9af9-0cc450ff9197" name="鍏朵粬" pid="080804" classCode="080804" description="" fullPathName="#08#0808#080804" lcStatus="Enabled"/>
+        <classify id="97532f36-17dd-4625-bb50-f71241cd2b5c" name="钁椾綔鏉�" pid="080802" classCode="080802" description="" fullPathName="#08#0808#080802" lcStatus="Enabled"/>
+        <classify id="ac7f0bba-f4c3-4f93-b11d-b14c377b4d07" name="杞欢" pid="080803" classCode="080803" description="" fullPathName="#08#0808#080803" lcStatus="Enabled"/>
+        <classify id="80588849-b150-4f7e-8e50-2d2a1ef965c8" name="浼犲璁惧" pid="0802" classCode="0802" description="" fullPathName="#08#0802" lcStatus="Enabled"/>
+        <classify id="09392b5a-77d3-48f9-902c-6129e7a84d67" name="鍏朵粬浼犲璁惧" pid="080202" classCode="080202" description="" fullPathName="#08#0802#080202" lcStatus="Enabled"/>
+        <classify id="bb17b808-e4b7-4e1b-9a18-7391b908f980" name="杈撶數璁惧" pid="080201" classCode="080201" description="" fullPathName="#08#0802#080201" lcStatus="Enabled"/>
+        <classify id="a1d12e21-4e33-4887-8170-d4e45655c0f4" name="鍔ㄥ姏璁惧" pid="0803" classCode="0803" description="" fullPathName="#08#0803" lcStatus="Enabled"/>
+        <classify id="83c62b45-f373-4e90-b411-23b03fb4082c" name="绌哄帇璁惧" pid="080302" classCode="080302" description="" fullPathName="#08#0803#080302" lcStatus="Enabled"/>
+        <classify id="de01700c-5b48-4588-8e09-6b4eab498c17" name="鍏朵粬鍔ㄥ姏璁惧" pid="080303" classCode="080303" description="" fullPathName="#08#0803#080303" lcStatus="Enabled"/>
+        <classify id="f173f57b-bcb4-4261-a518-8f3d735b2136" name="绌鸿皟璁惧" pid="080301" classCode="080301" description="" fullPathName="#08#0803#080301" lcStatus="Enabled"/>
+        <classify id="dc3ee001-9a12-4cc6-8516-6723dcaf8fb1" name="璁$畻鏈哄強闄勫睘璁惧" pid="0804" classCode="0804" description="" fullPathName="#08#0804" lcStatus="Enabled"/>
+        <classify id="52b775db-8960-4d6e-a2a9-003a650d8acf" name="璁$畻鏈�" pid="080401" classCode="080401" description="" fullPathName="#08#0804#080401" lcStatus="Enabled"/>
+        <classify id="55885859-4275-49eb-904e-43a7e1cdbf17" name="璁$畻鏈洪檮灞炶澶�" pid="080402" classCode="080402" description="" fullPathName="#08#0804#080402" lcStatus="Enabled"/>
+        <classify id="b2609e88-83d5-4d47-bf55-eb43f9fe1c51" name="鍏朵粬" pid="080403" classCode="080403" description="" fullPathName="#08#0804#080403" lcStatus="Enabled"/>
+        <classify id="B911B6E4-9155-4805-E281-B17F7C67D163" name="鏉愭枡" pid="05" classCode="05" description="鏉愭枡" fullPathName="#05" lcStatus="Enabled"/>
+        <classify id="B57613D3-D7C2-9E3C-12CD-8D3CA61E5F92" name="閲戝睘鏉愭枡" pid="0501" classCode="0501" description="閲戝睘鏉愭枡" fullPathName="#05#0501" lcStatus="Enabled"/>
+        <classify id="1b9d91e8-f840-4391-889c-5c43f2152339" name="閿岄敗閽撮晬绛夐噾灞炴潗鏂�" pid="050107" classCode="050107" description="" fullPathName="#05#0501#050107" lcStatus="Enabled"/>
+        <classify id="643e6b26-5505-49a5-8824-ade2b4dc5ef8" name="閾舵潗" pid="050106" classCode="050106" description="" fullPathName="#05#0501#050106" lcStatus="Enabled"/>
+        <classify id="689b0a32-3350-4b56-9b99-3ff3c0a7e634" name="閽涙潗" pid="050105" classCode="050105" description="" fullPathName="#05#0501#050105" lcStatus="Enabled"/>
+        <classify id="7bb7ad2c-d991-4408-a817-f50d46c98520" name="閾濇潗" pid="050102" classCode="050102" description="" fullPathName="#05#0501#050102" lcStatus="Enabled"/>
+        <classify id="7fb1a2ff-8b0a-4720-b31c-effe2ec3899d" name="閽㈡潗" pid="050101" classCode="050101" description="" fullPathName="#05#0501#050101" lcStatus="Enabled"/>
+        <classify id="a0481cad-3d24-40d7-9f5c-e5ceb75a7477" name="閾滄潗" pid="050104" classCode="050104" description="" fullPathName="#05#0501#050104" lcStatus="Enabled"/>
+        <classify id="d1612ef9-e72c-4e41-a80f-f56a2bccfdca" name="闀佹潗" pid="050103" classCode="050103" description="" fullPathName="#05#0501#050103" lcStatus="Enabled"/>
+        <classify id="BDAF21DE-9BF1-D04B-932F-29A07CF05DC0" name="闈為噾灞炴潗鏂�" pid="0502" classCode="0502" description="闈為噾灞炴潗鏂�" fullPathName="#05#0502" lcStatus="Enabled"/>
+        <classify id="0f1ccfc9-25de-4b45-9a19-3d33fa714289" name="娑傛枡" pid="050205" classCode="050205" description="" fullPathName="#05#0502#050205" lcStatus="Enabled"/>
+        <classify id="217a062e-610e-4560-9444-ce4d5a0c2742" name="绾虹粐鏉愭枡" pid="050212" classCode="050212" description="" fullPathName="#05#0502#050212" lcStatus="Enabled"/>
+        <classify id="2b08870f-177a-4202-b299-c4cf26176c4f" name="姗¤兌" pid="050201" classCode="050201" description="" fullPathName="#05#0502#050201" lcStatus="Enabled"/>
+        <classify id="61a19147-16fa-464b-b057-21fde1b6baf5" name="鐕冩枡" pid="050210" classCode="050210" description="" fullPathName="#05#0502#050210" lcStatus="Enabled"/>
+        <classify id="6b68914d-d5c0-4da6-b613-89ec9b351a83" name="鍩虹鍖栧鍝�" pid="050211" classCode="050211" description="" fullPathName="#05#0502#050211" lcStatus="Enabled"/>
+        <classify id="75e7b9b1-cc91-4ffa-8d4a-c10b609f5b82" name="濉戞枡" pid="050202" classCode="050202" description="" fullPathName="#05#0502#050202" lcStatus="Enabled"/>
+        <classify id="7839e4e7-d86a-48d1-bd79-8e93a1a7be95" name="浜戞瘝" pid="050209" classCode="050209" description="" fullPathName="#05#0502#050209" lcStatus="Enabled"/>
+        <classify id="7ce86526-ba5c-403a-bbbd-79e43ef4fc48" name="瀵嗗皝鍓�" pid="050206" classCode="050206" description="" fullPathName="#05#0502#050206" lcStatus="Enabled"/>
+        <classify id="95ea9a03-a9f8-4285-ae4d-57cfa0f3ba4e" name="鐭虫鍙婄煶妫夌氦缁�" pid="050208" classCode="050208" description="" fullPathName="#05#0502#050208" lcStatus="Enabled"/>
+        <classify id="9aaddd7c-65cc-44fa-9ee8-b81bfceb94a9" name="鍏朵粬闈為噾灞炴潗鏂�" pid="050213" classCode="050213" description="" fullPathName="#05#0502#050213" lcStatus="Enabled"/>
+        <classify id="b83cda6c-319f-4dc9-9bc0-e5f5dd4b3c10" name="娑︽粦鏉愭枡" pid="050204" classCode="050204" description="" fullPathName="#05#0502#050204" lcStatus="Enabled"/>
+        <classify id="c59ed6e1-7175-4c06-a99f-5aca20ec6a4a" name="鐜荤拑鍙婄幓鐠冪氦缁�" pid="050207" classCode="050207" description="" fullPathName="#05#0502#050207" lcStatus="Enabled"/>
+        <classify id="d26b8ccd-0802-4195-80e3-b7ea861905d6" name="鑳剁矘鍓�" pid="050203" classCode="050203" description="" fullPathName="#05#0502#050203" lcStatus="Enabled"/>
+        <classify id="BF92B9BD-B469-A3F3-97EF-D17E7DCF0C02" name="鐢靛瓙鍏冨櫒浠�" pid="07" classCode="07" description="鐢靛瓙鍏冨櫒浠�" fullPathName="#07" lcStatus="Enabled"/>
+        <classify id="B3E45E87-62B3-896F-50AA-0989B8EBA354" name="鐢佃繛鎺ュ櫒" pid="0701" classCode="0701" description="鐢佃繛鎺ュ櫒" fullPathName="#07#0701" lcStatus="Enabled"/>
+        <classify id="1EE1982B-8458-54BD-F452-CB682EB935E6" name="鍦嗗舰杩炴帴鍣�" pid="070101" classCode="070101" description="鍦嗗舰杩炴帴鍣�" fullPathName="#07#0701#070101" lcStatus="Enabled"/>
+        <classify id="3E0A5B47-7E79-F800-0A1E-C376DDD9F55B" name="鍏朵粬" pid="070103" classCode="070103" description="鍏朵粬" fullPathName="#07#0701#070103" lcStatus="Enabled"/>
+        <classify id="58F783DC-8F76-C81B-2CF0-BE6B62D418C8" name="鐭╁舰杩炴帴鍣�" pid="070102" classCode="070102" description="鐭╁舰杩炴帴鍣�" fullPathName="#07#0701#070102" lcStatus="Enabled"/>
+        <classify id="D65E15F7-D0AF-4011-01DB-C3F0B124C4B4" name="01 涓�" pid="1" classCode="1" description="" fullPathName="#1" lcStatus="Enabled"/>
+        <classify id="DBED332C-3F47-B82B-E9D9-7F073207B97B" name="鎴愬搧鍙婇檮浠�" pid="04" classCode="04" description="" fullPathName="#04" lcStatus="Enabled"/>
+        <classify id="23d26641-cf95-4f76-8103-5775fcf150f5" name="鏈鸿浇鎴愬搧閰嶄欢" pid="0402" classCode="0402" description="" fullPathName="#04#0402" lcStatus="Enabled"/>
+        <classify id="EE9E1ED9-B9B5-978E-077F-D5BD9BC15EDA" name="鏈鸿浇鎴愬搧閰嶄欢" pid="040200" classCode="040200" description="" fullPathName="#04#0402#040200" lcStatus="Enabled"/>
+        <classify id="7f40472e-8031-4045-a343-6867cbb9b229" name="鍦伴潰绔欓厤濂楁垚鍝�" pid="0405" classCode="0405" description="" fullPathName="#04#0405" lcStatus="Enabled"/>
+        <classify id="C1F2DEEF-5D98-A247-74D6-0FE940C4500B" name="鍦伴潰绔欓厤濂楁垚鍝�" pid="040500" classCode="040500" description="" fullPathName="#04#0405#040500" lcStatus="Enabled"/>
+        <classify id="9ff5139e-582f-466c-85b2-10135aa48003" name="鏈鸿浇鎴愬搧" pid="0401" classCode="0401" description="" fullPathName="#04#0401" lcStatus="Enabled"/>
+        <classify id="01306647-0bf7-4bc6-baf6-6370cbcba923" name="鏈虹數绯荤粺" pid="040101" classCode="040101" description="" fullPathName="#04#0401#040101" lcStatus="Enabled"/>
+        <classify id="45f1f132-ed83-4a7c-a585-71e7327f4ba3" name="缁撴瀯绯荤粺鎴愬搧" pid="040110" classCode="040110" description="" fullPathName="#04#0401#040110" lcStatus="Enabled"/>
+        <classify id="649f3ee3-8de4-4b6f-8950-83b5a66ae57f" name="娑插帇绯荤粺" pid="040104" classCode="040104" description="" fullPathName="#04#0401#040104" lcStatus="Enabled"/>
+        <classify id="6fcec200-9165-4670-896f-1ed6219ed9f6" name="閾捐矾绯荤粺" pid="040106" classCode="040106" description="" fullPathName="#04#0401#040106" lcStatus="Enabled"/>
+        <classify id="77bb295e-bdc1-4b91-838a-0537a28dad55" name="璧疯惤鏋剁郴缁�" pid="040111" classCode="040111" description="" fullPathName="#04#0401#040111" lcStatus="Enabled"/>
+        <classify id="7e6c3763-4ee4-4ff0-a6ba-04bc5fca6ca4" name="渚涚數绯荤粺" pid="040102" classCode="040102" description="" fullPathName="#04#0401#040102" lcStatus="Enabled"/>
+        <classify id="9b778575-69d4-4846-9f14-5514b18e8173" name="浠诲姟绯荤粺" pid="040108" classCode="040108" description="" fullPathName="#04#0401#040108" lcStatus="Enabled"/>
+        <classify id="a1ab3694-6d69-45c2-9e07-2b65e8efd4bb" name="缁撳啺鎺㈡祴绯荤粺" pid="040112" classCode="040112" description="" fullPathName="#04#0401#040112" lcStatus="Enabled"/>
+        <classify id="c1f9a109-8962-4830-9e8c-93fba6bc50d3" name="鐜帶绯荤粺" pid="040105" classCode="040105" description="" fullPathName="#04#0401#040105" lcStatus="Enabled"/>
+        <classify id="e1202a9c-c64a-4f15-9420-41ee8267fed9" name="鍔ㄥ姏绯荤粺" pid="040107" classCode="040107" description="" fullPathName="#04#0401#040107" lcStatus="Enabled"/>
+        <classify id="ecfa428e-5228-4420-b9ec-2cc8379a863a" name="椋炵绯荤粺" pid="040109" classCode="040109" description="" fullPathName="#04#0401#040109" lcStatus="Enabled"/>
+        <classify id="fc1ee416-538a-48d9-8ffa-54dbb286c92c" name="鐕冩补绯荤粺" pid="040103" classCode="040103" description="" fullPathName="#04#0401#040103" lcStatus="Enabled"/>
+        <classify id="b23293cf-f432-43da-9288-a0ae3c4ffd69" name="楂橀绾挎潫" pid="0403" classCode="0403" description="" fullPathName="#04#0403" lcStatus="Enabled"/>
+        <classify id="1805629e-4755-4bb8-a257-34e7dea78ebd" name="浠诲姟绯荤粺" pid="040301" classCode="040301" description="" fullPathName="#04#0403#040301" lcStatus="Enabled"/>
+        <classify id="7e3e7c6d-0904-418d-a507-8e5ef2fe8e9f" name="閾捐矾绯荤粺" pid="040303" classCode="040303" description="" fullPathName="#04#0403#040303" lcStatus="Enabled"/>
+        <classify id="857a661f-bbda-4500-a871-d8b1cb464a3c" name="椋炵绯荤粺" pid="040302" classCode="040302" description="" fullPathName="#04#0403#040302" lcStatus="Enabled"/>
+        <classify id="b99618ce-afc4-4847-b126-d322594206f8" name="鎴愬搧鐢电紗" pid="0404" classCode="0404" description="" fullPathName="#04#0404" lcStatus="Enabled"/>
+        <classify id="26db9af0-c2a4-4715-81b8-0435677f90fc" name="1553B鎬荤嚎" pid="040401" classCode="040401" description="" fullPathName="#04#0404#040401" lcStatus="Enabled"/>
+        <classify id="4b479322-4abd-4883-8b71-8a5682ba94a9" name="1394B鎬荤嚎" pid="040402" classCode="040402" description="" fullPathName="#04#0404#040402" lcStatus="Enabled"/>
+        <classify id="e2592e74-42b2-4318-ad97-287792c72108" name="鍦伴潰绔欓厤濂楁垚鍝侀厤浠�" pid="0406" classCode="0406" description="" fullPathName="#04#0406" lcStatus="Enabled"/>
+        <classify id="CFD5B76C-E5A9-32F3-1723-A7ABC451B970" name="鍦伴潰绔欓厤濂楁垚鍝侀厤浠�" pid="040600" classCode="040600" description="" fullPathName="#04#0406#040600" lcStatus="Enabled"/>
+        <classify id="EDC5E467-C15D-E709-EB67-47FC3903F7C3" name="闆剁粍浠�" pid="03" classCode="03" description="闆剁粍浠�" fullPathName="#03" lcStatus="Enabled"/>
+        <classify id="30D5DB0B-E0F7-F56C-668C-2EE25EE11CBC" name="鎺ュご" pid="0303" classCode="0303" description="鎺ュご" fullPathName="#03#0303" lcStatus="Enabled"/>
+        <classify id="4305E553-69ED-8B67-6CF4-45D013841DAA" name="鍙戝姩鏈虹郴缁�" pid="030304" classCode="030304" description="鍙戝姩鏈虹郴缁�" fullPathName="#03#0303#030304" lcStatus="Enabled"/>
+        <classify id="57B02FC2-5D01-8D5D-FF1C-BEDBBB80E29C" name="娑插帇绯荤粺" pid="030302" classCode="030302" description="娑插帇绯荤粺" fullPathName="#03#0303#030302" lcStatus="Enabled"/>
+        <classify id="9FDC015A-BC9E-B6F4-7B37-E4A147EC1486" name="璧疯惤鏋剁郴缁�" pid="030303" classCode="030303" description="璧疯惤鏋剁郴缁�" fullPathName="#03#0303#030303" lcStatus="Enabled"/>
+        <classify id="DAC0B0C2-F041-31AA-1718-E4E08E1B0ADD" name="鐕冩补绯荤粺" pid="030301" classCode="030301" description="鐕冩补绯荤粺" fullPathName="#03#0303#030301" lcStatus="Enabled"/>
+        <classify id="ADC34B0C-5C42-CD0D-BA96-80B1007D5C6E" name="绾挎潫" pid="0304" classCode="0304" description="绾挎潫" fullPathName="#03#0304" lcStatus="Enabled"/>
+        <classify id="1F551A64-A86B-28EF-FED0-3A4BED64B90E" name="鍏朵粬" pid="030407" classCode="030407" description="鍏朵粬" fullPathName="#03#0304#030407" lcStatus="Enabled"/>
+        <classify id="27C429A4-3C90-1C56-B0CD-B08AE4CD9F37" name="椋炴帶绯荤粺" pid="030401" classCode="030401" description="椋炴帶绯荤粺" fullPathName="#03#0304#030401" lcStatus="Enabled"/>
+        <classify id="3A963DD0-B8E6-3B3A-1321-45A243DB32B9" name="娌圭绾挎潫" pid="030405" classCode="030405" description="娌圭绾挎潫" fullPathName="#03#0304#030405" lcStatus="Enabled"/>
+        <classify id="6A7382A0-2444-DF4F-6DED-49B65A73DB20" name="渚涚數绯荤粺" pid="030404" classCode="030404" description="渚涚數绯荤粺" fullPathName="#03#0304#030404" lcStatus="Enabled"/>
+        <classify id="6D156FAE-E836-5CF6-C970-CDC54F4907CF" name="鍔ㄥ姏绯荤粺" pid="030406" classCode="030406" description="鍔ㄥ姏绯荤粺" fullPathName="#03#0304#030406" lcStatus="Enabled"/>
+        <classify id="7893CB68-E7CA-FA42-4510-D93C4BA8B61D" name="浠诲姟绯荤粺" pid="030402" classCode="030402" description="浠诲姟绯荤粺" fullPathName="#03#0304#030402" lcStatus="Enabled"/>
+        <classify id="BB0DB7B3-0C69-5DD0-501E-D7CB6F58A83D" name="姝﹀櫒绯荤粺" pid="030403" classCode="030403" description="姝﹀櫒绯荤粺" fullPathName="#03#0304#030403" lcStatus="Enabled"/>
+        <classify id="B3C462E1-784D-9020-8E55-0DEFCC348346" name="鏈轰綋缁撴瀯浠�" pid="0301" classCode="0301" description="鏈轰綋缁撴瀯浠�" fullPathName="#03#0301" lcStatus="Enabled"/>
+        <classify id="232BBB7A-778F-8926-8A3E-CE38473C1D59" name="V灏鹃儴浠�" pid="030103" classCode="030103" description="V灏鹃儴浠�" fullPathName="#03#0301#030103" lcStatus="Enabled"/>
+        <classify id="3C934A32-161B-7E44-54AB-3BCB9D3D2988" name="鏈虹考閮ㄤ欢" pid="030102" classCode="030102" description="鏈虹考閮ㄤ欢" fullPathName="#03#0301#030102" lcStatus="Enabled"/>
+        <classify id="421867A5-041F-33B5-08BC-1B8ABAB6675C" name="鏈鸿韩閮ㄤ欢" pid="030104" classCode="030104" description="鏈鸿韩閮ㄤ欢" fullPathName="#03#0301#030104" lcStatus="Enabled"/>
+        <classify id="97394212-1972-DE46-7B49-6DD3092AB20C" name="鏈轰綋" pid="030101" classCode="030101" description="鏈轰綋" fullPathName="#03#0301#030101" lcStatus="Enabled"/>
+        <classify id="E2E0122F-4A2D-A746-8456-C9D9115ED0EA" name="瀵肩" pid="0302" classCode="0302" description="瀵肩" fullPathName="#03#0302" lcStatus="Enabled"/>
+        <classify id="77109B63-72AB-1434-6C61-00CE47E5FA6C" name="鐕冩补绯荤粺" pid="030201" classCode="030201" description="鐕冩补绯荤粺" fullPathName="#03#0302#030201" lcStatus="Enabled"/>
+        <classify id="89BF277E-BEDF-D1C7-25E8-3672F3355B7B" name="鍔ㄥ姏绯荤粺" pid="030204" classCode="030204" description="鍔ㄥ姏绯荤粺" fullPathName="#03#0302#030204" lcStatus="Enabled"/>
+        <classify id="CB3D9727-E2E2-98ED-6209-F998274EB498" name="璧疯惤鏋剁郴缁�" pid="030205" classCode="030205" description="璧疯惤鏋剁郴缁�" fullPathName="#03#0302#030205" lcStatus="Enabled"/>
+        <classify id="F16E2D3C-225B-8E0B-492B-FCD8075F5612" name="鐜帶绯荤粺" pid="030203" classCode="030203" description="鐜帶绯荤粺" fullPathName="#03#0302#030203" lcStatus="Enabled"/>
+        <classify id="F1A4FD56-84A1-677F-F205-4014590593D8" name="娑插帇绯荤粺" pid="030202" classCode="030202" description="娑插帇绯荤粺" fullPathName="#03#0302#030202" lcStatus="Enabled"/>
+        <classify id="E3C156CD-DC3A-854D-73C7-8839A6588B81" name="鑷埗浠�" pid="0305" classCode="0305" description="鑷埗浠�" fullPathName="#03#0305" lcStatus="Enabled"/>
+        <classify id="0b86cdc5-d846-4956-bd9d-0029fe0ea5f4" name="铻烘爴绫�" pid="030508" classCode="030508" description="" fullPathName="#03#0305#030508" lcStatus="Enabled"/>
+        <classify id="0cf6b4a3-e490-4c5f-a914-0cc3ba6f165f" name="鑳跺灚绫�" pid="030504" classCode="030504" description="" fullPathName="#03#0305#030504" lcStatus="Enabled"/>
+        <classify id="1db22304-b1a7-4808-86c7-f4440c987c2f" name="鏀灦绫�" pid="030514" classCode="030514" description="" fullPathName="#03#0305#030514" lcStatus="Enabled"/>
+        <classify id="22cbfec9-2b1f-4959-9c6a-889868911350" name="瀵嗗皝浠剁被" pid="030510" classCode="030510" description="" fullPathName="#03#0305#030510" lcStatus="Enabled"/>
+        <classify id="286abeda-4aa1-403f-944b-02eb0014c868" name="閿�绫�" pid="030511" classCode="030511" description="" fullPathName="#03#0305#030511" lcStatus="Enabled"/>
+        <classify id="2f790919-c3db-4645-b777-43cd312d85eb" name="瑙掔墖绫�" pid="030505" classCode="030505" description="" fullPathName="#03#0305#030505" lcStatus="Enabled"/>
+        <classify id="51616e6c-3fa7-4722-83a0-9b168a769b03" name="鍨湀绫�" pid="030503" classCode="030503" description="" fullPathName="#03#0305#030503" lcStatus="Enabled"/>
+        <classify id="53a1f8e9-89d1-47df-aa69-49355946af1c" name="鏀骇绫�" pid="030515" classCode="030515" description="" fullPathName="#03#0305#030515" lcStatus="Enabled"/>
+        <classify id="5c4d29c3-750c-4b10-8dd0-095d421fe1e2" name="鏀噦绫�" pid="030513" classCode="030513" description="" fullPathName="#03#0305#030513" lcStatus="Enabled"/>
+        <classify id="65c83ac5-5a18-4e1d-9e92-37b320024d0a" name="閰嶉噸绫�" pid="030509" classCode="030509" description="" fullPathName="#03#0305#030509" lcStatus="Enabled"/>
+        <classify id="7bc57b0b-7b2e-4905-85d9-5860fb4b005e" name="鏍囩墝绫�" pid="030501" classCode="030501" description="" fullPathName="#03#0305#030501" lcStatus="Enabled"/>
+        <classify id="a4310d25-b923-44ce-ba80-9c4636a6a07a" name="铻烘瘝绫�" pid="030507" classCode="030507" description="" fullPathName="#03#0305#030507" lcStatus="Enabled"/>
+        <classify id="ad1bf0ec-3fce-406c-9e11-66a8a9385c75" name="鍨墖绫�" pid="030502" classCode="030502" description="" fullPathName="#03#0305#030502" lcStatus="Enabled"/>
+        <classify id="cd0a35b0-7489-47c5-ba12-31b327cb92ad" name="鍗$畭绫�" pid="030506" classCode="030506" description="" fullPathName="#03#0305#030506" lcStatus="Enabled"/>
+        <classify id="f6204be3-8a23-4fee-b41a-94951e616856" name="鍏朵粬绫�" pid="030512" classCode="030512" description="" fullPathName="#03#0305#030512" lcStatus="Enabled"/>
+        <classify id="FF328862-4D62-CBAD-B28E-7FFB4E2C88C8" name="宸ヨ宸ュ叿" pid="06" classCode="06" description="宸ヨ宸ュ叿" fullPathName="#06" lcStatus="Enabled"/>
+        <classify id="4D2175B5-675F-5CA8-6B44-703081CA2B1A" name="閫氱敤宸ヨ宸ュ叿" pid="0601" classCode="0601" description="閫氱敤宸ヨ宸ュ叿" fullPathName="#06#0601" lcStatus="Enabled"/>
+        <classify id="0c94e793-e475-40ec-91b0-4498b85ab510" name="閽冲伐宸ュ叿" pid="060103" classCode="060103" description="" fullPathName="#06#0601#060103" lcStatus="Enabled"/>
+        <classify id="2307ef02-ca59-46fd-bbff-1e361cbd6cb7" name="鍒�鍏�" pid="060101" classCode="060101" description="" fullPathName="#06#0601#060101" lcStatus="Enabled"/>
+        <classify id="8446d37d-06a6-43f5-bcd9-7a8cf0781e2c" name="鐢靛姩姘斿姩宸ュ叿" pid="060104" classCode="060104" description="" fullPathName="#06#0601#060104" lcStatus="Enabled"/>
+        <classify id="86aaf0fc-91c3-4039-ace4-3f56425ff6a2" name="閲忓叿" pid="060102" classCode="060102" description="" fullPathName="#06#0601#060102" lcStatus="Enabled"/>
+        <classify id="ddd5fed4-5e65-4e9c-ade1-8b7c2aab01f8" name="纾ㄦ枡纾ㄥ叿" pid="060105" classCode="060105" description="" fullPathName="#06#0601#060105" lcStatus="Enabled"/>
+        <classify id="CA5A043A-0080-4278-9BA1-C688926EA0AA" name="涓撶敤宸ヨ宸ュ叿" pid="0602" classCode="0602" description="涓撶敤宸ヨ宸ュ叿" fullPathName="#06#0602" lcStatus="Enabled"/>
+        <classify id="01f43f72-13db-433e-87bd-b67e785cc201" name="杈呭姪宸ュ叿" pid="060204" classCode="060204" description="" fullPathName="#06#0602#060204" lcStatus="Enabled"/>
+        <classify id="051bb45e-7348-4fe2-9dca-d6d42356da55" name="閽冲伐瑁呴厤宸ュ叿" pid="060203" classCode="060203" description="" fullPathName="#06#0602#060203" lcStatus="Enabled"/>
+        <classify id="226627a4-6434-413d-a010-1d32bc267107" name="娴嬮噺宸ュ叿" pid="060201" classCode="060201" description="" fullPathName="#06#0602#060201" lcStatus="Enabled"/>
+        <classify id="8c7a165e-15f6-43fa-86ee-cbd9c5362aa1" name="澶瑰叿鍙婅澶�" pid="060202" classCode="060202" description="" fullPathName="#06#0602#060202" lcStatus="Enabled"/>
+        <classify id="d1a82116-39b9-4cf5-907c-f62a357ef32d" name="鍏朵粬宸ュ叿" pid="060205" classCode="060205" description="" fullPathName="#06#0602#060205" lcStatus="Enabled"/>
+    </library>
+</data>
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeJosnDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeJosnDTO.java
new file mode 100644
index 0000000..658aaf3
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeJosnDTO.java
@@ -0,0 +1,21 @@
+package org.springblade.code.dto.datapush.data;
+
+public class NodeJosnDTO {
+
+    private NodedataDTO data;
+
+    public NodedataDTO getData() {
+        return data;
+    }
+
+    public void setData(NodedataDTO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeJosnDTO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeObjectDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeObjectDTO.java
new file mode 100644
index 0000000..c486a78
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeObjectDTO.java
@@ -0,0 +1,71 @@
+package org.springblade.code.dto.datapush.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("object")
+public class NodeObjectDTO {
+    @XStreamAsAttribute
+   private String  code="" ;
+    @XStreamAsAttribute
+    private String status="" ;
+    @XStreamAsAttribute
+    private String library="";
+    @XStreamAsAttribute
+    private String classCode="";
+    @XStreamImplicit
+    private List<NodeProDTO> pro;
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public List<NodeProDTO> getPro() {
+        return pro;
+    }
+
+    public void setPro(List<NodeProDTO> pro) {
+        this.pro = pro;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeObjectDTO{" +
+                "code='" + code + '\'' +
+                ", status='" + status + '\'' +
+                ", library='" + library + '\'' +
+                ", classCode='" + classCode + '\'' +
+                ", pro=" + pro +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeProDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeProDTO.java
new file mode 100644
index 0000000..412313b
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodeProDTO.java
@@ -0,0 +1,47 @@
+package org.springblade.code.dto.datapush.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("pro")
+public class NodeProDTO {
+    @XStreamAsAttribute
+    private String filedName;
+    @XStreamAsAttribute
+    private String outname;
+    @XStreamAsAttribute
+    private String filedValue;
+
+    public String getFiledName() {
+        return filedName;
+    }
+
+    public void setFiledName(String filedName) {
+        this.filedName = filedName;
+    }
+
+    public String getOutname() {
+        return outname;
+    }
+
+    public void setOutname(String outname) {
+        this.outname = outname;
+    }
+
+    public String getFiledValue() {
+        return filedValue;
+    }
+
+    public void setFiledValue(String filedValue) {
+        this.filedValue = filedValue;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeProDTO{" +
+                "filedName='" + filedName + '\'' +
+                ", outname='" + outname + '\'' +
+                ", filedValue='" + filedValue + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodedataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodedataDTO.java
new file mode 100644
index 0000000..df4149d
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/NodedataDTO.java
@@ -0,0 +1,27 @@
+package org.springblade.code.dto.datapush.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("data")
+public class NodedataDTO {
+    @XStreamImplicit
+    private List<NodeObjectDTO> object;
+
+    public List<NodeObjectDTO> getObject() {
+        return object;
+    }
+
+    public void setObject(List<NodeObjectDTO> object) {
+        this.object = object;
+    }
+
+    @Override
+    public String toString() {
+        return "NodedataDTO{" +
+                "object=" + object +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/data.json b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/data.json
new file mode 100644
index 0000000..3a07164
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/data.json
@@ -0,0 +1,137 @@
+{
+  "data": {
+    "object": {
+      "code": "0201040133",
+      "status": "Released",
+      "library": "wupin",
+      "classCode": "020104",
+      "pro": [
+        {
+          "filedName": "xbj",
+          "outname": "鏍囪"
+        },
+        {
+          "filedName": "xinghaoguige",
+          "outname": "瑙勬牸",
+          "filedValue": "M4"
+        },
+        {
+          "filedName": "lastmodifier",
+          "outname": "鏈�鍚庝慨鏀逛汉",
+          "filedValue": "weidy(榄忓ぇ鍕�)"
+        },
+        {
+          "filedName": "cpxs",
+          "outname": "浜у搧鍨嬪紡"
+        },
+        {
+          "filedName": "secondfl",
+          "outname": "浜岀骇绠$悊鍒嗙被",
+          "filedValue": "绱у浐浠�"
+        },
+        {
+          "filedName": "clph",
+          "outname": "鏉愭枡鐗屽彿",
+          "filedValue": "HB1-24321"
+        },
+        {
+          "filedName": "thrifl",
+          "outname": "涓夌骇绠$悊鍒嗙被",
+          "filedValue": "铻洪拤"
+        },
+        {
+          "filedName": "xbzjbmc",
+          "outname": "鏍囧噯绾у埆鍚嶇О"
+        },
+        {
+          "filedName": "firstfl",
+          "outname": "涓�绾х鐞嗗垎绫�",
+          "filedValue": "鏍囧噯浠�"
+        },
+        {
+          "filedName": "xgzccdgcd",
+          "outname": "鍏虫敞灏哄鐨勫叕宸甫"
+        },
+        {
+          "filedName": "zjxh",
+          "outname": "瀛愪欢搴忓彿"
+        },
+        {
+          "filedName": "bmcl",
+          "outname": "琛ㄩ潰澶勭悊",
+          "filedValue": "鐢甸晙"
+        },
+        {
+          "filedName": "id",
+          "outname": "鐗╂枡缂栫爜",
+          "filedValue": "0201040133"
+        },
+        {
+          "filedName": "createtime",
+          "outname": "鍒涘缓鏃堕棿",
+          "filedValue": "2022-12-23 17:12:50.635"
+        },
+        {
+          "filedName": "creator",
+          "outname": "鍒涘缓浜�",
+          "filedValue": "weidy(榄忓ぇ鍕�)"
+        },
+        {
+          "filedName": "xwlwwmc",
+          "outname": "鐗╁搧澶栨枃鍚嶇О"
+        },
+        {
+          "filedName": "xxndj",
+          "outname": "鎬ц兘绛夌骇"
+        },
+        {
+          "filedName": "xzjmc",
+          "outname": "瀛愪欢鍚嶇О"
+        },
+        {
+          "filedName": "beizhushuoming",
+          "outname": "澶囨敞璇存槑"
+        },
+        {
+          "filedName": "revisionvalue",
+          "outname": "鐗堟湰",
+          "filedValue": "1"
+        },
+        {
+          "filedName": "name",
+          "outname": "鐗╁搧涓枃鍚嶇О",
+          "filedValue": "鍗婂渾澶磋灪閽�1"
+        },
+        {
+          "filedName": "xfjjstj",
+          "outname": "闄勫姞鎶�鏈潯浠�"
+        },
+        {
+          "filedName": "xbxkxs",
+          "outname": "淇濋櫓瀛斿瀷寮�",
+          "filedValue": "鏃�"
+        },
+        {
+          "filedName": "lastmodifytime",
+          "outname": "鏈�鍚庝慨鏀规椂闂�",
+          "filedValue": "2022-12-23 17:12:50.635"
+        },
+        {
+          "filedName": "zhiliangbz",
+          "outname": "鏍囧噯鍙�",
+          "filedValue": "HB1-2431-M4*512"
+        },
+        {
+          "filedName": "materialclassify",
+          "outname": "鎵�灞炲垎绫讳唬鍙�",
+          "filedValue": "020104"
+        },
+        {
+          "filedName": "lcstatus",
+          "outname": "鐘舵��",
+          "filedValue": "Released"
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/result.json b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/result.json
new file mode 100644
index 0000000..18f7d87
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/data/result.json
@@ -0,0 +1,10 @@
+{
+  "data": {
+    "object": {
+      "code": "0201040133",
+      "oid": "0000001",
+      "erroid": "0",
+      "msg": "娴嬭瘯鎴愬姛"
+    }
+  }
+}
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultJsonDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultJsonDTO.java
new file mode 100644
index 0000000..908b470
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultJsonDTO.java
@@ -0,0 +1,21 @@
+package org.springblade.code.dto.datapush.result;
+
+
+public class ResultJsonDTO {
+    private ResultNodeDataDTO data;
+
+    public ResultNodeDataDTO getData() {
+        return data;
+    }
+
+    public void setData(ResultNodeDataDTO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultJsonDTO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeDataDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeDataDTO.java
new file mode 100644
index 0000000..896a094
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeDataDTO.java
@@ -0,0 +1,28 @@
+package org.springblade.code.dto.datapush.result;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("data")
+public class ResultNodeDataDTO {
+
+    @XStreamImplicit
+    private List<ResultNodeObjectDTO> object;
+
+    public List<ResultNodeObjectDTO> getObject() {
+        return object;
+    }
+
+    public void setObject(List<ResultNodeObjectDTO> object) {
+        this.object = object;
+    }
+
+    @Override
+    public String toString() {
+        return "NodeDataDTO{" +
+                "object=" + object +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeObjectDTO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeObjectDTO.java
new file mode 100644
index 0000000..279d642
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/dto/datapush/result/ResultNodeObjectDTO.java
@@ -0,0 +1,70 @@
+package org.springblade.code.dto.datapush.result;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("object")
+public class ResultNodeObjectDTO {
+    /***
+     * 鏁版嵁缂栫爜
+     */
+    @XStreamAsAttribute
+    private  String code;
+    /***
+     * 鏁版嵁oid
+     */
+    @XStreamAsAttribute
+    private  String oid;
+    /***
+     * 閿欒鏍囪瘑
+     */
+    @XStreamAsAttribute
+    private String erroid;
+    /***
+     * 閿欒淇℃伅
+     */
+    @XStreamAsAttribute
+    private String msg;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public String getErroid() {
+        return erroid;
+    }
+
+    public void setErroid(String erroid) {
+        this.erroid = erroid;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultNodeObjectDTO{" +
+                "code='" + code + '\'' +
+                ", oid='" + oid + '\'' +
+                ", erroid='" + erroid + '\'' +
+                ", msg='" + msg + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/po/CodeClassifyPO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/po/CodeClassifyPO.java
new file mode 100644
index 0000000..bdd0018
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/po/CodeClassifyPO.java
@@ -0,0 +1,169 @@
+package org.springblade.code.po;
+
+import com.vci.starter.poi.annotation.ExcelColumn;
+
+/**
+ * 涓婚搴撳垎绫荤殑瀵煎叆瀵煎嚭瀵硅薄
+ * @author weidy
+ * @date 2022-04-01
+ */
+public class CodeClassifyPO implements java.io.Serializable{
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6101784029360306020L;
+    /**
+     * 鎵�鍦ㄦ暟鎹
+     */
+    @ExcelColumn(rowIndexColumn = true,value = "")
+    private String rowIndex;
+
+
+    /**
+     * 鍒嗙被缂栧彿
+     */
+    @ExcelColumn(value="鍒嗙被缂栧彿",nullable = false)
+    private String id;
+    /**
+     * 鍒嗙被鍚嶇О
+     */
+    @ExcelColumn(value="鍒嗙被鍚嶇О",nullable = false)
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    @ExcelColumn(value = "鎻忚堪")
+    private String description;
+
+    /**
+     * 缂栫爜瑙勫垯缂栧彿
+     */
+    @ExcelColumn(value = "缂栫爜瑙勫垯缂栧彿")
+    private String codeRuleId;
+
+    /**
+     * 涓氬姟绫诲瀷缂栧彿
+     */
+    @ExcelColumn(value = "涓氬姟绫诲瀷缂栧彿")
+    private String btmTypeId;
+
+    /**
+     * 鏌ラ噸瑙勫垯缂栧彿
+     */
+    @ExcelColumn(value = "鏌ラ噸瑙勫垯缂栧彿")
+    private String keyRepeatRuleId;
+
+    /**
+     * 鍒嗙被璺緞
+     */
+    @ExcelColumn(value = "鍒嗙被璺緞",nullable = false)
+    private String path;
+
+    /**
+     * 鐘舵�佹枃鏈�
+     */
+    @ExcelColumn(value = "鐘舵��")
+    private String lcStatusText;
+
+    /**
+     * 鐘舵��
+     */
+    private String lcStatus;
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getRowIndex() {
+        return rowIndex;
+    }
+
+    public void setRowIndex(String rowIndex) {
+        this.rowIndex = rowIndex;
+    }
+
+    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 getCodeRuleId() {
+        return codeRuleId;
+    }
+
+    public void setCodeRuleId(String codeRuleId) {
+        this.codeRuleId = codeRuleId;
+    }
+
+    public String getBtmTypeId() {
+        return btmTypeId;
+    }
+
+    public void setBtmTypeId(String btmTypeId) {
+        this.btmTypeId = btmTypeId;
+    }
+
+    public String getKeyRepeatRuleId() {
+        return keyRepeatRuleId;
+    }
+
+    public void setKeyRepeatRuleId(String keyRepeatRuleId) {
+        this.keyRepeatRuleId = keyRepeatRuleId;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public String getLcStatusText() {
+        return lcStatusText;
+    }
+
+    public void setLcStatusText(String lcStatusText) {
+        this.lcStatusText = lcStatusText;
+    }
+
+    public String getLcStatus() {
+        return lcStatus;
+    }
+
+    public void setLcStatus(String lcStatus) {
+        this.lcStatus = lcStatus;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyPO{" +
+                "rowIndex='" + rowIndex + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                ", codeRuleId='" + codeRuleId + '\'' +
+                ", btmTypeId='" + btmTypeId + '\'' +
+                ", keyRepeatRuleId='" + keyRepeatRuleId + '\'' +
+                ", path='" + path + '\'' +
+                ", lcStatusText='" + lcStatusText + '\'' +
+                ", lcStatus='" + lcStatus + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeBasicSecVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeBasicSecVO.java
new file mode 100644
index 0000000..8a938e9
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeBasicSecVO.java
@@ -0,0 +1,651 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeBasicSecVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118400017877L;
+
+	/**
+	* 鐮佹绫诲瀷
+	*/
+	private String sectype;
+
+
+	/**
+	* 鐮佹绫诲瀷鏄剧ず鏂囨湰
+	*/
+	private String sectypeText;
+
+	/**
+	 * 鎵�灞炵紪鐮佽鍒�
+	 */
+	private String pkCodeRule;
+
+	/**
+	 * 鐮佹鎺掑簭鍙�
+	 */
+	private Integer orderNum;
+
+	/**
+	 * 鐮佹闀垮害绫诲瀷
+	 */
+	private String codeSecLengthType;
+	/**
+	 * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String codeSecLengthTypeText;
+
+	/**
+	 * 鐮佹闀垮害
+	 */
+	private String codeSecLength;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬х殑鏂囨湰
+	 */
+	private String referAttributeName;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	private String referAttributeId;
+
+	/**
+	 * 鍙栧�艰鍒�
+	 */
+	private String getValueClass ;
+
+	//鍓嶇杈撳叆鍚庤嚜鍔ㄥ姞鍏ュ埌鏋氫妇涓�
+	/**
+	 * 鏃ユ湡鏍煎紡
+	 */
+	private String codeDateFormatStr;
+
+	/**
+	 * 灞傜骇绫诲瀷
+	 */
+	private String codeLevelType;
+
+	/**
+	 * 灞傜骇绫诲瀷鏄剧ず鏂囨湰
+	 */
+	private String codeLevelTypeText;
+
+	/**
+	 * 灞傜骇鐨勫��
+	 */
+	private Integer codeLevelValue;
+
+	/**
+	 * 鍊兼埅鍙栭暱搴�
+	 */
+	private Integer valueCutLength;
+
+	/**
+	 * 瀛楃鎴彇绫诲瀷
+	 */
+	private String valueCutType;
+
+	/**
+	 * 瀛楃涓叉埅鍙栫被鍨嬫樉绀烘枃鏈�
+	 */
+	private String valueCutTypeText;
+
+	/**
+	 * 鍙栧�肩被鍨�
+	 */
+	private String codeGetValueType;
+
+	/**
+	 * 鍙栧�肩被鍨嬫樉绀烘枃鏈�
+	 */
+	private String codeGetValueTypeText;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ф墍灞炵殑搴撳垎绫�
+	 */
+	private String referCodeClassifyOid;
+
+	/**
+	 * 寮曠敤鐨勫睘鎬ф墍灞炲簱鍒嗙被鍚嶇О
+	 */
+	private String referCodeClassifyOidName;
+
+	/**
+	 * 寮曠敤鐨勪笟鍔$被鍨�
+	 */
+	private String referBtmId;
+
+	/**
+	 * 寮曠敤鐨勪笟鍔$被鍨嬪悕绉�
+	 */
+	private String referBtmName;
+
+	/**
+	 * 鍙傜収鐨勭獥鍙i厤缃�
+	 */
+	private String referConfig;
+
+	/**
+	 * 鏄剧ず淇℃伅
+	 */
+	private String referValueInfo;
+
+	/**
+	 * 杩囨护鐨剆ql鍐呭
+	 */
+	private String filterSql ;
+
+
+	/**
+	 * 娴佹按鍙疯捣濮嬪��
+	 */
+	private String serialStart;
+
+	/**
+	 * 娴佹按鐨勬闀�
+	 */
+	private Integer serialStep;
+
+
+	/**
+	 * 缂栫爜琛ヤ綅鏂瑰紡
+	 */
+	private String codeFillType;
+
+	/**
+	 * 缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	private String codeFillTypeText;
+
+	/**
+	 * 琛ヤ綅鏃剁殑瀛楃
+	 */
+	private String codeFillSeparator;
+
+	/**
+	 * 濉厖闀垮害
+	 */
+	private String codeFillLength;
+
+	/**
+	 * 涓婇檺
+	 */
+	private Integer codeFillLimit;
+
+	/**
+	 * 娴佹按鏄惁琛ョ爜
+	 */
+	private String codeFillFlag;
+
+	/**
+	 * 鑷畾涔夌殑娴佹按绠楁硶绫�
+	 */
+	private String customCodeSerialClass;
+
+	/**
+	 * 鏄惁鑷姩鍖归厤鍒嗙被鍊�
+	 */
+	private String matchClassifyValueFlag;
+
+	/**
+	 * 鐖跺垎绫荤爜娈典富閿�
+	 */
+	private String parentClassifySecOid;
+
+	/**
+	 * 鐖跺垎绫荤爜娈靛悕绉�
+	 */
+	private String parentClassifySecText;
+
+
+	/**
+	 * 鏄惁鍙互涓虹┖
+	 */
+	private String nullableFlag;
+
+	/**
+	 * 鏄惁鍙備笌缂栫爜
+	 */
+	private String componentCodeFlag;
+
+	/**
+	 * 鏄惁娴佹按渚濊禆
+	 */
+	private String serialDependFlag;
+
+	/**
+	 * 鏄惁鏄剧ず
+	 */
+	private String displayFlag;
+
+	/**
+	 * 娴佹按渚濊禆椤哄簭
+	 */
+	private Integer serialDependOrder;
+
+	/**
+	 * 鍥哄畾鐮佺殑鐮佸�煎唴瀹�
+	 */
+	private List<CodeFixedValueVO> fixedValueVOList;
+
+	public String getReferCodeClassifyOidName() {
+		return referCodeClassifyOidName;
+	}
+
+	public void setReferCodeClassifyOidName(String referCodeClassifyOidName) {
+		this.referCodeClassifyOidName = referCodeClassifyOidName;
+	}
+
+	public String getReferAttributeId() {
+		return referAttributeId;
+	}
+
+	public void setReferAttributeId(String referAttributeId) {
+		this.referAttributeId = referAttributeId;
+	}
+
+	//鍒嗙被鐨勫唴瀹逛笉鑳界洿鎺ユ斁锛屽洜涓哄彲鑳藉緢澶�
+
+	public String getPkCodeRule() {
+		return pkCodeRule;
+	}
+
+	public void setPkCodeRule(String pkCodeRule) {
+		this.pkCodeRule = pkCodeRule;
+	}
+
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getCodeSecLengthTypeText() {
+		return codeSecLengthTypeText;
+	}
+
+	public void setCodeSecLengthTypeText(String codeSecLengthTypeText) {
+		this.codeSecLengthTypeText = codeSecLengthTypeText;
+	}
+
+	public String getMatchClassifyValueFlag() {
+		return matchClassifyValueFlag;
+	}
+
+	public void setMatchClassifyValueFlag(String matchClassifyValueFlag) {
+		this.matchClassifyValueFlag = matchClassifyValueFlag;
+	}
+
+	public String getParentClassifySecOid() {
+		return parentClassifySecOid;
+	}
+
+	public void setParentClassifySecOid(String parentClassifySecOid) {
+		this.parentClassifySecOid = parentClassifySecOid;
+	}
+
+	public String getParentClassifySecText() {
+		return parentClassifySecText;
+	}
+
+	public void setParentClassifySecText(String parentClassifySecText) {
+		this.parentClassifySecText = parentClassifySecText;
+	}
+
+	public String getNullableFlag() {
+		return nullableFlag;
+	}
+
+	public void setNullableFlag(String nullableFlag) {
+		this.nullableFlag = nullableFlag;
+	}
+
+	public String getComponentCodeFlag() {
+		return componentCodeFlag;
+	}
+
+	public void setComponentCodeFlag(String componentCodeFlag) {
+		this.componentCodeFlag = componentCodeFlag;
+	}
+
+	public String getSerialDependFlag() {
+		return serialDependFlag;
+	}
+
+	public void setSerialDependFlag(String serialDependFlag) {
+		this.serialDependFlag = serialDependFlag;
+	}
+
+	public String getDisplayFlag() {
+		return displayFlag;
+	}
+
+	public void setDisplayFlag(String displayFlag) {
+		this.displayFlag = displayFlag;
+	}
+
+	public Integer getSerialDependOrder() {
+		return serialDependOrder;
+	}
+
+	public void setSerialDependOrder(Integer serialDependOrder) {
+		this.serialDependOrder = serialDependOrder;
+	}
+
+	/**
+	* 璁剧疆 鐮佹绫诲瀷
+	*/
+	public void setSectype (String sectype){
+		this.sectype = sectype;
+	}
+
+	public String getSectypeText() {
+		return sectypeText;
+	}
+
+	public void setSectypeText(String sectypeText) {
+		this.sectypeText = sectypeText;
+	}
+
+	public String getSectype() {
+		return sectype;
+	}
+
+	public String getCodeSecLengthType() {
+		return codeSecLengthType;
+	}
+
+	public void setCodeSecLengthType(String codeSecLengthType) {
+		this.codeSecLengthType = codeSecLengthType;
+	}
+
+	public String getCodeSecLength() {
+		return codeSecLength;
+	}
+
+	public void setCodeSecLength(String codeSecLength) {
+		this.codeSecLength = codeSecLength;
+	}
+
+	public String getGetValueClass() {
+		return getValueClass;
+	}
+
+	public void setGetValueClass(String getValueClass) {
+		this.getValueClass = getValueClass;
+	}
+
+	public String getCodeDateFormatStr() {
+		return codeDateFormatStr;
+	}
+
+	public void setCodeDateFormatStr(String codeDateFormatStr) {
+		this.codeDateFormatStr = codeDateFormatStr;
+	}
+
+	public String getCodeLevelType() {
+		return codeLevelType;
+	}
+
+	public void setCodeLevelType(String codeLevelType) {
+		this.codeLevelType = codeLevelType;
+	}
+
+	public String getCodeLevelTypeText() {
+		return codeLevelTypeText;
+	}
+
+	public void setCodeLevelTypeText(String codeLevelTypeText) {
+		this.codeLevelTypeText = codeLevelTypeText;
+	}
+
+	public Integer getCodeLevelValue() {
+		return codeLevelValue;
+	}
+
+	public void setCodeLevelValue(Integer codeLevelValue) {
+		this.codeLevelValue = codeLevelValue;
+	}
+
+	public Integer getValueCutLength() {
+		return valueCutLength;
+	}
+
+	public void setValueCutLength(Integer valueCutLength) {
+		this.valueCutLength = valueCutLength;
+	}
+
+	public String getValueCutType() {
+		return valueCutType;
+	}
+
+	public void setValueCutType(String valueCutType) {
+		this.valueCutType = valueCutType;
+	}
+
+	public String getValueCutTypeText() {
+		return valueCutTypeText;
+	}
+
+	public void setValueCutTypeText(String valueCutTypeText) {
+		this.valueCutTypeText = valueCutTypeText;
+	}
+
+	public String getCodeGetValueType() {
+		return codeGetValueType;
+	}
+
+	public void setCodeGetValueType(String codeGetValueType) {
+		this.codeGetValueType = codeGetValueType;
+	}
+
+	public String getCodeGetValueTypeText() {
+		return codeGetValueTypeText;
+	}
+
+	public void setCodeGetValueTypeText(String codeGetValueTypeText) {
+		this.codeGetValueTypeText = codeGetValueTypeText;
+	}
+
+	public String getReferCodeClassifyOid() {
+		return referCodeClassifyOid;
+	}
+
+	public void setReferCodeClassifyOid(String referCodeClassifyOid) {
+		this.referCodeClassifyOid = referCodeClassifyOid;
+	}
+
+	public String getReferConfig() {
+		return referConfig;
+	}
+
+	public void setReferConfig(String referConfig) {
+		this.referConfig = referConfig;
+	}
+
+	public String getReferValueInfo() {
+		return referValueInfo;
+	}
+
+	public void setReferValueInfo(String referValueInfo) {
+		this.referValueInfo = referValueInfo;
+	}
+
+	public String getFilterSql() {
+		return filterSql;
+	}
+
+	public void setFilterSql(String filterSql) {
+		this.filterSql = filterSql;
+	}
+
+	public String getSerialStart() {
+		return serialStart;
+	}
+
+	public void setSerialStart(String serialStart) {
+		this.serialStart = serialStart;
+	}
+
+	public Integer getSerialStep() {
+		return serialStep;
+	}
+
+	public void setSerialStep(Integer serialStep) {
+		this.serialStep = serialStep;
+	}
+
+	public String getCodeFillType() {
+		return codeFillType;
+	}
+
+	public void setCodeFillType(String codeFillType) {
+		this.codeFillType = codeFillType;
+	}
+
+	public String getCodeFillTypeText() {
+		return codeFillTypeText;
+	}
+
+	public void setCodeFillTypeText(String codeFillTypeText) {
+		this.codeFillTypeText = codeFillTypeText;
+	}
+
+	public String getCodeFillSeparator() {
+		return codeFillSeparator;
+	}
+
+	public void setCodeFillSeparator(String codeFillSeparator) {
+		this.codeFillSeparator = codeFillSeparator;
+	}
+
+	public String getCodeFillLength() {
+		return codeFillLength;
+	}
+
+	public void setCodeFillLength(String codeFillLength) {
+		this.codeFillLength = codeFillLength;
+	}
+
+	public Integer getCodeFillLimit() {
+		return codeFillLimit;
+	}
+
+	public void setCodeFillLimit(Integer codeFillLimit) {
+		this.codeFillLimit = codeFillLimit;
+	}
+
+	public String getCodeFillFlag() {
+		return codeFillFlag;
+	}
+
+	public void setCodeFillFlag(String codeFillFlag) {
+		this.codeFillFlag = codeFillFlag;
+	}
+
+	public String getCustomCodeSerialClass() {
+		return customCodeSerialClass;
+	}
+
+	public void setCustomCodeSerialClass(String customCodeSerialClass) {
+		this.customCodeSerialClass = customCodeSerialClass;
+	}
+
+
+	public List<CodeFixedValueVO> getFixedValueVOList() {
+		return fixedValueVOList;
+	}
+
+	public void setFixedValueVOList(List<CodeFixedValueVO> fixedValueVOList) {
+		this.fixedValueVOList = fixedValueVOList;
+	}
+
+	public String getReferAttributeName() {
+		return referAttributeName;
+	}
+
+	public void setReferAttributeName(String referAttributeName) {
+		this.referAttributeName = referAttributeName;
+	}
+
+	public String getReferBtmId() {
+		return referBtmId;
+	}
+
+	public void setReferBtmId(String referBtmId) {
+		this.referBtmId = referBtmId;
+	}
+
+	public String getReferBtmName() {
+		return referBtmName;
+	}
+
+	public void setReferBtmName(String referBtmName) {
+		this.referBtmName = referBtmName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeBasicSecVO{" +
+				"sectype='" + sectype + '\'' +
+				", sectypeText='" + sectypeText + '\'' +
+				", pkCodeRule='" + pkCodeRule + '\'' +
+				", orderNum=" + orderNum +
+				", codeSecLengthType='" + codeSecLengthType + '\'' +
+				", codeSecLengthTypeText='" + codeSecLengthTypeText + '\'' +
+				", codeSecLength='" + codeSecLength + '\'' +
+				", referAttributeName='" + referAttributeName + '\'' +
+				", referAttributeId='" + referAttributeId + '\'' +
+				", getValueClass='" + getValueClass + '\'' +
+				", codeDateFormatStr='" + codeDateFormatStr + '\'' +
+				", codeLevelType='" + codeLevelType + '\'' +
+				", codeLevelTypeText='" + codeLevelTypeText + '\'' +
+				", codeLevelValue=" + codeLevelValue +
+				", valueCutLength=" + valueCutLength +
+				", valueCutType='" + valueCutType + '\'' +
+				", valueCutTypeText='" + valueCutTypeText + '\'' +
+				", codeGetValueType='" + codeGetValueType + '\'' +
+				", codeGetValueTypeText='" + codeGetValueTypeText + '\'' +
+				", referCodeClassifyOid='" + referCodeClassifyOid + '\'' +
+				", referCodeClassifyOidName='" + referCodeClassifyOidName + '\'' +
+				", referBtmId='" + referBtmId + '\'' +
+				", referBtmName='" + referBtmName + '\'' +
+				", referConfig='" + referConfig + '\'' +
+				", referValueInfo='" + referValueInfo + '\'' +
+				", filterSql='" + filterSql + '\'' +
+				", serialStart='" + serialStart + '\'' +
+				", serialStep=" + serialStep +
+				", codeFillType='" + codeFillType + '\'' +
+				", codeFillTypeText='" + codeFillTypeText + '\'' +
+				", codeFillSeparator='" + codeFillSeparator + '\'' +
+				", codeFillLength='" + codeFillLength + '\'' +
+				", codeFillLimit=" + codeFillLimit +
+				", codeFillFlag='" + codeFillFlag + '\'' +
+				", customCodeSerialClass='" + customCodeSerialClass + '\'' +
+				", matchClassifyValueFlag='" + matchClassifyValueFlag + '\'' +
+				", parentClassifySecOid='" + parentClassifySecOid + '\'' +
+				", parentClassifySecText='" + parentClassifySecText + '\'' +
+				", nullableFlag='" + nullableFlag + '\'' +
+				", componentCodeFlag='" + componentCodeFlag + '\'' +
+				", serialDependFlag='" + serialDependFlag + '\'' +
+				", displayFlag='" + displayFlag + '\'' +
+				", serialDependOrder=" + serialDependOrder +
+				", fixedValueVOList=" + fixedValueVOList +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeButtonVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeButtonVO.java
new file mode 100644
index 0000000..2aefd38
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeButtonVO.java
@@ -0,0 +1,98 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeButtonVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118774202884L;
+
+	/**
+	* 鎸夐挳鐨勫浘鏍囨牱寮�
+	*/
+	private String iconcls;
+
+
+	/**
+	* 鎵ц鐨刯s鍐呭
+	*/
+	private String executejs;
+
+
+	/**
+	* 鎸夐挳鐨勪綅缃�
+	*/
+	private String usedpositiontype;
+
+
+	/**
+	* 鎸夐挳鐨勪綅缃樉绀烘枃鏈�
+	*/
+	private String usedpositiontypeText;
+
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勫浘鏍囨牱寮�
+	 */
+	public String getIconcls (){
+		return iconcls;
+	}
+
+	/**
+	* 璁剧疆 鎸夐挳鐨勫浘鏍囨牱寮�
+	*/
+	public void setIconcls (String iconcls){
+		this.iconcls = iconcls;
+	}
+	/**
+	 * 鑾峰彇 鎵ц鐨刯s鍐呭
+	 */
+	public String getExecutejs (){
+		return executejs;
+	}
+
+	/**
+	* 璁剧疆 鎵ц鐨刯s鍐呭
+	*/
+	public void setExecutejs (String executejs){
+		this.executejs = executejs;
+	}
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勪綅缃�
+	 */
+	public String getUsedpositiontype (){
+		return usedpositiontype;
+	}
+
+	/**
+	* 璁剧疆 鎸夐挳鐨勪綅缃�
+	*/
+	public void setUsedpositiontype (String usedpositiontype){
+		this.usedpositiontype = usedpositiontype;
+	}
+
+	public String getUsedpositiontypeText() {
+		return usedpositiontypeText;
+	}
+
+	public void setUsedpositiontypeText(String usedpositiontypeText) {
+		this.usedpositiontypeText = usedpositiontypeText;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeButtonVO{" +
+				"iconcls='" + iconcls + '\'' +
+				", executejs='" + executejs + '\'' +
+				", usedpositiontype='" + usedpositiontype + '\'' +
+				", usedpositiontypeText='" + usedpositiontypeText + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyAttributeVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyAttributeVO.java
new file mode 100644
index 0000000..499cdfb
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyAttributeVO.java
@@ -0,0 +1,63 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撳垎绫绘墍闇�灞炴�ч泦鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyAttributeVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120914631514L;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿�
+	*/
+	private String codeclassifyoid;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	private String codeclassifyoidName;
+
+
+	/**
+	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
+	 */
+	public String getCodeclassifyoid (){
+		return codeclassifyoid;
+	}
+
+	/**
+	* 璁剧疆 涓婚搴撳垎绫讳富閿�
+	*/
+	public void setCodeclassifyoid (String codeclassifyoid){
+		this.codeclassifyoid = codeclassifyoid;
+	}
+	/**
+	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public String getCodeclassifyoidName (){
+		return codeclassifyoidName;
+	}
+
+	/**
+	* 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	public void setCodeclassifyoidName (String codeclassifyoidName){
+		this.codeclassifyoidName = codeclassifyoidName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyAttributeVO{" +
+		"codeclassifyoid='" + codeclassifyoid +"'," +
+		"codeclassifyoidName='" + codeclassifyoidName +"'," +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyProcessTempVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyProcessTempVO.java
new file mode 100644
index 0000000..c7df7c5
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyProcessTempVO.java
@@ -0,0 +1,167 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyProcessTempVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118047426785L;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿�
+	*/
+	private String codeclassifyoid;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	private String codeclassifyoidName;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	private String classifyTemplateOid;
+
+	/**
+	* 娴佺▼妯℃澘鐢ㄩ��
+	*/
+	private String codeprocessuse;
+
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ�斿悕绉�
+	 */
+	private String codeprocessuseText;
+
+	/**
+	 * 娴佺▼妯℃澘鐨勭増鏈�
+	 */
+	private String processVersion;
+
+	/**
+	 * 鍏宠仈鐨勬ā鏉垮睘鎬х殑涓婚敭闆嗗悎瀛楃涓�
+	 */
+	private String codeTempAttrOidArr;
+
+	/**
+	 * 鍏宠仈鐨勬ā鏉垮睘鎬х殑鍚嶇О闆嗗悎瀛楃涓�
+	 */
+	private String codeTempAttrOidArrName;
+
+	/**
+	 * 鍏宠仈鐨勬ā鏉垮睘鎬�
+	 */
+	private List<CodeClassifyTemplateAttrVO> attrList;
+
+	/**
+	 * 鑾峰彇 涓婚搴撳垎绫讳富閿�
+	 */
+	public String getCodeclassifyoid (){
+		return codeclassifyoid;
+	}
+
+	/**
+	* 璁剧疆 涓婚搴撳垎绫讳富閿�
+	*/
+	public void setCodeclassifyoid (String codeclassifyoid){
+		this.codeclassifyoid = codeclassifyoid;
+	}
+	/**
+	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public String getCodeclassifyoidName (){
+		return codeclassifyoidName;
+	}
+
+	/**
+	* 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	public void setCodeclassifyoidName (String codeclassifyoidName){
+		this.codeclassifyoidName = codeclassifyoidName;
+	}
+	/**
+	 * 鑾峰彇 娴佺▼妯℃澘鐢ㄩ��
+	 */
+	public String getCodeprocessuse (){
+		return codeprocessuse;
+	}
+
+	/**
+	* 璁剧疆 娴佺▼妯℃澘鐢ㄩ��
+	*/
+	public void setCodeprocessuse (String codeprocessuse){
+		this.codeprocessuse = codeprocessuse;
+	}
+
+	public String getCodeprocessuseText() {
+		return codeprocessuseText;
+	}
+
+	public void setCodeprocessuseText(String codeprocessuseText) {
+		this.codeprocessuseText = codeprocessuseText;
+	}
+
+	public String getClassifyTemplateOid() {
+		return classifyTemplateOid;
+	}
+
+	public void setClassifyTemplateOid(String classifyTemplateOid) {
+		this.classifyTemplateOid = classifyTemplateOid;
+	}
+
+	public String getProcessVersion() {
+		return processVersion;
+	}
+
+	public void setProcessVersion(String processVersion) {
+		this.processVersion = processVersion;
+	}
+
+	public List<CodeClassifyTemplateAttrVO> getAttrList() {
+		return attrList;
+	}
+
+	public void setAttrList(List<CodeClassifyTemplateAttrVO> attrList) {
+		this.attrList = attrList;
+	}
+
+	public String getCodeTempAttrOidArr() {
+		return codeTempAttrOidArr;
+	}
+
+	public void setCodeTempAttrOidArr(String codeTempAttrOidArr) {
+		this.codeTempAttrOidArr = codeTempAttrOidArr;
+	}
+
+	public String getCodeTempAttrOidArrName() {
+		return codeTempAttrOidArrName;
+	}
+
+	public void setCodeTempAttrOidArrName(String codeTempAttrOidArrName) {
+		this.codeTempAttrOidArrName = codeTempAttrOidArrName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyProcessTempVO{" +
+				"codeclassifyoid='" + codeclassifyoid + '\'' +
+				", codeclassifyoidName='" + codeclassifyoidName + '\'' +
+				", classifyTemplateOid='" + classifyTemplateOid + '\'' +
+				", codeprocessuse='" + codeprocessuse + '\'' +
+				", codeprocessuseText='" + codeprocessuseText + '\'' +
+				", processVersion='" + processVersion + '\'' +
+				", codeTempAttrOidArr='" + codeTempAttrOidArr + '\'' +
+				", codeTempAttrOidArrName='" + codeTempAttrOidArrName + '\'' +
+				", attrList=" + attrList +
+				'}' + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTempMapItemVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTempMapItemVO.java
new file mode 100644
index 0000000..1ffc7b4
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTempMapItemVO.java
@@ -0,0 +1,210 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+public class CodeClassifyTempMapItemVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120984500249L;
+
+	/**
+	* 鍒嗙被妯℃澘灞炴�т富閿�
+	*/
+	private String classifytemplateattroid;
+
+	/**
+	 * 妯℃澘灞炴�ey
+	 */
+	private String classifyAttrId;
+
+	/**
+	 * 妯℃澘灞炴�у悕绉�
+	 */
+	private String classifyAttrName;
+
+	/**
+	* 鏄犲皠瑙勫垯涓婚敭
+	*/
+	private String classifytemplatemapoid;
+
+	/**
+	* 鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	*/
+	private String classifytemplatemapoidName;
+
+	/**
+	* 闆嗗洟鐮佸睘鎬ey
+	*/
+	private String groupcodeattrid;
+
+
+	/**
+	* 闆嗗洟鐮佸睘鎬у悕绉�
+	*/
+	private String groupcodeattrname;
+
+
+	/**
+	* 杞崲鐨勮嚜瀹氫箟绫�
+	*/
+	private String switchclassname;
+
+
+	/**
+	* 杞崲鍏紡
+	*/
+	private String switcheval;
+
+
+	/**
+	* 鐩爣绔殑鏃堕棿鏍煎紡
+	*/
+	private String targetdateformat;
+
+
+
+	/**
+	 * 鑾峰彇 鍒嗙被妯℃澘灞炴�т富閿�
+	 */
+	public String getClassifytemplateattroid (){
+		return classifytemplateattroid;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被妯℃澘灞炴�т富閿�
+	*/
+	public void setClassifytemplateattroid (String classifytemplateattroid){
+		this.classifytemplateattroid = classifytemplateattroid;
+	}
+	/**
+	 * 鑾峰彇 鏄犲皠瑙勫垯涓婚敭
+	 */
+	public String getClassifytemplatemapoid (){
+		return classifytemplatemapoid;
+	}
+
+	/**
+	* 璁剧疆 鏄犲皠瑙勫垯涓婚敭
+	*/
+	public void setClassifytemplatemapoid (String classifytemplatemapoid){
+		this.classifytemplatemapoid = classifytemplatemapoid;
+	}
+	/**
+	 * 鑾峰彇鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getClassifytemplatemapoidName (){
+		return classifytemplatemapoidName;
+	}
+
+	/**
+	* 璁剧疆鏄犲皠瑙勫垯涓婚敭鏄剧ず鏂囨湰
+	*/
+	public void setClassifytemplatemapoidName (String classifytemplatemapoidName){
+		this.classifytemplatemapoidName = classifytemplatemapoidName;
+	}
+	/**
+	 * 鑾峰彇 闆嗗洟鐮佸睘鎬ey
+	 */
+	public String getGroupcodeattrid (){
+		return groupcodeattrid;
+	}
+
+	/**
+	* 璁剧疆 闆嗗洟鐮佸睘鎬ey
+	*/
+	public void setGroupcodeattrid (String groupcodeattrid){
+		this.groupcodeattrid = groupcodeattrid;
+	}
+	/**
+	 * 鑾峰彇 闆嗗洟鐮佸睘鎬у悕绉�
+	 */
+	public String getGroupcodeattrname (){
+		return groupcodeattrname;
+	}
+
+	/**
+	* 璁剧疆 闆嗗洟鐮佸睘鎬у悕绉�
+	*/
+	public void setGroupcodeattrname (String groupcodeattrname){
+		this.groupcodeattrname = groupcodeattrname;
+	}
+	/**
+	 * 鑾峰彇 杞崲鐨勮嚜瀹氫箟绫�
+	 */
+	public String getSwitchclassname (){
+		return switchclassname;
+	}
+
+	/**
+	* 璁剧疆 杞崲鐨勮嚜瀹氫箟绫�
+	*/
+	public void setSwitchclassname (String switchclassname){
+		this.switchclassname = switchclassname;
+	}
+	/**
+	 * 鑾峰彇 杞崲鍏紡
+	 */
+	public String getSwitcheval (){
+		return switcheval;
+	}
+
+	/**
+	* 璁剧疆 杞崲鍏紡
+	*/
+	public void setSwitcheval (String switcheval){
+		this.switcheval = switcheval;
+	}
+	/**
+	 * 鑾峰彇 鐩爣绔殑鏃堕棿鏍煎紡
+	 */
+	public String getTargetdateformat (){
+		return targetdateformat;
+	}
+
+	/**
+	* 璁剧疆 鐩爣绔殑鏃堕棿鏍煎紡
+	*/
+	public void setTargetdateformat (String targetdateformat){
+		this.targetdateformat = targetdateformat;
+	}
+
+	public String getClassifyAttrId() {
+		return classifyAttrId;
+	}
+
+	public void setClassifyAttrId(String classifyAttrId) {
+		this.classifyAttrId = classifyAttrId;
+	}
+
+	public String getClassifyAttrName() {
+		return classifyAttrName;
+	}
+
+	public void setClassifyAttrName(String classifyAttrName) {
+		this.classifyAttrName = classifyAttrName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTempMapItemVO{" +
+				"classifytemplateattroid='" + classifytemplateattroid + '\'' +
+				", classifyAttrId='" + classifyAttrId + '\'' +
+				", classifyAttrName='" + classifyAttrName + '\'' +
+				", classifytemplatemapoid='" + classifytemplatemapoid + '\'' +
+				", classifytemplatemapoidName='" + classifytemplatemapoidName + '\'' +
+				", groupcodeattrid='" + groupcodeattrid + '\'' +
+				", groupcodeattrname='" + groupcodeattrname + '\'' +
+				", switchclassname='" + switchclassname + '\'' +
+				", switcheval='" + switcheval + '\'' +
+				", targetdateformat='" + targetdateformat + '\'' +
+				'}' + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java
new file mode 100644
index 0000000..3e81f47
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java
@@ -0,0 +1,1071 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateAttrVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119806919617L;
+
+	/**
+	* 鎵�灞炴ā鏉�
+	*/
+	private String classifytemplateoid;
+
+	/**
+	* 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	private String classifytemplateoidName;
+
+	/**
+	* 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	*/
+	private String classifyattributeoid;
+
+	/**
+	* 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	*/
+	private String classifyattributeoidName;
+
+	/**
+	* 灞炴�х殑绫诲瀷
+	*/
+	private String attributedatatype;
+
+	/**
+	 * 灞炴�х被鍨嬫樉绀�
+	 */
+	private String attributeDataTypeText;
+
+
+	/**
+	* 鏄惁鍏抽敭灞炴��
+	*/
+	private String keyattrflag;
+
+
+	/**
+	* 鏄惁蹇�熸煡璇㈠睘鎬�
+	*/
+	private String queryattrflag;
+
+
+	/**
+	* 鏄惁楂樼骇鏌ヨ灞炴��
+	*/
+	private String seniorqueryattrflag;
+
+
+	/**
+	* 鐩镐技鏌ラ噸灞炴��
+	*/
+	private String samerepeatattrflag;
+
+
+	/**
+	* 鏄惁鎺掑簭
+	*/
+	private String sortattrflag;
+
+
+	/**
+	* 鏄惁鐢熸垚浜岀淮鐮�
+	*/
+	private String qrcodeflag;
+
+
+	/**
+	* 鏄惁鐢熸垚涓�缁寸爜
+	*/
+	private String barcodeflag;
+
+
+	/**
+	* 缁勫悎瑙勫垯
+	*/
+	private String componentrule;
+
+
+	/**
+	* 楠岃瘉瑙勫垯
+	*/
+	private String verifyrule;
+
+
+	/**
+	* 鍒嗙被娉ㄥ叆灞傜骇
+	*/
+	private String classifyinvokelevel;
+
+
+	/**
+	* 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	*/
+	private String classifyinvokeattr;
+
+
+	/**
+	* 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	*/
+	private String classifyinvokeattrname;
+
+
+	/**
+	* 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	*/
+	private String classifyinvokeeditflag;
+
+
+	/**
+	* 鐮佸�煎簭鍙�
+	*/
+	private Integer ordernum;
+
+
+	/**
+	* 琛ㄥ崟閲屾槸鍚︽樉绀�
+	*/
+	private String formdisplayflag;
+
+
+	/**
+	* 鍒楄〃閲屾槸鍚︽樉绀�
+	*/
+	private String tabledisplayflag;
+
+
+	/**
+	* 鎵�灞炲睘鎬у垎缁�
+	*/
+	private String attributegroup;
+
+
+	/**
+	* 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	*/
+	private String enumid;
+
+
+	/**
+	* 浣跨敤鏋氫妇涓枃鍚嶇О
+	*/
+	private String enumname;
+
+
+	/**
+	* 鏋氫妇鏄惁鍙互缂栬緫
+	*/
+	private String enumeditflag;
+
+
+	/**
+	* 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	*/
+	private String referbtmid;
+
+
+	/**
+	* 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	*/
+	private String referbtmname;
+
+
+	/**
+	* 鍙傜収绐楀彛閰嶇疆
+	*/
+	private String referConfig;
+
+
+	/**
+	* 鏄惁蹇呰緭
+	*/
+	private String requireflag;
+
+
+	/**
+	* 鏄惁鍙
+	*/
+	private String readonlyflag;
+
+
+	/**
+	* 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	*/
+	private Integer controllength;
+
+
+	/**
+	* 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	*/
+	private String formdisplaystyle;
+
+
+	/**
+	* 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	*/
+	private String tabledisplaystyle;
+
+
+	/**
+	* 琛ㄥ崟涓秴閾炬帴鍐呭
+	*/
+	private String formhref;
+
+
+	/**
+	* 琛ㄦ牸涓秴閾炬帴鍐呭
+	*/
+	private String tablehref;
+
+
+	/**
+	* 灏忔暟绮惧害
+	*/
+	private Integer precisionlength;
+
+
+	/**
+	* 灏忔暟鍒诲害
+	*/
+	private Integer scalelength;
+
+
+	/**
+	* 鍙栧�艰寖鍥�
+	*/
+	private String valuearea;
+
+
+	/**
+	* 鏃堕棿鏍煎紡
+	*/
+	private String codedateformat;
+
+
+	/**
+	* 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	*/
+	private String tabledisplayjs;
+
+
+	/**
+	* 鏄惁鏄剧ず澶氳鏂囨湰
+	*/
+	private String textareaflag;
+
+
+	/**
+	* 棰勮鍥�
+	*/
+	private String imageflag;
+
+
+	/**
+	* 榛樿鍊�
+	*/
+	private String defaultvalue;
+
+
+	/**
+	* 鍓嶇紑
+	*/
+	private String prefixvalue;
+
+
+	/**
+	* 鍚庣紑
+	*/
+	private String suffixvalue;
+
+
+	/**
+	* 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	*/
+	private String filtersourceattr;
+
+
+	/**
+	* 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	*/
+	private String filtersourceattrname;
+
+	/**
+	 * 浣跨敤鏋氫妇娉ㄥ叆鐨勫瓧绗︿覆鏍煎紡
+	 */
+	private String enumString;
+
+	/**
+	 * 灞炴�у垪琛ㄤ腑鐨勫搴�
+	 */
+	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;
+
+	public String getExplain() {
+		return explain;
+	}
+
+	public void setExplain(String explain) {
+		this.explain = explain;
+	}
+
+	public String getLibraryIdentification() {
+		return libraryIdentification;
+	}
+
+	public void setLibraryIdentification(String libraryIdentification) {
+		this.libraryIdentification = libraryIdentification;
+	}
+
+	public String getParentCode() {
+		return parentCode;
+	}
+
+	public void setParentCode(String parentCode) {
+		this.parentCode = parentCode;
+	}
+
+	public String getParentName() {
+		return parentName;
+	}
+
+	public void setParentName(String parentName) {
+		this.parentName = parentName;
+	}
+
+	public String getParentQueryAttr() {
+		return parentQueryAttr;
+	}
+
+	public void setParentQueryAttr(String parentQueryAttr) {
+		this.parentQueryAttr = parentQueryAttr;
+	}
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifytemplateoid (){
+		return classifytemplateoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炴ā鏉�
+	*/
+	public void setClassifytemplateoid (String classifytemplateoid){
+		this.classifytemplateoid = classifytemplateoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifytemplateoidName (){
+		return classifytemplateoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	public void setClassifytemplateoidName (String classifytemplateoidName){
+		this.classifytemplateoidName = classifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	 */
+	public String getClassifyattributeoid (){
+		return classifyattributeoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
+	*/
+	public void setClassifyattributeoid (String classifyattributeoid){
+		this.classifyattributeoid = classifyattributeoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	 */
+	public String getClassifyattributeoidName (){
+		return classifyattributeoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
+	*/
+	public void setClassifyattributeoidName (String classifyattributeoidName){
+		this.classifyattributeoidName = classifyattributeoidName;
+	}
+	/**
+	 * 鑾峰彇 灞炴�х殑绫诲瀷
+	 */
+	public String getAttributedatatype (){
+		return attributedatatype;
+	}
+
+	/**
+	* 璁剧疆 灞炴�х殑绫诲瀷
+	*/
+	public void setAttributedatatype (String attributedatatype){
+		this.attributedatatype = attributedatatype;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鍏抽敭灞炴��
+	 */
+	public String getKeyattrflag (){
+		return keyattrflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鍏抽敭灞炴��
+	*/
+	public void setKeyattrflag (String keyattrflag){
+		this.keyattrflag = keyattrflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇�熸煡璇㈠睘鎬�
+	 */
+	public String getQueryattrflag (){
+		return queryattrflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇�熸煡璇㈠睘鎬�
+	*/
+	public void setQueryattrflag (String queryattrflag){
+		this.queryattrflag = queryattrflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁楂樼骇鏌ヨ灞炴��
+	 */
+	public String getSeniorqueryattrflag (){
+		return seniorqueryattrflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁楂樼骇鏌ヨ灞炴��
+	*/
+	public void setSeniorqueryattrflag (String seniorqueryattrflag){
+		this.seniorqueryattrflag = seniorqueryattrflag;
+	}
+	/**
+	 * 鑾峰彇 鐩镐技鏌ラ噸灞炴��
+	 */
+	public String getSamerepeatattrflag (){
+		return samerepeatattrflag;
+	}
+
+	/**
+	* 璁剧疆 鐩镐技鏌ラ噸灞炴��
+	*/
+	public void setSamerepeatattrflag (String samerepeatattrflag){
+		this.samerepeatattrflag = samerepeatattrflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鎺掑簭
+	 */
+	public String getSortattrflag (){
+		return sortattrflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鎺掑簭
+	*/
+	public void setSortattrflag (String sortattrflag){
+		this.sortattrflag = sortattrflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鐢熸垚浜岀淮鐮�
+	 */
+	public String getQrcodeflag (){
+		return qrcodeflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鐢熸垚浜岀淮鐮�
+	*/
+	public void setQrcodeflag (String qrcodeflag){
+		this.qrcodeflag = qrcodeflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鐢熸垚涓�缁寸爜
+	 */
+	public String getBarcodeflag (){
+		return barcodeflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鐢熸垚涓�缁寸爜
+	*/
+	public void setBarcodeflag (String barcodeflag){
+		this.barcodeflag = barcodeflag;
+	}
+	/**
+	 * 鑾峰彇 缁勫悎瑙勫垯
+	 */
+	public String getComponentrule (){
+		return componentrule;
+	}
+
+	/**
+	* 璁剧疆 缁勫悎瑙勫垯
+	*/
+	public void setComponentrule (String componentrule){
+		this.componentrule = componentrule;
+	}
+	/**
+	 * 鑾峰彇 楠岃瘉瑙勫垯
+	 */
+	public String getVerifyrule (){
+		return verifyrule;
+	}
+
+	/**
+	* 璁剧疆 楠岃瘉瑙勫垯
+	*/
+	public void setVerifyrule (String verifyrule){
+		this.verifyrule = verifyrule;
+	}
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆灞傜骇
+	 */
+	public String getClassifyinvokelevel (){
+		return classifyinvokelevel;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被娉ㄥ叆灞傜骇
+	*/
+	public void setClassifyinvokelevel (String classifyinvokelevel){
+		this.classifyinvokelevel = classifyinvokelevel;
+	}
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	 */
+	public String getClassifyinvokeattr (){
+		return classifyinvokeattr;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
+	*/
+	public void setClassifyinvokeattr (String classifyinvokeattr){
+		this.classifyinvokeattr = classifyinvokeattr;
+	}
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	 */
+	public String getClassifyinvokeattrname (){
+		return classifyinvokeattrname;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+	*/
+	public void setClassifyinvokeattrname (String classifyinvokeattrname){
+		this.classifyinvokeattrname = classifyinvokeattrname;
+	}
+	/**
+	 * 鑾峰彇 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	 */
+	public String getClassifyinvokeeditflag (){
+		return classifyinvokeeditflag;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+	*/
+	public void setClassifyinvokeeditflag (String classifyinvokeeditflag){
+		this.classifyinvokeeditflag = classifyinvokeeditflag;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 鐮佸�煎簭鍙�
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+	/**
+	 * 鑾峰彇 琛ㄥ崟閲屾槸鍚︽樉绀�
+	 */
+	public String getFormdisplayflag (){
+		return formdisplayflag;
+	}
+
+	/**
+	* 璁剧疆 琛ㄥ崟閲屾槸鍚︽樉绀�
+	*/
+	public void setFormdisplayflag (String formdisplayflag){
+		this.formdisplayflag = formdisplayflag;
+	}
+	/**
+	 * 鑾峰彇 鍒楄〃閲屾槸鍚︽樉绀�
+	 */
+	public String getTabledisplayflag (){
+		return tabledisplayflag;
+	}
+
+	/**
+	* 璁剧疆 鍒楄〃閲屾槸鍚︽樉绀�
+	*/
+	public void setTabledisplayflag (String tabledisplayflag){
+		this.tabledisplayflag = tabledisplayflag;
+	}
+	/**
+	 * 鑾峰彇 鎵�灞炲睘鎬у垎缁�
+	 */
+	public String getAttributegroup (){
+		return attributegroup;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炲睘鎬у垎缁�
+	*/
+	public void setAttributegroup (String attributegroup){
+		this.attributegroup = attributegroup;
+	}
+	/**
+	 * 鑾峰彇 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	 */
+	public String getEnumid (){
+		return enumid;
+	}
+
+	/**
+	* 璁剧疆 浣跨敤鏋氫妇鑻辨枃缂栧彿
+	*/
+	public void setEnumid (String enumid){
+		this.enumid = enumid;
+	}
+	/**
+	 * 鑾峰彇 浣跨敤鏋氫妇涓枃鍚嶇О
+	 */
+	public String getEnumname (){
+		return enumname;
+	}
+
+	/**
+	* 璁剧疆 浣跨敤鏋氫妇涓枃鍚嶇О
+	*/
+	public void setEnumname (String enumname){
+		this.enumname = enumname;
+	}
+	/**
+	 * 鑾峰彇 鏋氫妇鏄惁鍙互缂栬緫
+	 */
+	public String getEnumeditflag (){
+		return enumeditflag;
+	}
+
+	/**
+	* 璁剧疆 鏋氫妇鏄惁鍙互缂栬緫
+	*/
+	public void setEnumeditflag (String enumeditflag){
+		this.enumeditflag = enumeditflag;
+	}
+	/**
+	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	 */
+	public String getReferbtmid (){
+		return referbtmid;
+	}
+
+	/**
+	* 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
+	*/
+	public void setReferbtmid (String referbtmid){
+		this.referbtmid = referbtmid;
+	}
+	/**
+	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	 */
+	public String getReferbtmname (){
+		return referbtmname;
+	}
+
+	/**
+	* 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	*/
+	public void setReferbtmname (String referbtmname){
+		this.referbtmname = referbtmname;
+	}
+
+	public String getReferConfig() {
+		return referConfig;
+	}
+
+	public void setReferConfig(String referConfig) {
+		this.referConfig = referConfig;
+	}
+
+	/**
+
+	/**
+	 * 鑾峰彇 鏄惁蹇呰緭
+	 */
+	public String getRequireflag (){
+		return requireflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇呰緭
+	*/
+	public void setRequireflag (String requireflag){
+		this.requireflag = requireflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鍙
+	 */
+	public String getReadonlyflag (){
+		return readonlyflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鍙
+	*/
+	public void setReadonlyflag (String readonlyflag){
+		this.readonlyflag = readonlyflag;
+	}
+	/**
+	 * 鑾峰彇 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	 */
+	public Integer getControllength (){
+		return controllength;
+	}
+
+	/**
+	* 璁剧疆 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+	*/
+	public void setControllength (Integer controllength){
+		this.controllength = controllength;
+	}
+	/**
+	 * 鑾峰彇 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	 */
+	public String getFormdisplaystyle (){
+		return formdisplaystyle;
+	}
+
+	/**
+	* 璁剧疆 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
+	*/
+	public void setFormdisplaystyle (String formdisplaystyle){
+		this.formdisplaystyle = formdisplaystyle;
+	}
+	/**
+	 * 鑾峰彇 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	 */
+	public String getTabledisplaystyle (){
+		return tabledisplaystyle;
+	}
+
+	/**
+	* 璁剧疆 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+	*/
+	public void setTabledisplaystyle (String tabledisplaystyle){
+		this.tabledisplaystyle = tabledisplaystyle;
+	}
+	/**
+	 * 鑾峰彇 琛ㄥ崟涓秴閾炬帴鍐呭
+	 */
+	public String getFormhref (){
+		return formhref;
+	}
+
+	/**
+	* 璁剧疆 琛ㄥ崟涓秴閾炬帴鍐呭
+	*/
+	public void setFormhref (String formhref){
+		this.formhref = formhref;
+	}
+	/**
+	 * 鑾峰彇 琛ㄦ牸涓秴閾炬帴鍐呭
+	 */
+	public String getTablehref (){
+		return tablehref;
+	}
+
+	/**
+	* 璁剧疆 琛ㄦ牸涓秴閾炬帴鍐呭
+	*/
+	public void setTablehref (String tablehref){
+		this.tablehref = tablehref;
+	}
+	/**
+	 * 鑾峰彇 灏忔暟绮惧害
+	 */
+	public Integer getPrecisionlength (){
+		return precisionlength;
+	}
+
+	/**
+	* 璁剧疆 灏忔暟绮惧害
+	*/
+	public void setPrecisionlength (Integer precisionlength){
+		this.precisionlength = precisionlength;
+	}
+	/**
+	 * 鑾峰彇 灏忔暟鍒诲害
+	 */
+	public Integer getScalelength (){
+		return scalelength;
+	}
+
+	/**
+	* 璁剧疆 灏忔暟鍒诲害
+	*/
+	public void setScalelength (Integer scalelength){
+		this.scalelength = scalelength;
+	}
+	/**
+	 * 鑾峰彇 鍙栧�艰寖鍥�
+	 */
+	public String getValuearea (){
+		return valuearea;
+	}
+
+	/**
+	* 璁剧疆 鍙栧�艰寖鍥�
+	*/
+	public void setValuearea (String valuearea){
+		this.valuearea = valuearea;
+	}
+	/**
+	 * 鑾峰彇 鏃堕棿鏍煎紡
+	 */
+	public String getCodedateformat (){
+		return codedateformat;
+	}
+
+	/**
+	* 璁剧疆 鏃堕棿鏍煎紡
+	*/
+	public void setCodedateformat (String codedateformat){
+		this.codedateformat = codedateformat;
+	}
+	/**
+	 * 鑾峰彇 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	 */
+	public String getTabledisplayjs (){
+		return tabledisplayjs;
+	}
+
+	/**
+	* 璁剧疆 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
+	*/
+	public void setTabledisplayjs (String tabledisplayjs){
+		this.tabledisplayjs = tabledisplayjs;
+	}
+	/**
+	 * 鑾峰彇 鏄惁鏄剧ず澶氳鏂囨湰
+	 */
+	public String getTextareaflag (){
+		return textareaflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁鏄剧ず澶氳鏂囨湰
+	*/
+	public void setTextareaflag (String textareaflag){
+		this.textareaflag = textareaflag;
+	}
+	/**
+	 * 鑾峰彇 棰勮鍥�
+	 */
+	public String getImageflag (){
+		return imageflag;
+	}
+
+	/**
+	* 璁剧疆 棰勮鍥�
+	*/
+	public void setImageflag (String imageflag){
+		this.imageflag = imageflag;
+	}
+	/**
+	 * 鑾峰彇 榛樿鍊�
+	 */
+	public String getDefaultvalue (){
+		return defaultvalue;
+	}
+
+	/**
+	* 璁剧疆 榛樿鍊�
+	*/
+	public void setDefaultvalue (String defaultvalue){
+		this.defaultvalue = defaultvalue;
+	}
+	/**
+	 * 鑾峰彇 鍓嶇紑
+	 */
+	public String getPrefixvalue (){
+		return prefixvalue;
+	}
+
+	/**
+	* 璁剧疆 鍓嶇紑
+	*/
+	public void setPrefixvalue (String prefixvalue){
+		this.prefixvalue = prefixvalue;
+	}
+	/**
+	 * 鑾峰彇 鍚庣紑
+	 */
+	public String getSuffixvalue (){
+		return suffixvalue;
+	}
+
+	/**
+	* 璁剧疆 鍚庣紑
+	*/
+	public void setSuffixvalue (String suffixvalue){
+		this.suffixvalue = suffixvalue;
+	}
+	/**
+	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	 */
+	public String getFiltersourceattr (){
+		return filtersourceattr;
+	}
+
+	public String getAttributeDataTypeText() {
+		return attributeDataTypeText;
+	}
+
+	public void setAttributeDataTypeText(String attributeDataTypeText) {
+		this.attributeDataTypeText = attributeDataTypeText;
+	}
+
+	/**
+	* 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+	*/
+	public void setFiltersourceattr (String filtersourceattr){
+		this.filtersourceattr = filtersourceattr;
+	}
+	/**
+	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	 */
+	public String getFiltersourceattrname (){
+		return filtersourceattrname;
+	}
+
+	/**
+	* 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+	*/
+	public void setFiltersourceattrname (String filtersourceattrname){
+		this.filtersourceattrname = filtersourceattrname;
+	}
+
+	public String getEnumString() {
+		return enumString;
+	}
+
+	public void setEnumString(String enumString) {
+		this.enumString = enumString;
+	}
+
+
+	public Integer getAttrTableWidth() {
+		return attrTableWidth;
+	}
+
+	public void setAttrTableWidth(Integer attrTableWidth) {
+		this.attrTableWidth = attrTableWidth;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateAttrVO{" +
+				"classifytemplateoid='" + classifytemplateoid + '\'' +
+				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
+				", classifyattributeoid='" + classifyattributeoid + '\'' +
+				", classifyattributeoidName='" + classifyattributeoidName + '\'' +
+				", attributedatatype='" + attributedatatype + '\'' +
+				", attributeDataTypeText='" + attributeDataTypeText + '\'' +
+				", keyattrflag='" + keyattrflag + '\'' +
+				", queryattrflag='" + queryattrflag + '\'' +
+				", seniorqueryattrflag='" + seniorqueryattrflag + '\'' +
+				", samerepeatattrflag='" + samerepeatattrflag + '\'' +
+				", sortattrflag='" + sortattrflag + '\'' +
+				", qrcodeflag='" + qrcodeflag + '\'' +
+				", barcodeflag='" + barcodeflag + '\'' +
+				", componentrule='" + componentrule + '\'' +
+				", verifyrule='" + verifyrule + '\'' +
+				", classifyinvokelevel='" + classifyinvokelevel + '\'' +
+				", classifyinvokeattr='" + classifyinvokeattr + '\'' +
+				", classifyinvokeattrname='" + classifyinvokeattrname + '\'' +
+				", classifyinvokeeditflag='" + classifyinvokeeditflag + '\'' +
+				", ordernum=" + ordernum +
+				", formdisplayflag='" + formdisplayflag + '\'' +
+				", tabledisplayflag='" + tabledisplayflag + '\'' +
+				", attributegroup='" + attributegroup + '\'' +
+				", enumid='" + enumid + '\'' +
+				", enumname='" + enumname + '\'' +
+				", enumeditflag='" + enumeditflag + '\'' +
+				", referbtmid='" + referbtmid + '\'' +
+				", referbtmname='" + referbtmname + '\'' +
+				", referConfig='" + referConfig + '\'' +
+				", requireflag='" + requireflag + '\'' +
+				", readonlyflag='" + readonlyflag + '\'' +
+				", controllength=" + controllength +
+				", formdisplaystyle='" + formdisplaystyle + '\'' +
+				", tabledisplaystyle='" + tabledisplaystyle + '\'' +
+				", formhref='" + formhref + '\'' +
+				", tablehref='" + tablehref + '\'' +
+				", precisionlength=" + precisionlength +
+				", scalelength=" + scalelength +
+				", valuearea='" + valuearea + '\'' +
+				", codedateformat='" + codedateformat + '\'' +
+				", tabledisplayjs='" + tabledisplayjs + '\'' +
+				", textareaflag='" + textareaflag + '\'' +
+				", imageflag='" + imageflag + '\'' +
+				", defaultvalue='" + defaultvalue + '\'' +
+				", prefixvalue='" + prefixvalue + '\'' +
+				", suffixvalue='" + suffixvalue + '\'' +
+				", filtersourceattr='" + filtersourceattr + '\'' +
+				", filtersourceattrname='" + filtersourceattrname + '\'' +
+				", enumString='" + enumString + '\'' +
+				", attrTableWidth=" + attrTableWidth +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
new file mode 100644
index 0000000..13fe415
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
@@ -0,0 +1,170 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateButtonVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118535405378L;
+
+	/**
+	* 鎵�灞炴ā鏉�
+	*/
+	private String classifytemplateoid;
+
+	/**
+	* 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	private String classifytemplateoidName;
+
+	/**
+	* 鎸夐挳鐨勪富閿�
+	*/
+	private String classifybuttonoid;
+
+	/**
+	* 鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	*/
+	private String classifybuttonoidName;
+
+	/**
+	* 鎸夐挳鐢ㄩ��
+	*/
+	private String buttonuse;
+
+	/**
+	 * 鎸夐挳鐢ㄩ�旀樉绀哄璞�
+	 */
+	private String buttonUseText;
+
+
+	/**
+	* 鐮佸�煎簭鍙�
+	*/
+	private Integer ordernum;
+
+	/**
+	 * 鎸夐挳鐨勭浉鍏冲唴瀹�
+	 */
+	private CodeButtonVO buttonVO;
+
+
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifytemplateoid (){
+		return classifytemplateoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炴ā鏉�
+	*/
+	public void setClassifytemplateoid (String classifytemplateoid){
+		this.classifytemplateoid = classifytemplateoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifytemplateoidName (){
+		return classifytemplateoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	public void setClassifytemplateoidName (String classifytemplateoidName){
+		this.classifytemplateoidName = classifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 鎸夐挳鐨勪富閿�
+	 */
+	public String getClassifybuttonoid (){
+		return classifybuttonoid;
+	}
+
+	/**
+	* 璁剧疆 鎸夐挳鐨勪富閿�
+	*/
+	public void setClassifybuttonoid (String classifybuttonoid){
+		this.classifybuttonoid = classifybuttonoid;
+	}
+	/**
+	 * 鑾峰彇鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	 */
+	public String getClassifybuttonoidName (){
+		return classifybuttonoidName;
+	}
+
+	/**
+	* 璁剧疆鎸夐挳鐨勪富閿樉绀烘枃鏈�
+	*/
+	public void setClassifybuttonoidName (String classifybuttonoidName){
+		this.classifybuttonoidName = classifybuttonoidName;
+	}
+	/**
+	 * 鑾峰彇 鎸夐挳鐢ㄩ��
+	 */
+	public String getButtonuse (){
+		return buttonuse;
+	}
+
+	/**
+	* 璁剧疆 鎸夐挳鐢ㄩ��
+	*/
+	public void setButtonuse (String buttonuse){
+		this.buttonuse = buttonuse;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 鐮佸�煎簭鍙�
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	public String getButtonUseText() {
+		return buttonUseText;
+	}
+
+	public void setButtonUseText(String buttonUseText) {
+		this.buttonUseText = buttonUseText;
+	}
+
+	public CodeButtonVO getButtonVO() {
+		return buttonVO;
+	}
+
+	public void setButtonVO(CodeButtonVO buttonVO) {
+		this.buttonVO = buttonVO;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateButtonVO{" +
+				"classifytemplateoid='" + classifytemplateoid + '\'' +
+				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
+				", classifybuttonoid='" + classifybuttonoid + '\'' +
+				", classifybuttonoidName='" + classifybuttonoidName + '\'' +
+				", buttonuse='" + buttonuse + '\'' +
+				", buttonUseText='" + buttonUseText + '\'' +
+				", ordernum=" + ordernum +
+				", buttonVO=" + buttonVO +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateMapVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateMapVO.java
new file mode 100644
index 0000000..893fd17
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateMapVO.java
@@ -0,0 +1,96 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateMapVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120808516800L;
+
+	/**
+	* 鎵�灞炴ā鏉�
+	*/
+	private String classifyTemplateOid;
+
+	/**
+	* 鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	private String classifyTemplateName;
+
+	/**
+	* 鏄犲皠瑙勫垯绫诲瀷
+	*/
+	private String codemapruletype;
+
+
+	/**
+	* 鏄犲皠瑙勫垯绫诲瀷鏄剧ず鏂囨湰
+	*/
+	private String codemapruletypeText;
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉�
+	 */
+	public String getClassifyTemplateOid (){
+		return classifyTemplateOid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炴ā鏉�
+	*/
+	public void setClassifyTemplateOid (String classifyTemplateOid){
+		this.classifyTemplateOid = classifyTemplateOid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	 */
+	public String getClassifyTemplateName (){
+		return classifyTemplateName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
+	*/
+	public void setClassifyTemplateName (String classifyTemplateName){
+		this.classifyTemplateName = classifyTemplateName;
+	}
+	/**
+	 * 鑾峰彇 鏄犲皠瑙勫垯绫诲瀷
+	 */
+	public String getCodemapruletype (){
+		return codemapruletype;
+	}
+
+	/**
+	* 璁剧疆 鏄犲皠瑙勫垯绫诲瀷
+	*/
+	public void setCodemapruletype (String codemapruletype){
+		this.codemapruletype = codemapruletype;
+	}
+
+	public String getCodemapruletypeText() {
+		return codemapruletypeText;
+	}
+
+	public void setCodemapruletypeText(String codemapruletypeText) {
+		this.codemapruletypeText = codemapruletypeText;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateMapVO{" +
+				"classifytemplateoid='" + classifyTemplateOid + '\'' +
+				", classifytemplateoidName='" + classifyTemplateName + '\'' +
+				", codemapruletype='" + codemapruletype + '\'' +
+				", codemapruletypeText='" + codemapruletypeText + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateVO.java
new file mode 100644
index 0000000..84e5c05
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyTemplateVO.java
@@ -0,0 +1,105 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyTemplateVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118684061936L;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿�
+	*/
+	private String codeclassifyoid;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	private String codeclassifyoidName;
+
+	/**
+	 * 鍖呭惈鐨勫睘鎬у唴瀹�
+	 */
+	private List<CodeClassifyTemplateAttrVO> attributes;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨�
+	 */
+	private String btmTypeId;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+	 */
+	private String btmTypeName;
+
+	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 getCodeclassifyoid (){
+		return codeclassifyoid;
+	}
+
+	/**
+	* 璁剧疆 涓婚搴撳垎绫讳富閿�
+	*/
+	public void setCodeclassifyoid (String codeclassifyoid){
+		this.codeclassifyoid = codeclassifyoid;
+	}
+	/**
+	 * 鑾峰彇涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	 */
+	public String getCodeclassifyoidName (){
+		return codeclassifyoidName;
+	}
+
+	/**
+	* 璁剧疆涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	public void setCodeclassifyoidName (String codeclassifyoidName){
+		this.codeclassifyoidName = codeclassifyoidName;
+	}
+
+	public List<CodeClassifyTemplateAttrVO> getAttributes() {
+		return attributes;
+	}
+
+	public void setAttributes(List<CodeClassifyTemplateAttrVO> attributes) {
+		this.attributes = attributes;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateVO{" +
+				"codeclassifyoid='" + codeclassifyoid + '\'' +
+				", codeclassifyoidName='" + codeclassifyoidName + '\'' +
+				", attributes=" + attributes +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyVO.java
new file mode 100644
index 0000000..7679381
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyVO.java
@@ -0,0 +1,263 @@
+package org.springblade.code.vo.pagemodel;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 涓婚搴撳垎绫绘樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+public class CodeClassifyVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119254063830L;
+
+	/**
+	* 灞炴�ф帓搴忓彿
+	*/
+	private Integer ordernum;
+
+
+	/**
+	* 鎵�灞炰笟鍔$被鍨�
+	*/
+	private String btmtypeid;
+
+
+	/**
+	* 鎵�灞炰笟鍔$被鍨嬪悕绉�
+	*/
+	private String btmtypename;
+
+
+	/**
+	* 缂栫爜瑙勫垯鐨勪富閿�
+	*/
+	private String coderuleoid;
+
+	/**
+	* 缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	*/
+	private String coderuleoidName;
+
+	/**
+	* 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	*/
+	private String codekeyattrrepeatoid;
+
+	/**
+	* 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	*/
+	private String codekeyattrrepeatoidName;
+
+	/**
+	* 涓婄骇鏁版嵁鐨勪富閿�
+	*/
+	private String parentcodeclassifyoid;
+
+	/**
+	 * 鏁版嵁鎵�鍦ㄧ殑灞傜骇
+	 */
+	private Integer dataLevel;
+
+	/**
+	 * 灞傜骇鐨勮矾寰�
+	 */
+	private String path;
+
+	/***
+	 * 鍚嶇О璺緞
+	 */
+	private String namePath;
+	/***
+	 * 浠g爜璺緞
+	 */
+	private String idPath;
+
+	/**
+	 * 鐩镐技鏌ヨ瑙勫垯涓婚敭
+	 */
+	private String codeResembleRuleOid;
+
+	/**
+	 * 鐩镐技鏌ヨ瑙勫垯鍚嶇О
+	 */
+	private String codeResembleRuleOidName;
+
+	public String getCodeResembleRuleOid() {
+		return codeResembleRuleOid;
+	}
+
+	public void setCodeResembleRuleOid(String codeResembleRuleOid) {
+		this.codeResembleRuleOid = codeResembleRuleOid;
+	}
+
+	public String getCodeResembleRuleOidName() {
+		return codeResembleRuleOidName;
+	}
+
+	public void setCodeResembleRuleOidName(String codeResembleRuleOidName) {
+		this.codeResembleRuleOidName = codeResembleRuleOidName;
+	}
+
+	/**
+	 * 鑾峰彇 灞炴�ф帓搴忓彿
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 灞炴�ф帓搴忓彿
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+	/**
+	 * 鑾峰彇 鎵�灞炰笟鍔$被鍨�
+	 */
+	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 getCoderuleoid (){
+		return coderuleoid;
+	}
+
+	/**
+	* 璁剧疆 缂栫爜瑙勫垯鐨勪富閿�
+	*/
+	public void setCoderuleoid (String coderuleoid){
+		this.coderuleoid = coderuleoid;
+	}
+	/**
+	 * 鑾峰彇缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	 */
+	public String getCoderuleoidName (){
+		return coderuleoidName;
+	}
+
+	/**
+	* 璁剧疆缂栫爜瑙勫垯鐨勪富閿樉绀烘枃鏈�
+	*/
+	public void setCoderuleoidName (String coderuleoidName){
+		this.coderuleoidName = coderuleoidName;
+	}
+	/**
+	 * 鑾峰彇 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	 */
+	public String getCodekeyattrrepeatoid (){
+		return codekeyattrrepeatoid;
+	}
+
+	/**
+	* 璁剧疆 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+	*/
+	public void setCodekeyattrrepeatoid (String codekeyattrrepeatoid){
+		this.codekeyattrrepeatoid = codekeyattrrepeatoid;
+	}
+	/**
+	 * 鑾峰彇鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	 */
+	public String getCodekeyattrrepeatoidName (){
+		return codekeyattrrepeatoidName;
+	}
+
+	/**
+	* 璁剧疆鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鏄剧ず鏂囨湰
+	*/
+	public void setCodekeyattrrepeatoidName (String codekeyattrrepeatoidName){
+		this.codekeyattrrepeatoidName = codekeyattrrepeatoidName;
+	}
+	/**
+	 * 鑾峰彇 涓婄骇鏁版嵁鐨勪富閿�
+	 */
+	public String getParentcodeclassifyoid (){
+		return parentcodeclassifyoid;
+	}
+
+	/**
+	* 璁剧疆 涓婄骇鏁版嵁鐨勪富閿�
+	*/
+	public void setParentcodeclassifyoid (String parentcodeclassifyoid){
+		this.parentcodeclassifyoid = parentcodeclassifyoid;
+	}
+
+	public Integer getDataLevel() {
+		return dataLevel;
+	}
+
+	public void setDataLevel(Integer dataLevel) {
+		this.dataLevel = dataLevel;
+	}
+
+	public String getPath() {
+		return path;
+	}
+
+	public void setPath(String path) {
+		this.path = path;
+	}
+
+	public String getNamePath() {
+		return namePath;
+	}
+
+	public void setNamePath(String namePath) {
+		this.namePath = namePath;
+	}
+
+	public String getIdPath() {
+		return idPath;
+	}
+
+	public void setIdPath(String idPath) {
+		this.idPath = idPath;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyVO{" +
+				"ordernum=" + ordernum +
+				", btmtypeid='" + btmtypeid + '\'' +
+				", btmtypename='" + btmtypename + '\'' +
+				", coderuleoid='" + coderuleoid + '\'' +
+				", coderuleoidName='" + coderuleoidName + '\'' +
+				", codekeyattrrepeatoid='" + codekeyattrrepeatoid + '\'' +
+				", codekeyattrrepeatoidName='" + codekeyattrrepeatoidName + '\'' +
+				", parentcodeclassifyoid='" + parentcodeclassifyoid + '\'' +
+				", dataLevel=" + dataLevel +
+				", path='" + path + '\'' +
+				", namePath='" + namePath + '\'' +
+				", idPath='" + idPath + '\'' +
+				", codeResembleRuleOid='" + codeResembleRuleOid + '\'' +
+				", codeResembleRuleOidName='" + codeResembleRuleOidName + '\'' +
+				'}';
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyValueVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyValueVO.java
new file mode 100644
index 0000000..19cfe39
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeClassifyValueVO.java
@@ -0,0 +1,133 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeClassifyValueVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117941539567L;
+
+	/**
+	* 鍒嗙被鐮佹涓婚敭
+	*/
+	private String codeclassifysecoid;
+
+	/**
+	* 鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	*/
+	private String codeclassifysecoidName;
+
+	/**
+	* 鐮佸�煎簭鍙�
+	*/
+	private Integer ordernum;
+
+	/**
+	* 涓婄骇鍒嗙被鐮佸�间富閿�
+	*/
+	private String parentclassifyvalueoid;
+
+	/**
+	 * 鍒嗙被鐮佸�间腑鐨勭紪鍙�
+	 */
+	private String id;
+
+	/**
+	 * 鍒嗙被鐮佸�间腑鐨勫悕绉�
+	 */
+	private String name;
+
+	/**
+	 * 鑾峰彇 鍒嗙被鐮佹涓婚敭
+	 */
+	public String getCodeclassifysecoid (){
+		return codeclassifysecoid;
+	}
+
+	/**
+	* 璁剧疆 鍒嗙被鐮佹涓婚敭
+	*/
+	public void setCodeclassifysecoid (String codeclassifysecoid){
+		this.codeclassifysecoid = codeclassifysecoid;
+	}
+	/**
+	 * 鑾峰彇鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getCodeclassifysecoidName (){
+		return codeclassifysecoidName;
+	}
+
+	/**
+	* 璁剧疆鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
+	*/
+	public void setCodeclassifysecoidName (String codeclassifysecoidName){
+		this.codeclassifysecoidName = codeclassifysecoidName;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 鐮佸�煎簭鍙�
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+	/**
+	 * 鑾峰彇 涓婄骇鍒嗙被鐮佸�间富閿�
+	 */
+	public String getParentclassifyvalueoid (){
+		return parentclassifyvalueoid;
+	}
+
+	/**
+	* 璁剧疆 涓婄骇鍒嗙被鐮佸�间富閿�
+	*/
+	public void setParentclassifyvalueoid (String parentclassifyvalueoid){
+		this.parentclassifyvalueoid = parentclassifyvalueoid;
+	}
+
+	@Override
+	public String getId() {
+		return id;
+	}
+
+	@Override
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	@Override
+	public String getName() {
+		return name;
+	}
+
+	@Override
+	public void setName(String name) {
+		this.name = name;
+	}
+
+
+	@Override
+	public String toString() {
+		return "CodeClassifyValueVO{" +
+				"codeclassifysecoid='" + codeclassifysecoid + '\'' +
+				", codeclassifysecoidName='" + codeclassifysecoidName + '\'' +
+				", ordernum=" + ordernum +
+				", parentclassifyvalueoid='" + parentclassifyvalueoid + '\'' +
+				", id='" + id + '\'' +
+				", name='" + name + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeFixedValueVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeFixedValueVO.java
new file mode 100644
index 0000000..e68aefc
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeFixedValueVO.java
@@ -0,0 +1,83 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeFixedValueVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117767594607L;
+
+	/**
+	* 鍥哄畾鐮佹涓婚敭
+	*/
+	private String codefixedsecoid;
+
+	/**
+	* 鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	*/
+	private String codefixedsecoidName;
+
+	/**
+	* 鐮佸�煎簭鍙�
+	*/
+	private Integer ordernum;
+
+
+
+	/**
+	 * 鑾峰彇 鍥哄畾鐮佹涓婚敭
+	 */
+	public String getCodefixedsecoid (){
+		return codefixedsecoid;
+	}
+
+	/**
+	* 璁剧疆 鍥哄畾鐮佹涓婚敭
+	*/
+	public void setCodefixedsecoid (String codefixedsecoid){
+		this.codefixedsecoid = codefixedsecoid;
+	}
+	/**
+	 * 鑾峰彇鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	 */
+	public String getCodefixedsecoidName (){
+		return codefixedsecoidName;
+	}
+
+	/**
+	* 璁剧疆鍥哄畾鐮佹涓婚敭鏄剧ず鏂囨湰
+	*/
+	public void setCodefixedsecoidName (String codefixedsecoidName){
+		this.codefixedsecoidName = codefixedsecoidName;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 鐮佸�煎簭鍙�
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeFixedValueVO{" +
+		"codefixedsecoid='" + codefixedsecoid +"'," +
+		"codefixedsecoidName='" + codefixedsecoidName +"'," +
+		"ordernum='" + ordernum +"'," +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImProtRusultVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImProtRusultVO.java
new file mode 100644
index 0000000..9681415
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImProtRusultVO.java
@@ -0,0 +1,41 @@
+package org.springblade.code.vo.pagemodel;
+
+public class CodeImProtRusultVO {
+
+    private String redisUuid;
+    private String fileOid="";
+    private String filePath;
+
+    public String getRedisUuid() {
+        return redisUuid;
+    }
+
+    public void setRedisUuid(String redisUuid) {
+        this.redisUuid = redisUuid;
+    }
+
+    public String getFileOid() {
+        return fileOid;
+    }
+
+    public void setFileOid(String fileOid) {
+        this.fileOid = fileOid;
+    }
+
+    public String getFilePath() {
+        return filePath;
+    }
+
+    public void setFilePath(String filePath) {
+        this.filePath = filePath;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImProtRusultVO{" +
+                "redisUuid='" + redisUuid + '\'' +
+                ", fileOid='" + fileOid + '\'' +
+                ", filePath='" + filePath + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportResultVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportResultVO.java
new file mode 100644
index 0000000..a2d227d
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportResultVO.java
@@ -0,0 +1,123 @@
+package org.springblade.code.vo.pagemodel;
+
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.*;
+
+/**
+ * 瀵煎叆缂栫爜淇℃伅鐨勬墽琛岀粨鏋�
+ * @author weidy
+ * @date 2022-3-6
+ */
+public class CodeImportResultVO implements java.io.Serializable{
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6938911732592877094L;
+
+    /**
+     * 鏄惁鎴愬姛鐨�
+     */
+    private boolean success ;
+    /**
+     * 鍏抽敭灞炴�ф牎楠岃鍒欑殑淇℃伅
+     */
+    private String keyAttrRuleInfo;
+
+    /**
+     * 鍏抽敭灞炴�ф牎楠屽悗锛岄噸澶嶇殑琛屽彿
+     */
+    private Set<String> keyAttrRepeatRowIndexList  = new HashSet<>();
+
+    /***
+     * 鏍规嵁鍏抽敭鐔熸倝鏌ヨ鐨勯噸澶嶇殑鏁版嵁瀵硅薄
+     */
+    private Map<String,  List<ClientBusinessObject>> indexTODataMap=new HashMap<>();
+
+    /**
+     * excel鑷韩閲嶅鐨勮鍙�
+     */
+    private Set<String> selfRepeatRowIndexList = new HashSet<>();
+
+    /**
+     * 鏁版嵁鐨勫唴瀹规湁绌虹殑琛屽彿
+     */
+    private Set<String> nullRowIndexList = new HashSet<>();
+
+    /**
+     * 娌℃湁閫氳繃楠岃瘉鐨勮鍙�
+     */
+    private Set<String> unPassVerifyRowIndexSet = new HashSet<>();
+
+    public Set<String> getUnPassVerifyRowIndexSet() {
+        return unPassVerifyRowIndexSet;
+    }
+
+    public void setUnPassVerifyRowIndexSet(Set<String> unPassVerifyRowIndexSet) {
+        this.unPassVerifyRowIndexSet = unPassVerifyRowIndexSet;
+    }
+
+    public Set<String> getNullRowIndexList() {
+        return nullRowIndexList;
+    }
+
+    public void setNullRowIndexList(Set<String> nullRowIndexList) {
+        this.nullRowIndexList = nullRowIndexList;
+    }
+
+    public String getKeyAttrRuleInfo() {
+        return keyAttrRuleInfo;
+    }
+
+    public void setKeyAttrRuleInfo(String keyAttrRuleInfo) {
+        this.keyAttrRuleInfo = keyAttrRuleInfo;
+    }
+
+    public Set<String> getKeyAttrRepeatRowIndexList() {
+        return keyAttrRepeatRowIndexList;
+    }
+
+    public void setKeyAttrRepeatRowIndexList(Set<String> keyAttrRepeatRowIndexList) {
+        this.keyAttrRepeatRowIndexList = keyAttrRepeatRowIndexList;
+    }
+
+    public Set<String> getSelfRepeatRowIndexList() {
+        return selfRepeatRowIndexList;
+    }
+
+    public void setSelfRepeatRowIndexList(Set<String> selfRepeatRowIndexList) {
+        this.selfRepeatRowIndexList = selfRepeatRowIndexList;
+    }
+
+    public Map<String,List<ClientBusinessObject>> getIndexTODataMap() {
+        return indexTODataMap;
+    }
+
+    public void setIndexTODataMap(Map<String, List<ClientBusinessObject>> indexTODataMap) {
+        this.indexTODataMap = indexTODataMap;
+    }
+
+    public boolean isSuccess() {
+        return success;
+    }
+
+    public void setSuccess(boolean success) {
+        this.success = success;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImportResultVO{" +
+                "success=" + success +
+                ", keyAttrRuleInfo='" + keyAttrRuleInfo + '\'' +
+                ", keyAttrRepeatRowIndexList=" + keyAttrRepeatRowIndexList +
+                ", indexTODataMap=" + indexTODataMap +
+                ", selfRepeatRowIndexList=" + selfRepeatRowIndexList +
+                ", nullRowIndexList=" + nullRowIndexList +
+                ", unPassVerifyRowIndexSet=" + unPassVerifyRowIndexSet +
+                '}';
+    }
+
+
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportTemplateVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportTemplateVO.java
new file mode 100644
index 0000000..8194569
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImportTemplateVO.java
@@ -0,0 +1,42 @@
+package org.springblade.code.vo.pagemodel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CodeImportTemplateVO {
+    private List<ColumnVO> cloNamesList=new ArrayList<>();
+    private CodeClassifyTemplateVO codeClassifyTemplateVO;
+    private CodeClassifyVO codeClassifyVO;
+    public List<ColumnVO> getCloNamesList() {
+        return cloNamesList;
+    }
+
+    public void setCloNamesList(List<ColumnVO> cloNamesList) {
+        this.cloNamesList = cloNamesList;
+    }
+
+    public CodeClassifyTemplateVO getCodeClassifyTemplateVO() {
+        return codeClassifyTemplateVO;
+    }
+
+    public void setCodeClassifyTemplateVO(CodeClassifyTemplateVO codeClassifyTemplateVO) {
+        this.codeClassifyTemplateVO = codeClassifyTemplateVO;
+    }
+
+    public CodeClassifyVO getCodeClassifyVO() {
+        return codeClassifyVO;
+    }
+
+    public void setCodeClassifyVO(CodeClassifyVO codeClassifyVO) {
+        this.codeClassifyVO = codeClassifyVO;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImportTemplateVO{" +
+                "cloNamesList=" + cloNamesList +
+                ", codeClassifyTemplateVO=" + codeClassifyTemplateVO +
+                ", codeClassifyVO=" + codeClassifyVO +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotDataVO.java
new file mode 100644
index 0000000..d669ea6
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotDataVO.java
@@ -0,0 +1,132 @@
+package org.springblade.code.vo.pagemodel;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/***
+ *
+ */
+public class CodeImprotDataVO implements Serializable {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1880155181507713247L;
+    /***
+     * 鏁版嵁鍦╡xecl涓殑浣嶇疆
+     */
+    private  String rowIndex;
+    /**
+     * 涓婚搴撳垎绫讳富閿�
+     */
+    private String codeClassifyOid;
+
+    /**
+     * 妯℃澘鐨勪富閿�
+     */
+    private String templateOid;
+    /**
+     * 缂栫爜瑙勫垯鐨勪富閿�
+     */
+    private String codeRuleOid;
+
+    /***
+     * 鍐呴儴瀛楁
+     */
+
+    private List<String> fields = new ArrayList();
+
+    /**
+     * 鍒楀悕
+     */
+    private List<String> colNames = new ArrayList();
+    /**
+     * 鏁版嵁
+     */
+    private List<Map<String,String>> datas = new ArrayList<>();
+    private CodeClassifyTemplateVO codeClassifyTemplateVO;
+    private CodeClassifyVO codeClassifyVO;
+
+    public CodeClassifyTemplateVO getCodeClassifyTemplateVO() {
+        return codeClassifyTemplateVO;
+    }
+
+    public void setCodeClassifyTemplateVO(CodeClassifyTemplateVO codeClassifyTemplateVO) {
+        this.codeClassifyTemplateVO = codeClassifyTemplateVO;
+    }
+
+    public CodeClassifyVO getCodeClassifyVO() {
+        return codeClassifyVO;
+    }
+
+    public void setCodeClassifyVO(CodeClassifyVO codeClassifyVO) {
+        this.codeClassifyVO = codeClassifyVO;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+    public String getTemplateOid() {
+        return templateOid;
+    }
+    public void setTemplateOid(String templateOid) {
+        this.templateOid = templateOid;
+    }
+    public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+    public List<Map<String, String>> getDatas() {
+        return datas;
+    }
+
+    public void setDatas(List<Map<String, String>> datas) {
+        this.datas = datas;
+    }
+
+    public List<String> getColNames() {
+        return colNames;
+    }
+
+    public void setColNames(List<String> colNames) {
+        this.colNames = colNames;
+    }
+
+    public String getRowIndex() {
+        return rowIndex;
+    }
+
+    public void setRowIndex(String rowIndex) {
+        this.rowIndex = rowIndex;
+    }
+
+    public List<String> getFields() {
+        return fields;
+    }
+
+    public void setFields(List<String> fields) {
+        this.fields = fields;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImprotDataVO{" +
+                "rowIndex='" + rowIndex + '\'' +
+                ", codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", templateOid='" + templateOid + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", fields=" + fields +
+                ", colNames=" + colNames +
+                ", datas=" + datas +
+                ", codeClassifyTemplateVO=" + codeClassifyTemplateVO +
+                ", codeClassifyVO=" + codeClassifyVO +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotParmaDatVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotParmaDatVO.java
new file mode 100644
index 0000000..8b9e211
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotParmaDatVO.java
@@ -0,0 +1,41 @@
+package org.springblade.code.vo.pagemodel;
+
+import java.util.List;
+
+public class CodeImprotParmaDatVO {
+    private List<CodeImprotSaveDatVO> codeImprotSaveDatVOList;
+    private String classifyAttr;
+    private Boolean isImprot;
+
+    public List<CodeImprotSaveDatVO> getCodeImprotSaveDatVOList() {
+        return codeImprotSaveDatVOList;
+    }
+
+    public void setCodeImprotSaveDatVOList(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList) {
+        this.codeImprotSaveDatVOList = codeImprotSaveDatVOList;
+    }
+
+    public String getClassifyAttr() {
+        return classifyAttr;
+    }
+
+    public void setClassifyAttr(String classifyAttr) {
+        this.classifyAttr = classifyAttr;
+    }
+
+    public Boolean getImprot() {
+        return isImprot;
+    }
+
+    public void setImprot(Boolean improt) {
+        isImprot = improt;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImprotParmaDatVO{" +
+                "codeImprotSaveDatVOList=" + codeImprotSaveDatVOList +
+                ", isImprot=" + isImprot +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotResembleVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotResembleVO.java
new file mode 100644
index 0000000..e3b1d6a
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotResembleVO.java
@@ -0,0 +1,66 @@
+package org.springblade.code.vo.pagemodel;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class CodeImprotResembleVO {
+    private String path;
+    private List<String> fields=new ArrayList<>();
+    private Map<String, String> conditionMap = new HashMap<>();
+    private List<String> rownIndex=new ArrayList<>();
+    private List<Map<String,String>>dataList=new ArrayList<>();
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public Map<String, String> getConditionMap() {
+        return conditionMap;
+    }
+
+    public void setConditionMap(Map<String, String> conditionMap) {
+        this.conditionMap = conditionMap;
+    }
+
+    public List<String> getRownIndex() {
+        return rownIndex;
+    }
+
+    public void setRownIndex(List<String> rownIndex) {
+        this.rownIndex = rownIndex;
+    }
+
+    public List<String> getFields() {
+        return fields;
+    }
+
+    public void setFields(List<String> fields) {
+        this.fields = fields;
+    }
+
+    public List<Map<String, String>> getDataList() {
+        return dataList;
+    }
+
+    public void setDataList(List<Map<String, String>> dataList) {
+        this.dataList = dataList;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeImprotResembleVO{" +
+                "path='" + path + '\'' +
+                ", fields=" + fields +
+                ", conditionMap=" + conditionMap +
+                ", rownIndex=" + rownIndex +
+                ", dataList=" + dataList +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotSaveDatVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotSaveDatVO.java
new file mode 100644
index 0000000..c919067
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotSaveDatVO.java
@@ -0,0 +1,55 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.mdm.dto.CodeOrderDTO;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class CodeImprotSaveDatVO {
+    /**
+     * 缂栫爜鐢宠瀵硅薄
+     */
+    private CodeOrderDTO orderDTO;
+    /**
+     * 鍒楀悕锛堟眽瀛楋級
+     */
+    private List<String> Clos=new ArrayList<>();
+    /***
+     * 鍒楄〃鏁版嵁
+     */
+    private List<Map<String,String>> dataList=new ArrayList<>();
+
+    public CodeOrderDTO getOrderDTO() {
+        return orderDTO;
+    }
+
+    public void setOrderDTO(CodeOrderDTO orderDTO) {
+        this.orderDTO = orderDTO;
+    }
+
+    public List<String> getClos() {
+        return Clos;
+    }
+
+    public void setClos(List<String> clos) {
+        Clos = clos;
+    }
+
+    public List<Map<String, String>> getDataList() {
+        return dataList;
+    }
+
+    public void setDataList(List<Map<String, String>> dataList) {
+        this.dataList = dataList;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeImprotSaveDatVO{" +
+                "orderDTO=" + orderDTO +
+                ", Clos=" + Clos +
+                ", dataList=" + dataList +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java
new file mode 100644
index 0000000..809a32e
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeKeyAttrRepeatRuleVO.java
@@ -0,0 +1,98 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeKeyAttrRepeatRuleVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118009866089L;
+
+	/**
+	* 鏄惁蹇界暐澶у皬鍐�
+	*/
+	private String ignorecaseflag;
+
+
+	/**
+	* 鏄惁蹇界暐绌烘牸
+	*/
+	private String ignorespaceflag;
+
+
+	/**
+	* 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	*/
+	private String ignoreallspaceflag;
+
+	/**
+	 * 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	private String ignorewidthflag;
+
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public String getIgnorecaseflag (){
+		return ignorecaseflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐澶у皬鍐�
+	*/
+	public void setIgnorecaseflag (String ignorecaseflag){
+		this.ignorecaseflag = ignorecaseflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
+	 */
+	public String getIgnorespaceflag (){
+		return ignorespaceflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐绌烘牸
+	*/
+	public void setIgnorespaceflag (String ignorespaceflag){
+		this.ignorespaceflag = ignorespaceflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public String getIgnoreallspaceflag (){
+		return ignoreallspaceflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	*/
+	public void setIgnoreallspaceflag (String ignoreallspaceflag){
+		this.ignoreallspaceflag = ignoreallspaceflag;
+	}
+
+	public String getIgnorewidthflag() {
+		return ignorewidthflag;
+	}
+
+	public void setIgnorewidthflag(String ignorewidthflag) {
+		this.ignorewidthflag = ignorewidthflag;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeKeyAttrRepeatRuleVO{" +
+				"ignorecaseflag='" + ignorecaseflag + '\'' +
+				", ignorespaceflag='" + ignorespaceflag + '\'' +
+				", ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
+				", ignorewidthflag='" + ignorewidthflag + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodePhaseAttrVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodePhaseAttrVO.java
new file mode 100644
index 0000000..52b6e9e
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodePhaseAttrVO.java
@@ -0,0 +1,77 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 闃舵鐨勫睘鎬ф樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodePhaseAttrVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117417389038L;
+
+	/**
+	* 鎵�灞炴ā鏉块樁娈�
+	*/
+	private String codephaseoid;
+
+	/**
+	* 鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	*/
+	private String codephaseoidName;
+
+	/**
+	 * 灞炴�х殑鍒嗙粍鍚嶇О
+	 */
+	private String attrGroupName;
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炴ā鏉块樁娈�
+	 */
+	public String getCodephaseoid (){
+		return codephaseoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炴ā鏉块樁娈�
+	*/
+	public void setCodephaseoid (String codephaseoid){
+		this.codephaseoid = codephaseoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	 */
+	public String getCodephaseoidName (){
+		return codephaseoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炴ā鏉块樁娈垫樉绀烘枃鏈�
+	*/
+	public void setCodephaseoidName (String codephaseoidName){
+		this.codephaseoidName = codephaseoidName;
+	}
+
+	public String getAttrGroupName() {
+		return attrGroupName;
+	}
+
+	public void setAttrGroupName(String attrGroupName) {
+		this.attrGroupName = attrGroupName;
+	}
+
+	@Override
+	public String toString() {
+		return "CodePhaseAttrVO{" +
+				"codephaseoid='" + codephaseoid + '\'' +
+				", codephaseoidName='" + codephaseoidName + '\'' +
+				", attrGroupName='" + attrGroupName + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeResembleRuleVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeResembleRuleVO.java
new file mode 100644
index 0000000..2b96e90
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeResembleRuleVO.java
@@ -0,0 +1,119 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+public class CodeResembleRuleVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119066298945L;
+
+	/**
+	* 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	*/
+	private String ignoreallspaceflag;
+
+
+	/**
+	* 鏄惁蹇界暐澶у皬鍐�
+	*/
+	private String ignorecaseflag;
+
+
+	/**
+	* 鏄惁蹇界暐绌烘牸
+	*/
+	private String ignorespaceflag;
+
+
+	/**
+	* 鏄惁蹇界暐鍏ㄥ崐瑙�
+	*/
+	private String ignorewidthflag;
+
+	/**
+	 * 杩炴帴瀛楃
+	 */
+	private String linkCharacter;
+
+
+
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	 */
+	public String getIgnoreallspaceflag (){
+		return ignoreallspaceflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+	*/
+	public void setIgnoreallspaceflag (String ignoreallspaceflag){
+		this.ignoreallspaceflag = ignoreallspaceflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐澶у皬鍐�
+	 */
+	public String getIgnorecaseflag (){
+		return ignorecaseflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐澶у皬鍐�
+	*/
+	public void setIgnorecaseflag (String ignorecaseflag){
+		this.ignorecaseflag = ignorecaseflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐绌烘牸
+	 */
+	public String getIgnorespaceflag (){
+		return ignorespaceflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐绌烘牸
+	*/
+	public void setIgnorespaceflag (String ignorespaceflag){
+		this.ignorespaceflag = ignorespaceflag;
+	}
+	/**
+	 * 鑾峰彇 鏄惁蹇界暐鍏ㄥ崐瑙�
+	 */
+	public String getIgnorewidthflag (){
+		return ignorewidthflag;
+	}
+
+	/**
+	* 璁剧疆 鏄惁蹇界暐鍏ㄥ崐瑙�
+	*/
+	public void setIgnorewidthflag (String ignorewidthflag){
+		this.ignorewidthflag = ignorewidthflag;
+	}
+
+	public String getLinkCharacter() {
+		return linkCharacter;
+	}
+
+	public void setLinkCharacter(String linkCharacter) {
+		this.linkCharacter = linkCharacter;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeResembleRuleVO{" +
+				"ignoreallspaceflag='" + ignoreallspaceflag + '\'' +
+				", ignorecaseflag='" + ignorecaseflag + '\'' +
+				", ignorespaceflag='" + ignorespaceflag + '\'' +
+				", ignorewidthflag='" + ignorewidthflag + '\'' +
+				", linkCharacter='" + linkCharacter + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeRuleVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeRuleVO.java
new file mode 100644
index 0000000..40bfe4f
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeRuleVO.java
@@ -0,0 +1,72 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeRuleVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117684483406L;
+
+	/**
+	 * 缂栫爜瑙勫垯鐨勭紪鍙�
+	 */
+	private String id;
+
+	/**
+	 * 缂栫爜瑙勫垯鐨勫悕绉�
+	 */
+	private String name;
+
+	/**
+	 * 缂栫爜鐨勭爜娈典俊鎭�
+	 */
+	private List<CodeBasicSecVO> secVOList;
+
+
+	@Override
+	public String getId() {
+		return id;
+	}
+
+	@Override
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	@Override
+	public String getName() {
+		return name;
+	}
+
+	@Override
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public List<CodeBasicSecVO> getSecVOList() {
+		return secVOList;
+	}
+
+	public void setSecVOList(List<CodeBasicSecVO> secVOList) {
+		this.secVOList = secVOList;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeRuleVO{" +
+				"id='" + id + '\'' +
+				", name='" + name + '\'' +
+				", secVOList=" + secVOList +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSerialAlgorithmVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSerialAlgorithmVO.java
new file mode 100644
index 0000000..e9b90c4
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSerialAlgorithmVO.java
@@ -0,0 +1,72 @@
+package org.springblade.code.vo.pagemodel;
+
+/**
+ * 娴佹按绠楁硶绫荤殑鏄剧ず淇℃伅
+ * @author weidy
+ * @date 2022-2-17
+ */
+public class CodeSerialAlgorithmVO implements java.io.Serializable{
+
+    /**
+     * 绠楁硶缂栧彿
+     */
+    private String id;
+
+    /**
+     * 绫荤殑鍏ㄨ矾寰�
+     */
+    private String classFullName;
+
+    /**
+     * 绫荤殑鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鎻忚堪
+     */
+    private String description;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getClassFullName() {
+        return classFullName;
+    }
+
+    public void setClassFullName(String classFullName) {
+        this.classFullName = classFullName;
+    }
+
+    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;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeSerialAlgorithmVO{" +
+                "id='" + id + '\'' +
+                ", classFullName='" + classFullName + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSynonymVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSynonymVO.java
new file mode 100644
index 0000000..7adc609
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeSynonymVO.java
@@ -0,0 +1,103 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 鍚屼箟璇嶉厤缃樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+public class CodeSynonymVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118039132189L;
+
+	/**
+	* 鎵�灞炵紪鐮佽鍒�
+	*/
+	private String codeclassifytemplateoid;
+
+	/**
+	* 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	*/
+	private String codeclassifytemplateoidName;
+
+	/**
+	* 婧愬��
+	*/
+	private String sourcevalue;
+
+
+	/**
+	* 鍚屼箟璇�
+	*/
+	private String synonymvalue;
+
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
+	 */
+	public String getCodeclassifytemplateoid (){
+		return codeclassifytemplateoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炵紪鐮佽鍒�
+	*/
+	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
+		this.codeclassifytemplateoid = codeclassifytemplateoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public String getCodeclassifytemplateoidName (){
+		return codeclassifytemplateoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	*/
+	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
+		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 婧愬��
+	 */
+	public String getSourcevalue (){
+		return sourcevalue;
+	}
+
+	/**
+	* 璁剧疆 婧愬��
+	*/
+	public void setSourcevalue (String sourcevalue){
+		this.sourcevalue = sourcevalue;
+	}
+	/**
+	 * 鑾峰彇 鍚屼箟璇�
+	 */
+	public String getSynonymvalue (){
+		return synonymvalue;
+	}
+
+	/**
+	* 璁剧疆 鍚屼箟璇�
+	*/
+	public void setSynonymvalue (String synonymvalue){
+		this.synonymvalue = synonymvalue;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeSynonymVO{" +
+		"codeclassifytemplateoid='" + codeclassifytemplateoid +"'," +
+		"codeclassifytemplateoidName='" + codeclassifytemplateoidName +"'," +
+		"sourcevalue='" + sourcevalue +"'," +
+		"synonymvalue='" + synonymvalue +"'," +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeTemplatePhaseVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeTemplatePhaseVO.java
new file mode 100644
index 0000000..c8efa6f
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeTemplatePhaseVO.java
@@ -0,0 +1,83 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 妯℃澘闃舵鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public class CodeTemplatePhaseVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117825912259L;
+
+	/**
+	* 鎵�灞炵紪鐮佽鍒�
+	*/
+	private String codeclassifytemplateoid;
+
+	/**
+	* 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	*/
+	private String codeclassifytemplateoidName;
+
+	/**
+	* 鐮佸�煎簭鍙�
+	*/
+	private Integer ordernum;
+
+
+
+	/**
+	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
+	 */
+	public String getCodeclassifytemplateoid (){
+		return codeclassifytemplateoid;
+	}
+
+	/**
+	* 璁剧疆 鎵�灞炵紪鐮佽鍒�
+	*/
+	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
+		this.codeclassifytemplateoid = codeclassifytemplateoid;
+	}
+	/**
+	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	 */
+	public String getCodeclassifytemplateoidName (){
+		return codeclassifytemplateoidName;
+	}
+
+	/**
+	* 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	*/
+	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
+		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
+	}
+	/**
+	 * 鑾峰彇 鐮佸�煎簭鍙�
+	 */
+	public Integer getOrdernum (){
+		return ordernum;
+	}
+
+	/**
+	* 璁剧疆 鐮佸�煎簭鍙�
+	*/
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeTemplatePhaseVO{" +
+		"codeclassifytemplateoid='" + codeclassifytemplateoid +"'," +
+		"codeclassifytemplateoidName='" + codeclassifytemplateoidName +"'," +
+		"ordernum='" + ordernum +"'," +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDataVO.java
new file mode 100644
index 0000000..2be451f
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDataVO.java
@@ -0,0 +1,119 @@
+package org.springblade.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+/**
+ * 鍒嗙被鏁版嵁淇℃伅
+ */
+@XStreamAlias("object")
+public class ApplyDataVO {
+    /***
+     * 杈撳叆涓婚敭
+     */
+    @XStreamAsAttribute
+    private String id;
+    /**
+     * 缂栫爜
+     */
+    @XStreamAsAttribute
+    private String code;
+    /**
+     * 鐘舵��
+     */
+    @XStreamAsAttribute
+    private  String status;
+    /**
+     * 鏁版嵁鎿嶄綔绫诲瀷
+     */
+    @XStreamAsAttribute
+    private  String operate;
+    /***
+     * 鍒涘缓鑰�
+     */
+    @XStreamAsAttribute
+    private String creator;
+
+    /**
+     * 鏇存敼鑰�
+     */
+    @XStreamAsAttribute
+    private  String editor;
+    /***
+     * 鏁版嵁灞炴�у璞�
+     */
+    @XStreamImplicit
+    private List<ProppertyVO> prop;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getOperate() {
+        return operate;
+    }
+
+    public void setOperate(String operate) {
+        this.operate = operate;
+    }
+
+    public List<ProppertyVO> getProp() {
+        return prop;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getEditor() {
+        return editor;
+    }
+
+    public void setEditor(String editor) {
+        this.editor = editor;
+    }
+
+    public void setProp(List<ProppertyVO> prop) {
+        this.prop = prop;
+    }
+
+    @Override
+    public String toString() {
+        return "ApplyDataVO{" +
+                "id='" + id + '\'' +
+                ", code='" + code + '\'' +
+                ", status='" + status + '\'' +
+                ", operate='" + operate + '\'' +
+                ", creator='" + creator + '\'' +
+                ", editor='" + editor + '\'' +
+                ", prop=" + prop +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDatasVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDatasVO.java
new file mode 100644
index 0000000..69eed5e
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ApplyDatasVO.java
@@ -0,0 +1,27 @@
+package org.springblade.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("objects")
+public class ApplyDatasVO {
+    @XStreamImplicit
+    private List<ApplyDataVO> object;
+
+    public List<ApplyDataVO> getObject() {
+        return object;
+    }
+
+    public void setObject(List<ApplyDataVO> object) {
+        this.object = object;
+    }
+
+    @Override
+    public String toString() {
+        return "ApplyDatasVO{" +
+                "object=" + object +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfyVO.java
new file mode 100644
index 0000000..8126bbf
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfyVO.java
@@ -0,0 +1,83 @@
+package org.springblade.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+/**
+ * 鍒嗙被淇℃伅
+ */
+@XStreamAlias("classify")
+public class ClassfyVO {
+    /**
+     * 鍒嗙被浠e彿
+     */
+    @XStreamAsAttribute
+    private String classCode;
+    /**
+     * 搴撲唬鍙�
+     */
+    @XStreamAsAttribute
+    private String library;
+    /**
+     * 绫昏矾寰�
+     */
+    @XStreamAsAttribute
+    private  String fullclsfNamePath;
+    /**
+     * 鐮佹淇℃伅
+     */
+    private SectionsVO sections;
+
+    private ApplyDatasVO objects;
+
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getFullclsfNamePath() {
+        return fullclsfNamePath;
+    }
+
+    public void setFullclsfNamePath(String fullclsfNamePath) {
+        this.fullclsfNamePath = fullclsfNamePath;
+    }
+
+    public SectionsVO getSections() {
+        return sections;
+    }
+
+    public void setSections(SectionsVO sections) {
+        this.sections = sections;
+    }
+
+    public ApplyDatasVO getObjects() {
+        return objects;
+    }
+
+    public void setObjects(ApplyDatasVO objects) {
+        this.objects = objects;
+    }
+
+    @Override
+    public String toString() {
+        return "ClassVO{" +
+                "classCode='" + classCode + '\'' +
+                ", library='" + library + '\'' +
+                ", fullclsfNamePath='" + fullclsfNamePath + '\'' +
+                ", sections=" + sections +
+                ", objects=" + objects +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfysVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfysVO.java
new file mode 100644
index 0000000..628fb7c
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ClassfysVO.java
@@ -0,0 +1,30 @@
+package org.springblade.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("classifys")
+public class ClassfysVO {
+    /**
+     *鍒嗙被淇℃伅
+     */
+    @XStreamImplicit
+    private List<ClassfyVO> classify;
+
+    public List<ClassfyVO> getClassify() {
+        return classify;
+    }
+
+    public void setClassify(List<ClassfyVO> classify) {
+        this.classify = classify;
+    }
+
+    @Override
+    public String toString() {
+        return "ClassfysVO{" +
+                "classify=" + classify +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/InterParameterVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/InterParameterVO.java
new file mode 100644
index 0000000..57b8390
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/InterParameterVO.java
@@ -0,0 +1,21 @@
+package org.springblade.code.vo.universalInter.apply;
+
+/***
+ * 闆嗘垚鎺ュ彛鍙傛暟锛堢敵璇�/鏇存柊锛岀姸鎬侊級
+ */
+public class InterParameterVO {
+    private RootDataVO data;
+    public RootDataVO getData() {
+        return data;
+    }
+    public void setData(RootDataVO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "InterParameterVO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ProppertyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ProppertyVO.java
new file mode 100644
index 0000000..3fe730a
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/ProppertyVO.java
@@ -0,0 +1,56 @@
+package org.springblade.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("prop")
+public class ProppertyVO {
+    /**
+     * 灞炴�у瓧娈�
+     */
+    @XStreamAsAttribute
+    private  String key;
+    /**
+     * 灞炴�ф樉绀哄悕绉�
+     */
+    @XStreamAsAttribute
+    private String text;
+    /**
+     * 灞炴�у��
+     */
+    @XStreamAsAttribute
+    private  String value;
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return "ProppertyVO{" +
+                "key='" + key + '\'' +
+                ", text='" + text + '\'' +
+                ", value='" + value + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/RootDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/RootDataVO.java
new file mode 100644
index 0000000..ce185fd
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/RootDataVO.java
@@ -0,0 +1,58 @@
+package org.springblade.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+/**
+ *鏁版嵁淇℃伅
+ */
+@XStreamAlias("data")
+public class RootDataVO {
+    /***
+     * 闆嗘垚绯荤粺鏍囪瘑
+     */
+    @XStreamAsAttribute
+    private String systemId;
+    /**
+     * 鎿嶄綔鐢ㄦ埛淇℃伅
+     */
+    private UserVO user;
+    /***
+     * 鏁版嵁淇℃伅
+     */
+    private ClassfysVO classifys;
+
+
+    public String getSystemId() {
+        return systemId;
+    }
+
+    public void setSystemId(String systemId) {
+        this.systemId = systemId;
+    }
+
+    public UserVO getUser() {
+        return user;
+    }
+
+    public void setUser(UserVO user) {
+        this.user = user;
+    }
+
+    public ClassfysVO getClassifys() {
+        return classifys;
+    }
+
+    public void setClassifys(ClassfysVO classifys) {
+        this.classifys = classifys;
+    }
+
+    @Override
+    public String toString() {
+        return "InterParameterVO{" +
+                "systemId='" + systemId + '\'' +
+                ", user=" + user +
+                ", classifys=" + classifys +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionVO.java
new file mode 100644
index 0000000..02abdef
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionVO.java
@@ -0,0 +1,42 @@
+package org.springblade.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("section")
+public class SectionVO {
+    /**
+     * 鐮佹鍚嶇О
+     */
+    @XStreamAsAttribute
+    private  String name;
+    /***
+     * 鐮佹鍊�
+     */
+    @XStreamAsAttribute
+    private String value;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return "SectionVO{" +
+                "name='" + name + '\'' +
+                ", value='" + value + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionsVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionsVO.java
new file mode 100644
index 0000000..21e537c
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/SectionsVO.java
@@ -0,0 +1,26 @@
+package org.springblade.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("sections")
+public class SectionsVO {
+    @XStreamImplicit
+    private List<SectionVO> section;
+    public List<SectionVO> getSection() {
+        return section;
+    }
+
+    public void setSection(List<SectionVO> section) {
+        this.section = section;
+    }
+
+    @Override
+    public String toString() {
+        return "SectionsVO{" +
+                "section=" + section +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/UserVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/UserVO.java
new file mode 100644
index 0000000..17a5bef
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/apply/UserVO.java
@@ -0,0 +1,56 @@
+package org.springblade.code.vo.universalInter.apply;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("user")
+public class UserVO {
+    /**
+     * 鍒涘缓/鏇存敼浜鸿处鍙�
+     */
+    @XStreamAsAttribute
+    private  String userName;
+     /**
+      * 鍒涘缓/鏇存敼浜烘樉绀哄悕绉�
+     */
+     @XStreamAsAttribute
+    private  String trueName;
+    /**
+     * 鍒涘缓/鏇存敼浜烘搷浣滄満鍣╥p
+     */
+    @XStreamAsAttribute
+    private  String ip;
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getTrueName() {
+        return trueName;
+    }
+
+    public void setTrueName(String trueName) {
+        this.trueName = trueName;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    @Override
+    public String toString() {
+        return "UserVO{" +
+                "userName='" + userName + '\'' +
+                ", trueName='" + trueName + '\'' +
+                ", ip='" + ip + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java
new file mode 100644
index 0000000..b0fb889
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/ClsfAttrMappingDO.java
@@ -0,0 +1,73 @@
+package org.springblade.code.vo.universalInter.attrmap;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+/**
+ * 灞炴�ф槧灏�
+ */
+@XStreamAlias("clsf")
+public class ClsfAttrMappingDO {
+    /***
+     * 鏁版嵁婧愮郴缁熷唴閮ㄥ瓧娈�
+     */
+    @XStreamAsAttribute
+    private String sourceKey="";
+    /***
+     * 鏁版嵁婧愮郴缁熷悕绉�
+     */
+    @XStreamAsAttribute
+    private String  sourceName="";
+    /***
+     * 鐩爣绯荤粺鍐呴儴瀛楁
+     */
+    @XStreamAsAttribute
+    private String targetKey="" ;
+    /***
+     * 鐩爣绯荤粺鍐呴儴鍚嶇О
+     */
+    @XStreamAsAttribute
+    private String targetName="";
+
+    public String getSourceKey() {
+        return sourceKey;
+    }
+
+    public void setSourceKey(String sourceKey) {
+        this.sourceKey = sourceKey;
+    }
+
+    public String getSourceName() {
+        return sourceName;
+    }
+
+    public void setSourceName(String sourceName) {
+        this.sourceName = sourceName;
+    }
+
+    public String getTargetKey() {
+        return targetKey;
+    }
+
+    public void setTargetKey(String targetKey) {
+        this.targetKey = targetKey;
+    }
+
+    public String getTargetName() {
+        return targetName;
+    }
+
+    public void setTargetName(String targetName) {
+        this.targetName = targetName;
+    }
+
+    @Override
+    public String toString() {
+        return "ClsfAttrMappingDO{" +
+                "sourceKey='" + sourceKey + '\'' +
+                ", sourceName='" + sourceName + '\'' +
+                ", targetKey='" + targetKey + '\'' +
+                ", targetName='" + targetName + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataAttributeVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataAttributeVO.java
new file mode 100644
index 0000000..b8b746b
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataAttributeVO.java
@@ -0,0 +1,112 @@
+package org.springblade.code.vo.universalInter.attrmap;
+
+public class DataAttributeVO {
+    /**
+     * 瀛楁鍚�
+     */
+    private String field;
+    /***
+     * 灞炴�ф樉绀哄悕绉�
+     */
+    private String text;
+
+    /**
+     * 蹇呭~
+     */
+    private boolean required;
+
+    /**
+     * 鍏抽敭灞炴��
+     */
+    private boolean keyAttr;
+
+
+    /**
+     * 榛樿鍊�
+     */
+    private String defaultValue;
+
+    /**
+     * 鍊�
+     */
+    private String value;
+
+    /**
+     * 鍓嶇紑
+     */
+    private String prefix;
+
+    /**
+     * 鍓嶇紑
+     */
+    private String suffix;
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public boolean isRequired() {
+        return required;
+    }
+
+    public void setRequired(boolean required) {
+        this.required = required;
+    }
+
+    public boolean isKeyAttr() {
+        return keyAttr;
+    }
+
+    public void setKeyAttr(boolean keyAttr) {
+        this.keyAttr = keyAttr;
+    }
+
+    public String getDefaultValue() {
+        return defaultValue;
+    }
+
+    public void setDefaultValue(String defaultValue) {
+        this.defaultValue = defaultValue;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getPrefix() {
+        return prefix;
+    }
+
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+
+    public String getSuffix() {
+        return suffix;
+    }
+
+    public void setSuffix(String suffix) {
+        this.suffix = suffix;
+    }
+
+    @Override
+    public String toString() {
+        return "DataObjectVO{" +
+                "field='" + field + '\'' +
+                ", required=" + required +
+                ", keyAttr=" + keyAttr +
+                ", defaultValue='" + defaultValue + '\'' +
+                ", value='" + value + '\'' +
+                ", prefix='" + prefix + '\'' +
+                ", suffix='" + suffix + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataObjectVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataObjectVO.java
new file mode 100644
index 0000000..6ae4a41
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/DataObjectVO.java
@@ -0,0 +1,24 @@
+package org.springblade.code.vo.universalInter.attrmap;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DataObjectVO {
+    private List<String> colName = new ArrayList();
+    private List<RowDatas> rowData = new ArrayList();
+
+    public List<String> getColName() {
+        return colName;
+    }
+
+    public void setColName(List<String> colName) {
+        this.colName = colName;
+    }
+    public List<RowDatas> getRowData() {
+        return rowData;
+    }
+
+    public void setRowData(List<RowDatas> rowData) {
+        this.rowData = rowData;
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/GeneralMappingUtil.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/GeneralMappingUtil.java
new file mode 100644
index 0000000..8d82fc7
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/GeneralMappingUtil.java
@@ -0,0 +1,30 @@
+package org.springblade.code.vo.universalInter.attrmap;
+
+public class GeneralMappingUtil {
+
+    private static GeneralMappingUtil newInstance=null;
+    public static GeneralMappingUtil getNewInstance() {
+        if(newInstance==null){
+            newInstance=new GeneralMappingUtil();
+        }
+        return newInstance;
+    }
+
+    /***
+     * 閫氳繃绯荤粺鏍囪瘑鑾峰彇瀵瑰簲鐨勯泦鎴愬睘鎬ф槧灏�
+     * @param system
+     */
+    private void getLibraryClsfAttrMapping(String system){
+        try {
+           /** String fileNamePath=LocalFileUtil.getProjectFolder();
+            fileNamePath+=File.separator+"mdmInMapXml"+File.separator+"clsfAttrMap.xml";
+            String  clasAttrXml= LocalFileUtil.readContentForFile(fileNamePath);
+            XStream xStream = new XStream(new DomDriver());
+            xStream.processAnnotations(ApplyCodeDO.class);
+            xStream.autodetectAnnotations(true);
+            ApplyCodeDO applyCodeDO = (ApplyCodeDO) xStream.fromXML(clasAttrXml);**/
+        }catch (Throwable e){
+            new Throwable("璇诲彇灞炴�ф槧灏勬枃浠跺嚭閿�!");
+        }
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryClsfDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryClsfDO.java
new file mode 100644
index 0000000..83e594c
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryClsfDO.java
@@ -0,0 +1,42 @@
+package org.springblade.code.vo.universalInter.attrmap;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+/***
+ * 搴撹妭鐐�
+ */
+@XStreamAlias("clsf")
+public class LibraryClsfDO {
+    @XStreamAsAttribute
+    private String library;
+    @XStreamImplicit(itemFieldName="prop")
+    private List<ClsfAttrMappingDO> prop;
+
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+    public List<ClsfAttrMappingDO> getProp() {
+        return prop;
+    }
+
+    public void setProp(List<ClsfAttrMappingDO> prop) {
+        this.prop = prop;
+    }
+
+    @Override
+    public String toString() {
+        return "LibraryClsfDO{" +
+                "library='" + library + '\'' +
+                ", prop=" + prop +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryDO.java
new file mode 100644
index 0000000..9649f7f
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/LibraryDO.java
@@ -0,0 +1,33 @@
+package org.springblade.code.vo.universalInter.attrmap;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+/***
+ * 搴撹妭鐐�
+ */
+@XStreamAlias("clsfs")
+public class LibraryDO {
+    /***
+     * 搴撹妭鐐�
+     */
+    @XStreamImplicit(itemFieldName="clsf")
+    private List<LibraryClsfDO> clsf;
+
+    public List<LibraryClsfDO> getClsf() {
+        return clsf;
+    }
+
+    public void setClsf(List<LibraryClsfDO> clsf) {
+        this.clsf = clsf;
+    }
+
+    @Override
+    public String toString() {
+        return "LibraryDO{" +
+                "clsf=" + clsf +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/RowDatas.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/RowDatas.java
new file mode 100644
index 0000000..bcaeb27
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/RowDatas.java
@@ -0,0 +1,125 @@
+package org.springblade.code.vo.universalInter.attrmap;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class RowDatas {
+    /**
+     * 鏁版嵁id
+     */
+    private String oid;
+    /***
+     * 鍒涘缓鑰�
+     */
+    private String creator;
+    /***
+     * 鏇存敼鑰�
+     */
+    private  String editor;
+    /**
+     * 鏁版嵁浣嶇疆
+     */
+    private String rowIndex;
+    /***
+     * 鎿嶄綔绫诲瀷
+     */
+    private String operation;
+    /**
+     * 鏁版嵁鐘舵��
+     */
+    private String status;
+    /***
+     * 缂栫爜
+     */
+    private String code;
+
+    private Map<Integer, String> data = new HashMap();
+
+    private Map<String, String> filedValue = new HashMap();
+
+    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 String getEditor() {
+        return editor;
+    }
+
+    public void setEditor(String editor) {
+        this.editor = editor;
+    }
+
+    public String getOperation() {
+        return operation;
+    }
+
+    public void setOperation(String operation) {
+        this.operation = operation;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getRowIndex() {
+        return rowIndex;
+    }
+
+    public void setRowIndex(String rowIndex) {
+        this.rowIndex = rowIndex;
+    }
+
+    public Map<Integer, String> getData() {
+        return data;
+    }
+
+    public void setData(Map<Integer, String> data) {
+        this.data = data;
+    }
+
+    public Map<String, String> getFiledValue() {
+        return filedValue;
+    }
+
+    public void setFiledValue(Map<String, String> filedValue) {
+        this.filedValue = filedValue;
+    }
+
+    @Override
+    public String toString() {
+        return "RowDatas{" +
+                "oid='" + oid + '\'' +
+                ", creator='" + creator + '\'' +
+                ", editor='" + editor + '\'' +
+                ", rowIndex='" + rowIndex + '\'' +
+                ", operation='" + operation + '\'' +
+                ", status='" + status + '\'' +
+                ", code='" + code + '\'' +
+                ", data=" + data +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/appcode.xml b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/appcode.xml
new file mode 100644
index 0000000..9fa5094
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/appcode.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<data systemId="MPM">
+    <user userName="weidy" trueName="" ip="127.0.0.1"/>
+    <classifys>
+        <classify classCode="020101" library="wupin" fullclsfNamePath="鐗╁搧##VCI##鏍囧噯浠�##VCI##铻烘爴">
+            <sections>
+                <section name="灞傜骇鐮佹" value="020101"></section>
+            </sections>
+            <objects>
+                <object code=""  id="0023401" status="Editing" operate="create" creator="weidy" >
+                    <prop key="name" text="鍚嶇О" value="娓╁害璋冭妭鍣�2333"/>
+                    <prop key="use" text="瑙勬牸" value="GB-002599"/>
+                </object>
+                <object  code="" id="0023402" status="Editing" operate="create" creator="weidy">
+                    <prop key="name" text="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�"/>
+                    <prop key="use" text="瑙勬牸" value="GB-00257"/>
+                </object>
+            </objects>
+        </classify>
+        <classify classCode="020102" library="wupin" fullclsfNamePath="鐗╁搧##VCI##鏍囧噯浠�##VCI##铻烘瘝">
+            <sections>
+                <section name="灞傜骇鐮佹" value="020102"></section>
+            </sections>
+            <objects>
+                <object code="" id="0023403" status="Editing" operate="create" creator="weidy">
+                    <prop  key="name" text="鍚嶇О" value="娓╁害璋冭妭鍣�2"/>
+                    <prop key="use" text="瑙勬牸" value="GB-00255"/>
+                </object>
+                <object code="" id="0023404" status="Editing" operate="create" creator="weidy">
+                    <prop key="name" text="鎵�灞炵粨鏋�" value="qwqw"/>
+                    <prop key="use" text="瑙勬牸" value="GB-0026"/>
+                </object>
+            </objects>
+        </classify>
+    </classifys>
+</data>
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/clsfAttrMap.xml b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/clsfAttrMap.xml
new file mode 100644
index 0000000..854294d
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/clsfAttrMap.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<clsfs>
+    <clsf library="StdLib">
+        <prop	sourceKey="lcstatus"	sourceName="鐘舵��"	targetKey="lcstatus"	targetName="鐘舵��"/>
+        <prop	sourceKey="id"	sourceName="鐗╂枡缂栫爜"	targetKey="id"	targetName="鐗╂枡缂栫爜"/>
+        <prop	sourceKey="partName"	sourceName="鍚嶇О"	targetKey="name"	targetName="鐗╁搧涓枃鍚嶇О"/>
+        <prop	sourceKey="materialclassify"    sourceName="鎵�灞炲垎绫讳唬鍙�"	targetKey="	materialclassify"   targetName="鎵�灞炲垎绫讳唬鍙�"/>
+        <prop	sourceKey="firstfl"	sourceName="涓�绾х鐞嗗垎绫�"	targetKey="firstfl"	targetName="涓�绾х鐞嗗垎绫�"/>
+        <prop	sourceKey="secondfl"	sourceName="浜岀骇绠$悊鍒嗙被"	targetKey="secondfl"	targetName="浜岀骇绠$悊鍒嗙被"/>
+        <prop	sourceKey="thrifl"	sourceName="涓夌骇绠$悊鍒嗙被"	targetKey="thrifl"	targetName="涓夌骇绠$悊鍒嗙被"/>
+        <prop	sourceKey="瑙勬牸"	sourceName="瑙勬牸"	targetKey="xinghaoguige"	targetName="瑙勬牸"/>
+        <prop	sourceKey="zhiliangbz"	sourceName="鏍囧噯鍙�"	targetKey="zhiliangbz"	targetName="鏍囧噯鍙�"/>
+        <prop	sourceKey="beizhushuoming"	sourceName="澶囨敞璇存槑"	targetKey="beizhushuoming"	targetName="澶囨敞璇存槑"/>
+        <prop	sourceKey="revisionvalue"	sourceName="鐗堟湰"	targetKey="revisionvalue"	targetName="鐗堟湰"/>
+        <prop	sourceKey="creator"	sourceName="鍒涘缓浜�"	targetKey="	creator	"	targetName="鍒涘缓浜�"/>
+        <prop	sourceKey="createtime"	sourceName="鍒涘缓鏃堕棿"	targetKey="createtime"	targetName="鍒涘缓鏃堕棿"/>
+        <prop	sourceKey="lastmodifier"	sourceName="鏈�鍚庝慨鏀逛汉"	targetKey="lastmodifier"	targetName="鏈�鍚庝慨鏀逛汉"/>
+        <prop	sourceKey="lastmodifytime"	sourceName="鏈�鍚庝慨鏀规椂闂�"	targetKey="lastmodifytime"	targetName="鏈�鍚庝慨鏀规椂闂�"/>
+        <prop	sourceKey="琛ㄩ潰澶勭悊"	sourceName="琛ㄩ潰澶勭悊"	targetKey="bmcl"	targetName="琛ㄩ潰澶勭悊"/>
+        <prop	sourceKey="partNo"	sourceName="鐗屽彿"	targetKey="clph"	targetName="鏉愭枡鐗屽彿"/>
+        <prop	sourceKey="cpxs"	sourceName="浜у搧鍨嬪紡"	targetKey="cpxs"	targetName="浜у搧鍨嬪紡"/>
+        <prop	sourceKey="xbj"	sourceName="鏍囪	"	targetKey="xbj"	targetName="鏍囪"/>
+        <prop	sourceKey="淇濋櫓瀛斿瀷寮�"	sourceName="淇濋櫓瀛斿瀷寮�"	targetKey="xbxkxs"	targetName="淇濋櫓瀛斿瀷寮�"/>
+        <prop	sourceKey="xbzjbmc"	sourceName="鏍囧噯绾у埆鍚嶇О"	targetKey="xbzjbmc"	targetName="鏍囧噯绾у埆鍚嶇О"/>
+        <prop	sourceKey="xfjjstj"	sourceName="闄勫姞鎶�鏈潯浠�"	targetKey="xfjjstj"	targetName="闄勫姞鎶�鏈潯浠�	"/>
+        <prop	sourceKey="xgzccdgcd"	sourceName="鍏虫敞灏哄鐨勫叕宸甫"	targetKey="xgzccdgcd"	targetName="鍏虫敞灏哄鐨勫叕宸甫"/>
+        <prop	sourceKey="xwlwwmc"	sourceName="鐗╁搧澶栨枃鍚嶇О"	targetKey="xwlwwmc"	targetName="鐗╁搧澶栨枃鍚嶇О"/>
+        <prop	sourceKey="xxndj"	sourceName="鎬ц兘绛夌骇"	targetKey="xxndj"	targetName="鎬ц兘绛夌骇"/>
+        <prop	sourceKey="xzjmc"	sourceName="瀛愪欢鍚嶇О"	targetKey="xzjmc"	targetName="瀛愪欢鍚嶇О"/>
+        <prop	sourceKey="zjxh"	sourceName="瀛愪欢搴忓彿"	targetKey="zjxh"	targetName="瀛愪欢搴忓彿"/>
+    </clsf>
+    <clsf library="CP">
+        <prop	sourceKey=	"lcstatus"	sourceName=	"鐘舵��"	targetKey=	"lcstatus"	targetName=	"鐘舵��"	/>
+        <prop	sourceKey=	"id"	sourceName=	"鐗╁搧缂栫爜"	targetKey=	"id"	targetName=	"鐗╁搧缂栫爜"	/>
+        <prop	sourceKey=	"firstfl"	sourceName=	"涓�绾х鐞嗗垎绫�"	targetKey=	"firstfl"	targetName=	"涓�绾х鐞嗗垎绫�"	/>
+        <prop	sourceKey=	"secondfl"	sourceName=	"浜岀骇绠$悊鍒嗙被"	targetKey=	"secondfl"	targetName=	"浜岀骇绠$悊鍒嗙被"	/>
+        <prop	sourceKey=	"thrifl"	sourceName=	"涓夌骇绠$悊鍒嗙被"	targetKey=	"thrifl"	targetName=	"涓夌骇绠$悊鍒嗙被"	/>
+        <prop	sourceKey=	"description"	sourceName=	"澶囨敞璇存槑"	targetKey=	"description"	targetName=	"澶囨敞璇存槑"	/>
+        <prop	sourceKey=	"revisionvalue"	sourceName=	"鐗堟湰"	targetKey=	"revisionvalue"	targetName=	"鐗堟湰"	/>
+        <prop	sourceKey=	"creator"	sourceName=	"鍒涘缓浜�"	targetKey=	"creator"	targetName=	"鍒涘缓浜�"	/>
+        <prop	sourceKey=	"createtime"	sourceName=	"鍒涘缓鏃堕棿"	targetKey=	"createtime"	targetName=	"鍒涘缓鏃堕棿"	/>
+        <prop	sourceKey=	"lastmodifier"	sourceName=	"鏈�鍚庝慨鏀逛汉"	targetKey=	"lastmodifier"	targetName=	"鏈�鍚庝慨鏀逛汉"	/>
+        <prop	sourceKey=	"lastmodifytime"	sourceName=	"鏈�鍚庝慨鏀规椂闂�"	targetKey=	"lastmodifytime"	targetName=	"鏈�鍚庝慨鏀规椂闂�"	/>
+        <prop	sourceKey=	"jsbmc"	sourceName=	"璁惧鍚嶇О"	targetKey=	"jsbmc"	targetName=	"璁惧鍚嶇О"	/>
+        <prop	sourceKey=	"jsbxh"	sourceName=	"璁惧鍨嬪彿"	targetKey=	"jsbxh"	targetName=	"璁惧鍨嬪彿"	/>
+        <prop	sourceKey=	"jsccj"	sourceName=	"鐢熶骇鍘傚"	targetKey=	"jsccj"	targetName=	"鐢熶骇鍘傚"	/>
+        <prop	sourceKey=	"jssxt"	sourceName=	"鎵�灞炵郴缁�"	targetKey=	"jssxt"	targetName=	"鎵�灞炵郴缁�"	/>
+        <prop	sourceKey=	"jszgl"	sourceName=	"涓夎酱鎯噺"	targetKey=	"jszgl"	targetName=	"涓夎酱鎯噺"	/>
+        <prop	sourceKey=	"jzl"	sourceName=	"閲嶉噺"	targetKey=	"jzl"	targetName=	"閲嶉噺"	/>
+        <prop	sourceKey=	"jzrxx"	sourceName=	"璐d换淇℃伅"	targetKey=	"jzrxx"	targetName=	"璐d换淇℃伅"	/>
+        <prop	sourceKey=	"jzxzb"	sourceName=	"閲嶅績鍧愭爣"	targetKey=	"jzxzb"	targetName=	"閲嶅績鍧愭爣"	/>
+        <prop	sourceKey=	"jjzyq"	sourceName=	"鍑忛渿瑕佹眰"	targetKey=	"jjzyq"	targetName=	"鍑忛渿瑕佹眰"	/>
+    </clsf>
+</clsfs>
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/tt.xml b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/tt.xml
new file mode 100644
index 0000000..1323403
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/tt.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<data systemId="MPM">
+    <user userName="weidy" trueName="榄忓ぇ鍕�" ip="127.0.0.1"/>
+    <classifys>
+        <classify classCode="020101" library="wupin" fullclsfNamePath="鐗╁搧##VCI##鏍囧噯浠�##VCI##铻烘爴">
+            <objects>
+                <object code="02010100013"  id="02010100013" status="TakeBack" operate="editstatus" editor="weidy" >
+                    <prop  key="name" text="鍚嶇О" value="娓╁害璋冭妭鍣�1"/>
+                    <prop key="use" text="涓昏鍔熻兘" value="瀵肩數杩炴帴1"/>
+                </object>
+                <object  code="02010100012" id="02010100012" status="TakeBack" operate="editstatus" editor="weidy">
+                    <prop key="name" text="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�2"/>
+                    <prop key="use" text="涓昏鍔熻兘" value="瀵肩數杩炴帴2"/>
+                </object>
+            </objects>
+        </classify>
+    </classifys>
+</data>
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxx.json b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxx.json
new file mode 100644
index 0000000..67100ad
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxx.json
@@ -0,0 +1,24 @@
+{
+  "condtions": {
+    "systemId": "MPM",
+    "user": {
+      "userName": "weidy",
+      "ip": "127.0.0.1"
+    },
+    "condtion": {
+      "classCode": "020101",
+      "library": "wupin",
+      "queryFileds": "id,name,zhiliangbz,clph,firstfl,secondfl,thrifl",
+      "pro": [
+        {
+          "filedName": "name",
+          "filedValue": "鍙戝姩鏈�"
+        },
+        {
+          "filedName": "zhiliangbz",
+          "filedValue": "223"
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxxxxxxxx.json b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxxxxxxxx.json
new file mode 100644
index 0000000..3b2d5e7
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/attrmap/xxxxxxxxx.json
@@ -0,0 +1,75 @@
+{
+  "data": {
+    "classifys": {
+      "classify": [
+        {
+          "classCode": "020104",
+          "fullclsfNamePath": "",
+          "library": "StdLib",
+          "objects": {
+            "object": [
+              {
+                "code": "",
+                "creator": "weidy",
+                "id": "201",
+                "operate": "create",
+                "prop": [
+                  {
+                    "key": "partNo",
+                    "text": "鐗屽彿",
+                    "value": "HB1-221"
+                  },
+                  {
+                    "key": "partName",
+                    "text": "鍚嶇О",
+                    "value": "鍗婂渾澶磋灪閽�"
+                  },
+                  {
+                    "key": "PartNumber",
+                    "text": "",
+                    "value": "HB1-221-M4*5"
+                  },
+                  {
+                    "key": "鐗屽彿",
+                    "text": "",
+                    "value": "HB1-221"
+                  },
+                  {
+                    "key": "瑙勬牸",
+                    "text": "",
+                    "value": "M4"
+                  },
+                  {
+                    "key": "琛ㄩ潰澶勭悊",
+                    "text": "",
+                    "value": "鐢甸晙"
+                  },
+                  {
+                    "key": "淇濋櫓瀛斿瀷寮�",
+                    "text": "",
+                    "value": "鏃�"
+                  }
+                ],
+                "status": "Published"
+              }
+            ]
+          },
+          "sections": {
+            "section": [
+              {
+                "name": "灞傜骇鐮佹",
+                "value": "020104"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    "systemId": "RLM",
+    "user": {
+      "ip": "0:0:0:0:0:0:0:1",
+      "trueName": "weidy",
+      "userName": "weidy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ClassifyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ClassifyVO.java
new file mode 100644
index 0000000..289a3e8
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ClassifyVO.java
@@ -0,0 +1,112 @@
+package org.springblade.code.vo.universalInter.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("classify")
+public class ClassifyVO {
+    /**
+     * 鍒嗙被id
+     */
+    @XStreamAsAttribute
+    private String id;
+    /***
+     * 鍒嗙被鍚嶇О
+     */
+    @XStreamAsAttribute
+    private String name;
+    /***
+     * 鐖惰妭鐐筰d
+     */
+    @XStreamAsAttribute
+    private String pid;
+    /***
+     * 鍒嗙被浠e彿
+     */
+    @XStreamAsAttribute
+    private String classCode;
+    /***
+     * 鎻忚堪
+     */
+    @XStreamAsAttribute
+    private  String description;
+    /***
+     * 鍒嗙被閾炬帴璺緞
+     */
+    @XStreamAsAttribute
+    private  String fullPathName;
+    /***
+     * 鍒嗙被鐘舵��
+     */
+    @XStreamAsAttribute
+    private String lcStatus;
+
+    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 getPid() {
+        return pid;
+    }
+
+    public void setPid(String pid) {
+        this.pid = pid;
+    }
+
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getFullPathName() {
+        return fullPathName;
+    }
+
+    public void setFullPathName(String fullPathName) {
+        this.fullPathName = fullPathName;
+    }
+
+    public String getLcStatus() {
+        return lcStatus;
+    }
+
+    public void setLcStatus(String lcStatus) {
+        this.lcStatus = lcStatus;
+    }
+
+    @Override
+    public String toString() {
+        return "ClassifyVO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", pid='" + pid + '\'' +
+                ", classCode='" + classCode + '\'' +
+                ", description='" + description + '\'' +
+                ", fullPathName='" + fullPathName + '\'' +
+                ", lcStatus='" + lcStatus + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/LibraryVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/LibraryVO.java
new file mode 100644
index 0000000..2451bb3
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/LibraryVO.java
@@ -0,0 +1,49 @@
+package org.springblade.code.vo.universalInter.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+@XStreamAlias("library ")
+public class LibraryVO {
+    @XStreamAsAttribute
+    private String id;
+    @XStreamAsAttribute
+    private  String name;
+    @XStreamImplicit
+    private List<ClassifyVO>classify;
+
+    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 List<ClassifyVO> getClassify() {
+        return classify;
+    }
+
+    public void setClassify(List<ClassifyVO> classify) {
+        this.classify = classify;
+    }
+
+    @Override
+    public String toString() {
+        return "LibraryVO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", classify=" + classify +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryClassifyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryClassifyVO.java
new file mode 100644
index 0000000..5e86abb
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryClassifyVO.java
@@ -0,0 +1,23 @@
+package org.springblade.code.vo.universalInter.classify;
+
+public class QueryClassifyVO {
+    /***
+     *
+     */
+    private QueryData data;
+
+    public QueryData getData() {
+        return data;
+    }
+
+    public void setData(QueryData data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "QueryClassifyVO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryData.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryData.java
new file mode 100644
index 0000000..8df8b8a
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryData.java
@@ -0,0 +1,45 @@
+package org.springblade.code.vo.universalInter.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.vci.mdm.model.universalInter.apply.UserVO;
+
+@XStreamAlias("data")
+public class QueryData {
+    @XStreamAsAttribute
+    private String systemId;
+    private UserVO userVo;
+    private QueryLibraryVO library ;
+    public QueryLibraryVO getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(QueryLibraryVO library) {
+        this.library = library;
+    }
+
+    public String getSystemId() {
+        return systemId;
+    }
+
+    public void setSystemId(String systemId) {
+        this.systemId = systemId;
+    }
+
+    public UserVO getUserVo() {
+        return userVo;
+    }
+
+    public void setUserVo(UserVO userVo) {
+        this.userVo = userVo;
+    }
+
+    @Override
+    public String toString() {
+        return "QueryData{" +
+                "systemId='" + systemId + '\'' +
+                ", library=" + library +
+                '}';
+    }
+}
+
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryLibraryVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryLibraryVO.java
new file mode 100644
index 0000000..8852d6d
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryLibraryVO.java
@@ -0,0 +1,39 @@
+package org.springblade.code.vo.universalInter.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("library")
+public class QueryLibraryVO {
+    @XStreamAsAttribute
+    private String id;
+    @XStreamImplicit
+    private List<String> classifyid;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public List<String> getClassifyid() {
+        return classifyid;
+    }
+
+    public void setClassifyid(List<String> classifyid) {
+        this.classifyid = classifyid;
+    }
+
+    @Override
+    public String toString() {
+        return "LibraryVO{" +
+                "id='" + id + '\'' +
+                ", classifyid=" + classifyid +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultClassifyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultClassifyVO.java
new file mode 100644
index 0000000..550cbe1
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultClassifyVO.java
@@ -0,0 +1,21 @@
+package org.springblade.code.vo.universalInter.classify;
+
+public class ResultClassifyVO {
+
+   private   ResultData resultData;
+
+    public ResultData getResultData() {
+        return resultData;
+    }
+
+    public void setResultData(ResultData resultData) {
+        this.resultData = resultData;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultClassifyVO{" +
+                "resultData=" + resultData +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultData.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultData.java
new file mode 100644
index 0000000..3970c1d
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/ResultData.java
@@ -0,0 +1,45 @@
+package org.springblade.code.vo.universalInter.classify;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+
+@XStreamAlias("data")
+public class ResultData {
+    @XStreamAlias("errorid")
+    private  String errorid;
+    @XStreamAlias("msg")
+    private String msg;
+    private LibraryVO library ;
+
+    public LibraryVO getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(LibraryVO library) {
+        this.library = library;
+    }
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultData{" +
+                "code='" + errorid + '\'' +
+                ", msg='" + msg + '\'' +
+                ", library=" + library +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/classify.xml b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/classify.xml
new file mode 100644
index 0000000..6c0fd68
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/classify.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<data>
+    <code>0</code>
+    <msg>鎴愬姛!</msg>
+    <library id="wupin" name="">
+        <classify id="535FC9B6-FE27-241F-5FCA-ED4DC17CF95B" name="浜у搧" pid="D9CF223F-317D-71EB-BD11-433A94CAD9F3" classCode="01" description="浜у搧" lcStatus="Enabled"/>
+        <classify id="8EB35A1D-AB8B-2255-565C-84D309E0C62B" name="涓绘満浜у搧" pid="535FC9B6-FE27-241F-5FCA-ED4DC17CF95B" classCode="0101" description="涓绘満浜у搧" lcStatus="Enabled"/>
+        <classify id="4524E801-6CC6-92E8-1AC3-2AB9604E8F96" name="涓绘満浜у搧" pid="8EB35A1D-AB8B-2255-565C-84D309E0C62B" classCode="010100" description="涓绘満浜у搧" lcStatus="Enabled"/>
+        <classify id="5B72F92C-39EF-3CEB-8474-6B561DC8402B" name="鍦伴潰绔�" pid="535FC9B6-FE27-241F-5FCA-ED4DC17CF95B" classCode="0102" description="鍦伴潰绔�" lcStatus="Enabled"/>
+        <classify id="56AE339C-9B2F-4298-6F9B-9F0615993DB1" name="CCS" pid="5B72F92C-39EF-3CEB-8474-6B561DC8402B" classCode="010201" description="CCS" lcStatus="Enabled"/>
+        <classify id="FDB76D0A-D52B-45B6-47B4-89FE9C004ACD" name="DLS" pid="5B72F92C-39EF-3CEB-8474-6B561DC8402B" classCode="010202" description="DLS" lcStatus="Enabled"/>
+        <classify id="AB557DD1-44F7-6256-C772-254605D9E554" name="SGDT" pid="5B72F92C-39EF-3CEB-8474-6B561DC8402B" classCode="010203" description="SGDT" lcStatus="Enabled"/>
+       </library>
+</data>
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/xxx.json b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/xxx.json
new file mode 100644
index 0000000..8fcaf13
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/xxx.json
@@ -0,0 +1,68 @@
+{
+  "resultData": {
+    "msg": "鎴愬姛!",
+    "code": "0",
+    "library": {
+      "classify": [
+        {
+          "classCode": "01",
+          "lcStatus": "Enabled",
+          "name": "浜у搧",
+          "description": "浜у搧",
+          "pid": "D9CF223F-317D-71EB-BD11-433A94CAD9F3",
+          "id": "535FC9B6-FE27-241F-5FCA-ED4DC17CF95B"
+        },
+        {
+          "classCode": "0101",
+          "lcStatus": "Enabled",
+          "name": "涓绘満浜у搧",
+          "description": "涓绘満浜у搧",
+          "pid": "535FC9B6-FE27-241F-5FCA-ED4DC17CF95B",
+          "id": "8EB35A1D-AB8B-2255-565C-84D309E0C62B"
+        },
+        {
+          "classCode": "010100",
+          "lcStatus": "Enabled",
+          "name": "涓绘満浜у搧",
+          "description": "涓绘満浜у搧",
+          "pid": "8EB35A1D-AB8B-2255-565C-84D309E0C62B",
+          "id": "4524E801-6CC6-92E8-1AC3-2AB9604E8F96"
+        },
+        {
+          "classCode": "0102",
+          "lcStatus": "Enabled",
+          "name": "鍦伴潰绔�",
+          "description": "鍦伴潰绔�",
+          "pid": "535FC9B6-FE27-241F-5FCA-ED4DC17CF95B",
+          "id": "5B72F92C-39EF-3CEB-8474-6B561DC8402B"
+        },
+        {
+          "classCode": "010201",
+          "lcStatus": "Enabled",
+          "name": "CCS",
+          "description": "CCS",
+          "pid": "5B72F92C-39EF-3CEB-8474-6B561DC8402B",
+          "id": "56AE339C-9B2F-4298-6F9B-9F0615993DB1"
+        },
+        {
+          "classCode": "010202",
+          "lcStatus": "Enabled",
+          "name": "DLS",
+          "description": "DLS",
+          "pid": "5B72F92C-39EF-3CEB-8474-6B561DC8402B",
+          "id": "FDB76D0A-D52B-45B6-47B4-89FE9C004ACD"
+        },
+        {
+          "classCode": "010203",
+          "lcStatus": "Enabled",
+          "name": "SGDT",
+          "description": "SGDT",
+          "pid": "5B72F92C-39EF-3CEB-8474-6B561DC8402B",
+          "id": "AB557DD1-44F7-6256-C772-254605D9E554"
+        }
+      ],
+      "name": "",
+      "id": "wupin"
+    }
+  }
+}
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionVO.java
new file mode 100644
index 0000000..f05a681
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionVO.java
@@ -0,0 +1,60 @@
+package org.springblade.code.vo.universalInter.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("condtion")
+public class CondtionVO {
+    @XStreamAsAttribute
+    private  String classCode;
+    @XStreamAsAttribute
+    private String library;
+    @XStreamAsAttribute
+    private String queryFileds;
+    @XStreamImplicit
+    private List<PropertyVO> pro;
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getQueryFileds() {
+        return queryFileds;
+    }
+
+    public void setQueryFileds(String queryFileds) {
+        this.queryFileds = queryFileds;
+    }
+
+    public List<PropertyVO> getPro() {
+        return pro;
+    }
+
+    public void setPro(List<PropertyVO> pro) {
+        this.pro = pro;
+    }
+
+    @Override
+    public String toString() {
+        return "CondtionVO{" +
+                "classCode='" + classCode + '\'' +
+                ", library='" + library + '\'' +
+                ", queryFileds='" + queryFileds + '\'' +
+                ", pro=" + pro +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionsVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionsVO.java
new file mode 100644
index 0000000..534ad93
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionsVO.java
@@ -0,0 +1,48 @@
+package org.springblade.code.vo.universalInter.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.vci.mdm.model.universalInter.apply.UserVO;
+
+@XStreamAlias("condtions")
+public class CondtionsVO {
+    @XStreamAsAttribute
+    private  String systemId;
+
+    private UserVO user;
+
+    private CondtionVO condtion;
+
+    public String getSystemId() {
+        return systemId;
+    }
+
+    public void setSystemId(String systemId) {
+        this.systemId = systemId;
+    }
+
+    public UserVO getUser() {
+        return user;
+    }
+
+    public void setUser(UserVO user) {
+        this.user = user;
+    }
+
+    public CondtionVO getCondtion() {
+        return condtion;
+    }
+
+    public void setCondtion(CondtionVO condtion) {
+        this.condtion = condtion;
+    }
+
+    @Override
+    public String toString() {
+        return "CondtionsVO{" +
+                "systemId='" + systemId + '\'' +
+                ", user=" + user +
+                ", condtion=" + condtion +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataCondtionsVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataCondtionsVO.java
new file mode 100644
index 0000000..4a4795d
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataCondtionsVO.java
@@ -0,0 +1,20 @@
+package org.springblade.code.vo.universalInter.data;
+
+public class DataCondtionsVO {
+    private CondtionsVO condtions;
+
+    public CondtionsVO getCondtions() {
+        return condtions;
+    }
+
+    public void setCondtions(CondtionsVO condtions) {
+        this.condtions = condtions;
+    }
+
+    @Override
+    public String toString() {
+        return "DataCondtionsVO{" +
+                "condtions=" + condtions +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataObjectVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataObjectVO.java
new file mode 100644
index 0000000..8e36472
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/DataObjectVO.java
@@ -0,0 +1,72 @@
+package org.springblade.code.vo.universalInter.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("object")
+public class DataObjectVO {
+    @XStreamAsAttribute
+    private String code;
+    @XStreamAsAttribute
+    private String  status;
+    @XStreamAsAttribute
+    private  String library;
+    @XStreamAsAttribute
+    private String classCode;
+    @XStreamImplicit
+    private List<PropertyVO> pro;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public List<PropertyVO> getPro() {
+        return pro;
+    }
+
+    public void setPro(List<PropertyVO> pro) {
+        this.pro = pro;
+    }
+
+    @Override
+    public String toString() {
+        return "DataObjectVO{" +
+                "code='" + code + '\'' +
+                ", status='" + status + '\'' +
+                ", library='" + library + '\'' +
+                ", classCode='" + classCode + '\'' +
+                ", pro=" + pro +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/PropertyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/PropertyVO.java
new file mode 100644
index 0000000..08c096a
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/PropertyVO.java
@@ -0,0 +1,48 @@
+package org.springblade.code.vo.universalInter.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("pro")
+public class PropertyVO {
+    @XStreamAsAttribute
+    private String filedName;
+    @XStreamAsAttribute
+    private String outname;
+
+    @XStreamAsAttribute
+    private String filedValue;
+
+    public String getFiledName() {
+        return filedName;
+    }
+
+    public void setFiledName(String filedName) {
+        this.filedName = filedName;
+    }
+
+    public String getFiledValue() {
+        return filedValue;
+    }
+
+    public void setFiledValue(String filedValue) {
+        this.filedValue = filedValue;
+    }
+
+    public String getOutname() {
+        return outname;
+    }
+
+    public void setOutname(String outname) {
+        this.outname = outname;
+    }
+
+    @Override
+    public String toString() {
+        return "PropertyVO{" +
+                "filedName='" + filedName + '\'' +
+                ", outname='" + outname + '\'' +
+                ", filedValue='" + filedValue + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultDataVO.java
new file mode 100644
index 0000000..b6a91f7
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultDataVO.java
@@ -0,0 +1,47 @@
+package org.springblade.code.vo.universalInter.data;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.util.List;
+
+@XStreamAlias("data")
+public class ResultDataVO {
+    private String errorid;
+    private String msg;
+    @XStreamImplicit
+    private List<DataObjectVO> object;
+
+    public List<DataObjectVO> getObject() {
+        return object;
+    }
+
+    public void setObject(List<DataObjectVO> object) {
+        this.object = object;
+    }
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultDataVO{" +
+                "errorid='" + errorid + '\'' +
+                ", msg='" + msg + '\'' +
+                ", object=" + object +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultVO.java
new file mode 100644
index 0000000..afd9528
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/ResultVO.java
@@ -0,0 +1,21 @@
+package org.springblade.code.vo.universalInter.data;
+
+public class ResultVO {
+
+    private ResultDataVO data;
+
+    public ResultDataVO getData() {
+        return data;
+    }
+
+    public void setData(ResultDataVO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultVO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/result.json b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/result.json
new file mode 100644
index 0000000..d9d24f7
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/result.json
@@ -0,0 +1,135 @@
+{
+  "data": {
+    "classifys": {
+      "classify": [
+        {
+          "classCode": "010301",
+          "fullclsfNamePath": "",
+          "library": "EqpLib",
+          "objects": {
+            "object": [
+              {
+                "code": "",
+                "creator": "weidy",
+                "id": "20",
+                "operate": "create",
+                "prop": [
+                  {
+                    "key": "fpNo",
+                    "text": "璁惧鍨嬪彿",
+                    "value": "11sdsa22"
+                  },
+                  {
+                    "key": "fpName",
+                    "text": "璁惧鍚嶇О",
+                    "value": "椤堕《椤堕《12"
+                  },
+                  {
+                    "key": "manufacturer",
+                    "text": "鐢熶骇鍘傚",
+                    "value": "鍛滃憸鍛滃憸2"
+                  },
+                  {
+                    "key": "belongSystem",
+                    "text": "鎵�灞炵郴缁�",
+                    "value": "鍛滃憸鍛滃憸2"
+                  },
+                  {
+                    "key": "responsibilityInfo",
+                    "text": "璐d换浜轰俊鎭�",
+                    "value": "鏂囧憙鍛冨憙2"
+                  },
+                  {
+                    "key": "fpWeight",
+                    "text": "閲嶉噺锛圞G锛�",
+                    "value": "12"
+                  },
+                  {
+                    "key": "gravityX",
+                    "text": "閲嶅績X",
+                    "value": "22"
+                  },
+                  {
+                    "key": "gravityY",
+                    "text": "閲嶅績Y",
+                    "value": "32"
+                  },
+                  {
+                    "key": "gravityZ",
+                    "text": "閲嶅績Z",
+                    "value": "42"
+                  },
+                  {
+                    "key": "inertiaX",
+                    "text": "杞姩鎯噺X",
+                    "value": "52"
+                  },
+                  {
+                    "key": "inertiaY",
+                    "text": "杞姩鎯噺Y",
+                    "value": "62"
+                  },
+                  {
+                    "key": "inertiaZ",
+                    "text": "杞姩鎯噺Z",
+                    "value": "72"
+                  },
+                  {
+                    "key": "inertiaXY",
+                    "text": "杞姩鎯噺XY",
+                    "value": "82"
+                  },
+                  {
+                    "key": "inertiaYZ",
+                    "text": "杞姩鎯噺YZ",
+                    "value": "92"
+                  },
+                  {
+                    "key": "inertiaXZ",
+                    "text": "杞姩鎯噺XZ",
+                    "value": "102"
+                  },
+                  {
+                    "key": "operatingTemperatureLimit",
+                    "text": "宸ヤ綔娓╁害闄愬埗",
+                    "value": "162"
+                  },
+                  {
+                    "key": "equipmentPower",
+                    "text": "璁惧鍔熺巼锛堜緵鐢靛姛鐜囥�佽緪灏勫姛鐜囷級",
+                    "value": "172"
+                  },
+                  {
+                    "key": "electricModel",
+                    "text": "鐢佃繛鎺ュ櫒鍨嬪彿",
+                    "value": "182"
+                  },
+                  {
+                    "key": "fpAgreement",
+                    "text": "鎴愬搧鍗忚涔�",
+                    "value": "192"
+                  }
+                ],
+                "status": "Released"
+              }
+            ]
+          },
+          "sections": {
+            "section": [
+              {
+                "name": "灞傜骇鐮佹",
+                "value": "010301"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    "systemId": "RLM",
+    "user": {
+      "ip": "0:0:0:0:0:0:0:1",
+      "trueName": "weidy",
+      "userName": "weidy"
+    }
+  }
+}
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/xx.xml b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/xx.xml
new file mode 100644
index 0000000..3f4ad46
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/xx.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<data>
+    <object>
+        <code>01001</code>
+        <oid>0001</oid>
+        <erroid>0</erroid>
+        <msg>娴嬭瘯鎴愬姛</msg>
+    </object>
+</data>
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfyVO.java
new file mode 100644
index 0000000..0dc0365
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfyVO.java
@@ -0,0 +1,49 @@
+package org.springblade.code.vo.universalInter.result.json;
+
+public class JSONResultClassfyVO {
+    private  String classCode;
+    private  String library;
+    private  String fullclsfNamePath;
+    private JSONResultDataObjectDO  objects;
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getFullclsfNamePath() {
+        return fullclsfNamePath;
+    }
+
+    public void setFullclsfNamePath(String fullclsfNamePath) {
+        this.fullclsfNamePath = fullclsfNamePath;
+    }
+
+    public JSONResultDataObjectDO getObjects() {
+        return objects;
+    }
+
+    public void setObjects(JSONResultDataObjectDO objects) {
+        this.objects = objects;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultClassfyVO{" +
+                "classCode='" + classCode + '\'' +
+                ", library='" + library + '\'' +
+                ", fullclsfNamePath='" + fullclsfNamePath + '\'' +
+                ", objects=" + objects +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfysVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfysVO.java
new file mode 100644
index 0000000..da0269f
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultClassfysVO.java
@@ -0,0 +1,21 @@
+package org.springblade.code.vo.universalInter.result.json;
+
+import java.util.List;
+public class JSONResultClassfysVO {
+    private List<JSONResultClassfyVO> classify;
+
+    public List<JSONResultClassfyVO> getClassify() {
+        return classify;
+    }
+
+    public void setClassify(List<JSONResultClassfyVO> classify) {
+        this.classify = classify;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultClassfysVO{" +
+                "classfy=" + classify +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDO.java
new file mode 100644
index 0000000..336fa55
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDO.java
@@ -0,0 +1,26 @@
+package org.springblade.code.vo.universalInter.result.json;
+
+import java.util.List;
+
+/***
+ * objects鑺傜偣
+ * @author xj
+ */
+public class JSONResultDataObjectDO {
+    /***
+     * objects涓嬫暟鎹璞�
+     */
+    private List<JSONResultDataObjectDetailDO> object ;
+    public List<JSONResultDataObjectDetailDO> getObject() {
+        return object;
+    }
+    public void setObject(List<JSONResultDataObjectDetailDO> object) {
+        this.object = object;
+    }
+    @Override
+    public String toString() {
+        return "ResultDataObjectDO{" +
+                "object=" + object +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java
new file mode 100644
index 0000000..af09a28
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataObjectDetailDO.java
@@ -0,0 +1,62 @@
+package org.springblade.code.vo.universalInter.result.json;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+/***
+ * object鑺傜偣
+ * @author xj
+ */
+@XStreamAlias("obect")
+public class JSONResultDataObjectDetailDO {
+    @XStreamAsAttribute
+    private String  id;
+    @XStreamAsAttribute
+    private  String errorid;
+    @XStreamAsAttribute
+    private String code;
+    @XStreamAlias("msg")
+    private String msg;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultDataObjectDetailDO{" +
+                "id='" + id + '\'' +
+                ", errorid='" + errorid + '\'' +
+                ", code='" + code + '\'' +
+                ", msg='" + msg + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataVO.java
new file mode 100644
index 0000000..dd2584d
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultDataVO.java
@@ -0,0 +1,19 @@
+package org.springblade.code.vo.universalInter.result.json;
+public class JSONResultDataVO {
+    private JSONResultSystemVO data;
+
+    public JSONResultSystemVO getData() {
+        return data;
+    }
+
+    public void setData(JSONResultSystemVO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultDataVO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultSystemVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultSystemVO.java
new file mode 100644
index 0000000..489f0bb
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/JSONResultSystemVO.java
@@ -0,0 +1,52 @@
+package org.springblade.code.vo.universalInter.result.json;
+
+/***
+ * 杩斿洖缁撴灉瀵硅薄
+ */
+public class JSONResultSystemVO {
+    /***
+     * 閿欒鏍囪瘑
+     */
+    private String errorid;
+    /***
+     * 娑堟伅
+     */
+    private  String msg;
+    /**
+     * 杩斿洖缁撴灉瀵硅薄
+     */
+    private  JSONResultClassfysVO classifys;
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public JSONResultClassfysVO getClassifys() {
+        return classifys;
+    }
+
+    public void setClassifys(JSONResultClassfysVO classifys) {
+        this.classifys = classifys;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultSystemVO{" +
+                "errorid='" + errorid + '\'' +
+                ", msg='" + msg + '\'' +
+                ", classifys=" + classifys +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/tt.json b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/tt.json
new file mode 100644
index 0000000..848d6d3
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/json/tt.json
@@ -0,0 +1,62 @@
+{
+  "data": {
+    "classifys": {
+      "classfy": [
+        {
+          "fullclsfNamePath": "鐗╁搧##VCI##鏍囧噯浠�##VCI##铻烘爴",
+          "classCode": "020101",
+          "library": "wupin",
+          "objecs": {
+            "object": [
+              {
+                "msg": ";鍏抽敭灞炴�ч噸澶�",
+                "code": "",
+                "errorid": "1",
+                "id": "0023401"
+              },
+              {
+                "msg": ";鍏抽敭灞炴�ч噸澶�;灞炴�鐗╂枡绫诲瀷]鐨勫�间笉绗﹀悎涓嬫媺鐨勮姹�;鍙傛暟灞炴�鏍哥畻鍒嗙被]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�璁¢噺鍗曚綅]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�渚涘簲鍟哴鐨勫�煎湪绯荤粺涓笉瀛樺湪;",
+                "code": "",
+                "errorid": "1",
+                "id": "71467898-22DB-0D63-3D27-86FD7A124D25"
+              },
+              {
+                "msg": ";鍏抽敭灞炴�ч噸澶�;灞炴�鐗╂枡绫诲瀷]鐨勫�间笉绗﹀悎涓嬫媺鐨勮姹�;鍙傛暟灞炴�鏍哥畻鍒嗙被]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�璁¢噺鍗曚綅]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�渚涘簲鍟哴鐨勫�煎湪绯荤粺涓笉瀛樺湪;;灞炴�鐗╂枡绫诲瀷]鐨勫�间笉绗﹀悎涓嬫媺鐨勮姹�;鍙傛暟灞炴�鏍哥畻鍒嗙被]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�璁¢噺鍗曚綅]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�渚涘簲鍟哴鐨勫�煎湪绯荤粺涓笉瀛樺湪;",
+                "code": "",
+                "errorid": "1",
+                "id": "A9B58A76-751E-C96C-D410-CD4B5DD53800"
+              }
+            ]
+          }
+        },
+        {
+          "fullclsfNamePath": "鐗╁搧##VCI##鏍囧噯浠�##VCI##铻烘瘝",
+          "classCode": "020102",
+          "library": "wupin",
+          "objecs": {
+            "object": [
+              {
+                "msg": ";鍏抽敭灞炴�ч噸澶�",
+                "code": "",
+                "errorid": "1",
+                "id": "0023401"
+              },
+              {
+                "msg": ";鍏抽敭灞炴�ч噸澶�;灞炴�鐗╂枡绫诲瀷]鐨勫�间笉绗﹀悎涓嬫媺鐨勮姹�;鍙傛暟灞炴�鏍哥畻鍒嗙被]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�璁¢噺鍗曚綅]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�渚涘簲鍟哴鐨勫�煎湪绯荤粺涓笉瀛樺湪;",
+                "code": "",
+                "errorid": "1",
+                "id": "454997A3-2F9F-73FC-3BFB-B33DEC77DC73"
+              },
+              {
+                "msg": ";鍏抽敭灞炴�ч噸澶�;灞炴�鐗╂枡绫诲瀷]鐨勫�间笉绗﹀悎涓嬫媺鐨勮姹�;鍙傛暟灞炴�鏍哥畻鍒嗙被]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�璁¢噺鍗曚綅]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�渚涘簲鍟哴鐨勫�煎湪绯荤粺涓笉瀛樺湪;;灞炴�鐗╂枡绫诲瀷]鐨勫�间笉绗﹀悎涓嬫媺鐨勮姹�;鍙傛暟灞炴�鏍哥畻鍒嗙被]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�璁¢噺鍗曚綅]鐨勫�煎湪绯荤粺涓笉瀛樺湪;鍙傛暟灞炴�渚涘簲鍟哴鐨勫�煎湪绯荤粺涓笉瀛樺湪;",
+                "code": "",
+                "errorid": "1",
+                "id": "39ABD489-177C-2894-EF16-1249F7625FC5"
+              }
+            ]
+          }
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultClassfyVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultClassfyVO.java
new file mode 100644
index 0000000..93bd32b
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultClassfyVO.java
@@ -0,0 +1,60 @@
+package org.springblade.code.vo.universalInter.result.xml;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+import java.util.List;
+
+@XStreamAlias("classfy")
+public class XMLResultClassfyVO {
+    @XStreamAsAttribute
+    private  String classCode;
+    @XStreamAsAttribute
+    private  String library;
+    @XStreamAsAttribute
+    private  String fullclsfNamePath;
+    @XStreamAlias("objects")
+    private List<XMLResultDataObjectDetailDO> objects;
+
+    public String getClassCode() {
+        return classCode;
+    }
+
+    public void setClassCode(String classCode) {
+        this.classCode = classCode;
+    }
+
+    public String getLibrary() {
+        return library;
+    }
+
+    public void setLibrary(String library) {
+        this.library = library;
+    }
+
+    public String getFullclsfNamePath() {
+        return fullclsfNamePath;
+    }
+
+    public void setFullclsfNamePath(String fullclsfNamePath) {
+        this.fullclsfNamePath = fullclsfNamePath;
+    }
+
+    public List<XMLResultDataObjectDetailDO> getObjects() {
+        return objects;
+    }
+
+    public void setObjects(List<XMLResultDataObjectDetailDO> objects) {
+        this.objects = objects;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultClassfyVO{" +
+                "classCode='" + classCode + '\'' +
+                ", library='" + library + '\'' +
+                ", fullclsfNamePath='" + fullclsfNamePath + '\'' +
+                ", objects=" + objects +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java
new file mode 100644
index 0000000..ccc44fc
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataObjectDetailDO.java
@@ -0,0 +1,62 @@
+package org.springblade.code.vo.universalInter.result.xml;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+/***
+ * object鑺傜偣
+ * @author xj
+ */
+@XStreamAlias("object")
+public class XMLResultDataObjectDetailDO {
+    @XStreamAsAttribute
+    private String  id;
+    @XStreamAsAttribute
+    private  String errorid;
+    @XStreamAsAttribute
+    private String code;
+    @XStreamAlias("msg")
+    private String msg;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultDataObjectDetailDO{" +
+                "id='" + id + '\'' +
+                ", errorid='" + errorid + '\'' +
+                ", code='" + code + '\'' +
+                ", msg='" + msg + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataVO.java
new file mode 100644
index 0000000..0bc8b18
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultDataVO.java
@@ -0,0 +1,19 @@
+package org.springblade.code.vo.universalInter.result.xml;
+
+public class XMLResultDataVO {
+    private XMLResultSystemVO data;
+    public XMLResultSystemVO getData() {
+        return data;
+    }
+
+    public void setData(XMLResultSystemVO data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultDataVO{" +
+                "data=" + data +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultSystemVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultSystemVO.java
new file mode 100644
index 0000000..a8129bb
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/result/xml/XMLResultSystemVO.java
@@ -0,0 +1,61 @@
+package org.springblade.code.vo.universalInter.result.xml;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+import java.util.List;
+
+/***
+ * 杩斿洖缁撴灉瀵硅薄
+ */
+@XStreamAlias("data")
+public class XMLResultSystemVO {
+    /***
+     * 閿欒鏍囪瘑
+     */
+    @XStreamAsAttribute
+    private String errorid;
+    /***
+     * 娑堟伅
+     */
+    @XStreamAlias("msg")
+    private  String msg;
+    /**
+     * 杩斿洖缁撴灉瀵硅薄
+     */
+    @XStreamAlias("classifys")
+    private List<XMLResultClassfyVO> classifys;
+
+    public String getErrorid() {
+        return errorid;
+    }
+
+    public void setErrorid(String errorid) {
+        this.errorid = errorid;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public List<XMLResultClassfyVO> getClassifys() {
+        return classifys;
+    }
+
+    public void setClassifys(List<XMLResultClassfyVO> classifys) {
+        this.classifys = classifys;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultSystemVO{" +
+                "errorid='" + errorid + '\'' +
+                ", msg='" + msg + '\'' +
+                ", classifys=" + classifys +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/pom.xml b/Source/BladeX/blade-service-api/pom.xml
index 1dbd39c..b4a57f8 100644
--- a/Source/BladeX/blade-service-api/pom.xml
+++ b/Source/BladeX/blade-service-api/pom.xml
@@ -21,6 +21,7 @@
         <module>blade-scope-api</module>
         <module>blade-system-api</module>
         <module>blade-user-api</module>
+        <module>blade-code-api</module>
     </modules>
 
     <dependencies>
diff --git a/Source/BladeX/blade-service/blade-code/pom.xml b/Source/BladeX/blade-service/blade-code/pom.xml
new file mode 100644
index 0000000..7c468a7
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/pom.xml
@@ -0,0 +1,145 @@
+<?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>
+        <groupId>org.springblade</groupId>
+        <artifactId>blade-service</artifactId>
+        <version>3.0.1.RELEASE</version>
+    </parent>
+
+    <artifactId>blade-code</artifactId>
+    <name>${project.artifactId}</name>
+    <version>${bladex.project.version}</version>
+    <packaging>jar</packaging>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <axis2.version>1.7.9</axis2.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-platform-web</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-platform-webservice</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.vci.mdm</groupId>
+            <artifactId>vci-mdm-wrj-webducking</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>de.odysseus.staxon</groupId>
+            <artifactId>staxon</artifactId>
+            <version>1.3</version>
+        </dependency>
+
+        <!--axis2 begin -->
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-adb</artifactId>
+            <version>${axis2.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-kernel</artifactId>
+            <version>${axis2.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-transport-http</artifactId>
+            <version>${axis2.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax-servlet</groupId>
+                    <artifactId>servlet-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-transport-local</artifactId>
+            <version>${axis2.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-jaxws</artifactId>
+            <version>${axis2.version}</version>
+        </dependency>
+        <!--axis2 end -->
+
+        <!--webservice鐨勫唴瀹�-->
+        <dependency>
+            <groupId>com.vci</groupId>
+            <artifactId>vci-platform-webservice</artifactId>
+            <version>2022.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-cloud</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-code-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.8</version>
+                <executions>
+                    <execution>
+                        <id>copy</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                            <excludeGroupIds>com.vci.platform</excludeGroupIds>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>3.0.2</version>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>lib/</classpathPrefix>
+                        </manifest>
+                    </archive>
+                    <excludes>
+                        <exclude>application-dev.yml</exclude>
+                        <exclude>application-prod.yml</exclude>
+                        <exclude>application.yml</exclude>
+                        <exclude>properties/conf.properties</exclude>
+                        <exclude>properties/eventConf.properties</exclude>
+                        <exclude>lib/*</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/CodeApplication.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/CodeApplication.java
new file mode 100644
index 0000000..0d962af
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/CodeApplication.java
@@ -0,0 +1,36 @@
+/*
+ *      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 org.springblade.code;
+
+import org.springblade.core.cloud.client.BladeCloudApplication;
+import org.springblade.core.launch.BladeApplication;
+import org.springblade.core.launch.constant.AppConstant;
+
+/**
+ * Desk鍚姩鍣�
+ *
+ * @author ludc
+ */
+@BladeCloudApplication
+public class CodeApplication {
+
+	public static void main(String[] args) {
+		BladeApplication.run(AppConstant.APPLICATION_DESK_NAME, CodeApplication.class, args);
+	}
+
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingClassSyncScheduling.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingClassSyncScheduling.java
new file mode 100644
index 0000000..c3d10f2
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingClassSyncScheduling.java
@@ -0,0 +1,56 @@
+package org.springblade.code.Scheduling;
+
+import com.vci.mdm.service.CodeDuckingSyncServiceI;
+import com.vci.starter.web.enumpck.BooleanEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 闆嗘垚浠诲姟瀹氭椂鍣�
+ * 鎻掑叆dockingtask涓�
+ * 浠巇ockingtask涓彇鍑烘潵鏁版嵁锛屾帹閫佸嚭鍘荤殑鎿嶄綔
+ */
+@Component
+public class DockingClassSyncScheduling {
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Resource
+    private CodeDuckingSyncServiceI codeDuckingSyncServiceI;
+
+    @Value("${clsfSyncPush.isStart:false}")
+    public boolean CLSF_SYNC_PUSH_ISSTARE;
+
+    /**
+     * 鏄惁鍒濆鍖栧畬鎴愪簡
+     */
+    public static volatile String FINISH_INIT = "false";
+
+    /**
+     * 鍦ㄥ垵濮嬪寲瀹屾垚鍚庢墽琛�
+     */
+    @PostConstruct()
+    public void onInit(){
+        FINISH_INIT = "true";
+    }
+
+    //榛樿姣忓垎閽熸墽琛屾柟娉�
+    @Scheduled(cron = "${clsfSyncPush.cronTime:0 0/10 * * * ?}")
+    public void scheduled() {
+        if(CLSF_SYNC_PUSH_ISSTARE && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
+            codeDuckingSyncServiceI.DockingClassSyncScheduing();
+            SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
+            String time = formatter.format(new Date());
+            String outinfo = "============鍦� "+time+" 鎵ц浜嗗垎绫婚泦鎴愭帹閫�";
+            logger.info(outinfo);
+        }
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingDataSyncScheduling.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingDataSyncScheduling.java
new file mode 100644
index 0000000..38f6e7d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingDataSyncScheduling.java
@@ -0,0 +1,56 @@
+package org.springblade.code.Scheduling;
+
+import com.vci.mdm.service.CodeDuckingSyncServiceI;
+import com.vci.starter.web.enumpck.BooleanEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 闆嗘垚浠诲姟瀹氭椂鍣�
+ * 鎻掑叆dockingtask涓�
+ * 浠巇ockingtask涓彇鍑烘潵鏁版嵁锛屾帹閫佸嚭鍘荤殑鎿嶄綔
+ */
+@Component
+public class DockingDataSyncScheduling {
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Resource
+    private CodeDuckingSyncServiceI codeDuckingSyncServiceI;
+
+    @Value("${dataSyncPush.isStart:false}")
+    public boolean DATA_SYNC_PUSH_ISSTARE;
+
+    /**
+     * 鏄惁鍒濆鍖栧畬鎴愪簡
+     */
+    public static volatile String FINISH_INIT = "false";
+
+    /**
+     * 鍦ㄥ垵濮嬪寲瀹屾垚鍚庢墽琛�
+     */
+    @PostConstruct()
+    public void onInit(){
+        FINISH_INIT = "true";
+    }
+
+    //榛樿姣忓垎閽熸墽琛屾柟娉�
+    @Scheduled(cron = "${dataSyncPush.cronTime:0 0/10 * * * ?}")
+    public void scheduled() {
+        if(DATA_SYNC_PUSH_ISSTARE && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
+            codeDuckingSyncServiceI.DockingDataSyncScheduing();
+            SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
+            String time = formatter.format(new Date());
+            String outinfo = "============鍦� "+time+" 鎵ц浜嗕富鏁版嵁闆嗘垚鏁版嵁鎺ㄩ��";
+            logger.info(outinfo);
+        }
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingScheduling.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingScheduling.java
new file mode 100644
index 0000000..81b8f41
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingScheduling.java
@@ -0,0 +1,56 @@
+package org.springblade.code.Scheduling;
+
+import com.vci.mdm.service.CodeDuckingServiceI;
+import com.vci.starter.web.enumpck.BooleanEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 闆嗘垚浠诲姟瀹氭椂鍣�
+ * 鎻掑叆dockingtask涓�
+ * 浠巇ockingtask涓彇鍑烘潵鏁版嵁锛屾帹閫佸嚭鍘荤殑鎿嶄綔
+ */
+@Component
+public class DockingScheduling {
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Resource
+    private CodeDuckingServiceI codeDuckingServiceI;
+
+    @Value("${docking.insertCache2:false}")
+    public boolean INSERT_CACHE2;
+
+    /**
+     * 鏄惁鍒濆鍖栧畬鎴愪簡
+     */
+    public static volatile String FINISH_INIT = "false";
+
+    /**
+     * 鍦ㄥ垵濮嬪寲瀹屾垚鍚庢墽琛�
+     */
+    @PostConstruct()
+    public void onInit(){
+        FINISH_INIT = "true";
+    }
+
+    //榛樿姣忓垎閽熸墽琛屾柟娉�
+    @Scheduled(cron = "${docking.cron:0 0/10 * * * ?}")
+    public void scheduled() {
+        if(INSERT_CACHE2 && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
+            codeDuckingServiceI.DockingScheduing();
+            SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
+            String time = formatter.format(new Date());
+            String outinfo = "============鍦� "+time+" 鎵ц浜嗕富鏁版嵁闆嗘垚鏁版嵁鎺ㄩ��";
+            logger.info(outinfo);
+        }
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/algorithm/CustomSerialAlgorithmExample.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/algorithm/CustomSerialAlgorithmExample.java
new file mode 100644
index 0000000..10aeb67
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/algorithm/CustomSerialAlgorithmExample.java
@@ -0,0 +1,20 @@
+package org.springblade.code.algorithm;
+
+import org.springblade.code.annotation.MdmSerialAlgorithm;
+import org.springblade.code.annotation.MdmSerialAlgorithmMethod;
+
+/**
+ * 娴佹按绠楁硶鐨勭ず渚�
+ */
+@MdmSerialAlgorithm(text = "娴佹按绠楁硶鐨勭ず渚�",description = "璇蜂笉瑕佷娇鐢ㄨ繖涓被锛岃繖涓被鍙槸绀轰緥锛岀敤浜庢煡鐪嬪浣曠紪鍐欐祦姘寸畻娉�")
+public class CustomSerialAlgorithmExample {
+
+    /**
+     * 鐢熸垚娴佹按鍙风殑鏂规硶
+     * @return 娴佹按鍙风殑淇℃伅
+     */
+    @MdmSerialAlgorithmMethod
+    public String serialGenerate(){
+        return "";
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMap.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMap.java
new file mode 100644
index 0000000..b0dc7bd
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMap.java
@@ -0,0 +1,28 @@
+package org.springblade.code.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 闆嗘垚鏃惰嚜瀹氫箟鐨勮浆鎹㈢被
+ * @author weidy
+ * @date 2022-1-18
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MdmIntegrationMap {
+
+    /**
+     * 鍊硷紝瀹為檯灏辨槸杩欎釜娉ㄨВ鎵�鍦ㄧ殑绫荤殑鍏ㄨ矾寰�
+     * @return 鍊�
+     */
+    String value() default "";
+
+    /**
+     * 浜嬩欢鐨勫悕绉�
+     * @return 浜嬩欢鍚嶇О
+     */
+    String text();
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMapMethod.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMapMethod.java
new file mode 100644
index 0000000..a8d54f9
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmIntegrationMapMethod.java
@@ -0,0 +1,24 @@
+package org.springblade.code.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 闆嗘垚鏃惰嚜瀹氫箟鐨勮浆鎹㈡柟娉�
+ * @author weidy
+ * @date 2022-1-18
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MdmIntegrationMapMethod {
+
+    /**
+     * 鍊硷紝
+     * @return 鍊�
+     */
+    String value() default "";
+
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithm.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithm.java
new file mode 100644
index 0000000..138a7d3
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithm.java
@@ -0,0 +1,37 @@
+package org.springblade.code.annotation;
+
+import org.springframework.stereotype.Component;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鑷畾涔夋祦姘寸畻娉曠殑娉ㄨВ
+ * @author weidy
+ * @date 2022-1-18
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Component
+public @interface MdmSerialAlgorithm {
+
+    /**
+     * 鍊硷紝瀹為檯灏辨槸杩欎釜娉ㄨВ鎵�鍦ㄧ殑绫荤殑鍏ㄨ矾寰�
+     * @return 鍊�
+     */
+    String value() default "";
+
+    /**
+     * 浜嬩欢鐨勫悕绉�
+     * @return 浜嬩欢鍚嶇О
+     */
+    String text();
+
+    /**
+     * 鎻忚堪
+     * @return 鎻忚堪
+     */
+    String description() default "";
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithmMethod.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithmMethod.java
new file mode 100644
index 0000000..1603394
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/annotation/MdmSerialAlgorithmMethod.java
@@ -0,0 +1,23 @@
+package org.springblade.code.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鑷畾涔夋祦姘寸畻娉曞鐞嗘柟娉曠殑娉ㄨВ
+ * @author weidy
+ * @date 2022-1-18
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MdmSerialAlgorithmMethod {
+
+    /**
+     * 鍊�
+     * @return 鍊�
+     */
+    String value() default "";
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmBtmTypeConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmBtmTypeConstant.java
new file mode 100644
index 0000000..df3ad1a
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmBtmTypeConstant.java
@@ -0,0 +1,169 @@
+package org.springblade.code.constant;
+
+/**
+ * 涓绘暟鎹浉鍏崇殑涓氬姟绫诲瀷缂栧彿
+ */
+public class MdmBtmTypeConstant {
+
+    /**
+     * 涓婚搴撳垎绫�
+     */
+    public static final String CODE_CLASSIFY = "codeclassify";
+    /**
+     * 涓婚搴撳垎绫诲寘鍚殑妯℃澘
+     */
+    public static final String CODE_CLASSIFY_TEMPLATE = "codeclstemplate";
+    /**
+     * 涓婚搴撳垎绫绘ā鏉� 鍖呭惈鐨勫睘鎬�
+     */
+    public static final String CODE_CLASSIFY_TEMPLATE_ATTR = "codeclstempattr";
+
+    /**
+     * 涓绘暟鎹腑鐨勬寜閽墿灞�
+     */
+    public static final String CODE_BUTTON = "codebutton";
+    /**
+     * 涓绘暟鎹腑鐨勬ā鏉垮叧鑱旂殑鎸夐挳
+     */
+    public static final String CODE_TEMPLATE_BUTTON = "codetempbutton";
+    /**
+     * 涓绘暟鎹腑鐨勭紪鐮佽鍒�
+     */
+    public static final String CODE_RULE = "coderule";
+
+
+    /**
+     * 鍏抽敭灞炴�у垽鏂噸澶�
+     */
+    public static final String CODE_KEY_ATTR_REPEAT_RULE = "codekeyattrrepeat";
+
+    /**
+     * 鐩镐技鏌ヨ瑙勫垯
+     */
+    public static final String CODE_RESEMBLE_RULE = "coderesemblerule";
+    /**
+     * 妯℃澘闃舵
+     */
+    public static final String CODE_TEMPLATE_PHASE = "codetempphase";
+    /**
+     * 闃舵鐨勫睘鎬�
+     */
+    public static final String CODE_PHASE_ATTR = "codephaseattr";
+
+    /**
+     * 涓绘暟鎹垎绫讳娇鐢ㄧ殑娴佺▼妯℃澘
+     */
+    public static final String CODE_CLASSIFY_PROCESS_TEMPLATE = "codeclsflowtemp";
+
+    /**
+     *鍒嗙被鐨勬ā鏉垮搴旀祦绋嬩腑鐨勯樁娈甸厤缃�
+     */
+    public static final String CODE_CLASSIFY_PROCESS_PHASE = "codeclsflowphase" ;
+
+    /**
+     * 鍥哄畾鐮佺殑鐮佸��
+     */
+    public static final String CODE_FIXED_VALUE = "codefixedvalue";
+
+    /**
+     * 鍒嗙被鐮佺殑鐮佸��
+     */
+    public static final String CODE_CLASSIFY_VALUE = "codeclassifyvalue";
+
+    /**
+     * 鏄犲皠瑙勫垯
+     */
+    public static final String CODE_TEMPLATE_MAP = "codetempmap";
+    /**
+     * 鏄犲皠瑙勫垯鏄庣粏
+     */
+    public static final String CODE_TEMPLATE_MAP_ITEM = "codetempmapitem";
+    /**
+     * 鐮佹鍩虹淇℃伅
+     */
+    public static final String CODE_BASIC_SEC = "codebasicsec";
+
+    /**
+     * 鍚屼箟璇嶉厤缃�
+     */
+    public static final String CODE_SYNONYM = "codesynonym";
+    /**
+     * 鍏ㄩ儴鐨勭爜鍊�
+     */
+    public static final String CODE_ALL_CODE = "codeallcode";
+
+    /**
+     * 缂栫爜瑙勫垯鐨勬祦姘村��
+     */
+    public static final String CODE_SERIAL_VALUE = "codeserialvalue" ;
+
+    /**
+     * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇�
+     */
+    public static final String DOCKING_LOGE = "codedockinglog";
+
+    /**
+     * 璧勬簮瀵规帴瑙﹀彂鍣ㄦ彃鍏ヨ鎺ㄩ�佺殑鏁版嵁
+     */
+    public static final String DOCKING_DATA = "codedockingdata";
+
+    /**
+     * 璧勬簮瀵规帴瑙﹀彂鍣ㄦ彃鍏ヨ鎺ㄩ�佺殑鏁版嵁鍜岀郴缁熶俊鎭�
+     */
+    public static final String DOCKING_TASK = "codedockingtask";
+
+    /**
+     * 棰勭敵璇锋暟鎹�
+     */
+    public static final String DOCKING_PRE_APPLY_DATA = "dockingpadata";
+
+    /**
+     * 棰勭敵璇锋暟鎹俊鎭�
+     */
+    public static final String DOCKING_PRE_APPLY_DATA_INFO = "dockingpadatainfo";
+
+    /**
+     * 绯荤粺闆嗘垚鐨勭郴缁�
+     */
+    public static final String SYS_INT_BASE = "sysintbase";
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛鐨勫熀纭�淇℃伅
+     */
+    public static final String SYS_INT_INFO = "sysintinfo";
+
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹柟寮�
+     */
+    public static final String SYS_INT_AUTHORITY = "sysintauthority";
+
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛鐨勫弬鏁�,http瀵瑰簲鐨刾aramter
+     */
+    public static final String SYS_INT_PARAMTERY = "sysintparemter";
+
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佷俊鎭�,http瀵瑰簲鐨刪eader,webserver瀵瑰簲鐨勮处鍙峰瘑鐮佺瓑淇℃伅
+     */
+    public static final String SYS_INT_HEADER = "sysintheader";
+
+
+    /**
+     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
+     */
+    public static final String DOCKING_PRE_JINTEGMAPCONFIG = "jintegmapconifg";
+
+    /**
+     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
+     */
+    public static final String DOCKING_PRE_JCLASS = "jclass";
+    /**
+     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
+     */
+    public static final String DOCKING_PRE_JMETAATRR = "jmetaattr";
+
+    /**
+     * 闆嗘垚灞炴�ф槧灏勫叧绯讳笟鍔$被鍨�
+     */
+    public static final String DOCKING_PRE_JRANGE = "jrange";
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmDuckingConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmDuckingConstant.java
new file mode 100644
index 0000000..a2f8716
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmDuckingConstant.java
@@ -0,0 +1,146 @@
+package org.springblade.code.constant;
+
+/**
+ * 涓绘暟鎹帹閫佺浉鍏�
+ */
+public class MdmDuckingConstant {
+
+    /**
+     *  dockingtask sendFlag 鎺ㄩ�佹垚鍔�
+     */
+    public static final String SEND_FLAG_TRUE = "true";
+
+    /**
+     * dockingtask sendFlag 鏈帹閫佹垚鍔�
+     */
+    public static final String SEND_FLAG_FALSE = "false";
+
+    /**
+     *  dockingloge interfacestatus 鎺ㄩ�佹垚鍔�
+     */
+    public static final String INTERFACE_STATUS_TRUE = "true";
+
+    /**
+     * dockingloge interfacestatus 鏈帹閫佹垚鍔�
+     */
+    public static final String INTERFACE_STATUS_FALSE = "false";
+
+    /**
+     * 瀛樻斁cache1鐨勬枃浠跺すkey,鏆傛椂涓嶇敤浜�
+     */
+    public static String DOCKING_CACHE1 = "DOCKING_CACHE1";
+
+    /**
+     * 瀛樻斁cache2鍒犻櫎鏁版嵁鐨勬枃浠跺すkey
+     */
+    public static String DOCKING_CACHE2_DELETE = "DOCKING_CACHE2_DELETE:";
+
+    /**
+     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝btmnam=DOCKING_DEFAULT_CLASSIFY
+     */
+    public static String DOCKING_DEFAULT_CLASSIFY = "CODECLASSIFY";
+
+    /**
+     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝classifyoid=DOCKING_DEFAULT_CLASSIFYOID
+     */
+    public static String DOCKING_DEFAULT_CLASSIFYOID = "CODECLASSIFYOID";
+
+    /**
+     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝classifyid=DOCKING_DEFAULT_CLASSIFYID
+     */
+    public static String DOCKING_DEFAULT_CLASSIFYID = "CODECLASSIFY";
+
+    /**
+     * 缁熶竴闆嗘垚锛屽垎绫绘暟鎹慨鏀圭殑鏃跺�欙紝classifyoname=DOCKING_DEFAULT_CLASSIFYNAME
+     */
+    public static String DOCKING_DEFAULT_CLASSIFYNAME = "CODECLASSIFYNAME";
+
+    /**
+     * 杩斿洖鏁版嵁鏍煎紡
+     */
+    public static String DATATYPE_JSON = "json";
+    public static String DATATYPE_XML = "xml";
+
+    public static String URLTYPE_WEBSERVICE = "webservice";
+    public static String URLTYPE_HTTP= "http";
+    public static String URLTYPE_GET = "get";
+    public static String URLTYPE_POST = "post";
+    public static String URLTYPE_CORBA = "corba";
+
+    public static String PARAM_XMLDATA = "xmlData";
+
+    public static String CACHE_TIME="cache_time";//瀛樺偍涓婁竴娆℃墽琛岀殑鏃堕棿
+
+    public static String CACHE_OID="oid";
+    public static String CACHE_BTMID="btmid";
+    public static String CACHE_BTMNAME="btmname";
+    public static String CACHE_TS="ts";
+    public static String CACHE_TYPE="type";
+    public static String CACHE_LCSTATUS="lcstatus";
+    public static String CACHE_CLASSIFYID="classifyid";
+    public static String CACHE_CLASSIFYOID="classifyoid";
+    public static String CACHE_CLASSIFYNAME="classifyname";
+    public static String CACHE_CLASSIFYOID_DDEFAULT="classifyoid";//鍒嗙被鏁版嵁鐨勬椂鍊檕id
+    public static String CACHE_CLASSIFYNAME_DDEFAULT="鍒嗙被鏁版嵁";//鍒嗙被鏁版嵁鐨勬椂鍊欏垎绫诲悕绉�
+
+    public static String PRE_APPLY_DATA_USER_TRUE ="true";//棰勭敵璇风殑鏁版嵁姝e湪浣跨敤锛岃〃绀鸿繖涓猽nique杩欐潯鏁版嵁鏄渶鏂扮殑
+    public static String PRE_APPLY_DATA_USER_FALSE ="false";//棰勭敵璇风殑鏁版嵁鏈娇鐢紝涓嶆槸鏈�鏂扮殑
+
+    //鍙杕pm涓�
+    public static String XML_MPM_MODEL="specification";//瑙勬牸
+    public static String XML_MPM_PARTTYPE="parttype";//闆朵欢鍨嬪彿
+    public static String XML_MPM_UNIT="unit";//鍗曚綅
+
+    //datalog
+    public static String DATA_LOGE_OUT="out";//鎺ㄩ�佹暟鎹�
+    public static String DATA_LOGE_IN="in";//鎺ユ敹鏁版嵁
+
+
+    //瑙f瀽xml
+    public static String XML_OBJECT="object";
+    public static String XML_CODE="code";
+    public static String XML_CODE_SUCCESS="200";
+    public static String XML_CODE_FAIL="500";
+    public static String XML_TYPE="type";
+    public static String XML_SYSTEMID="systemid";
+    public static String XML_SYSTEMID_MPM="MPM";//鍐欐鐨勫伐鑹虹郴缁焛d
+    public static String XML_DATAS="datas";
+    public static String XML_DATA="data";
+    public static String XML_UNIQUE="unique";
+    public static String XML_PROS="props";
+    public static String XML_PRO="prop";
+    public static String XML_PRO_TRAN="prop_tran";
+    public static String XML_ATTR="attr";
+    public static String XML_KEY="key";
+    public static String XML_MEAN="mean";
+    public static String XML_VALUE="value";
+    public static String XML_TEXT="text";
+    public static String XML_STATE="state";
+    public static String XML_MSG="msg";
+    public static String XML_NUM="num";
+    public static String XML_NAMEPATH="namepath";
+    public static String XML_NAME="name";
+    public static String XML_IDPATH="idpath";
+    public static String XML_ID="id";
+    public static String XML_ORDERNUM="orderNum";
+    public static String XML_PARENTID="parentId";
+    public static String XML_SENDTYPE="sendtype";
+    public static String XML_STATE_200="200";
+    public static String XML_STATE_400="400";
+    public static String XML_STATE_500="500";
+    public static String XML_DATACODE="datacode";
+    public static String XML_DATACODE_200="200";
+    public static String XML_DATACODE_500="500";
+    public static String XML_DATAMSG="datamsg";
+    public static String XML_MDMKEY="mdmkey";
+    public static String XML_MDMVALUE="mdmvalue";
+    public static String XML_SYSTEMKEY="systemkey";
+    public static String XML_SYSTEMVALUE="systemvalue";
+
+    public static String FLAG_TRUE="true";
+    public static String FLAG_FAIL="fail";
+
+
+
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEngineConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEngineConstant.java
new file mode 100644
index 0000000..5c9e830
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEngineConstant.java
@@ -0,0 +1,105 @@
+package org.springblade.code.constant;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 涓绘暟鎹紩鎿庣浉鍏崇殑甯搁噺
+ * @author weidy
+ * @date 2022-3-8
+ */
+public class MdmEngineConstant {
+    /**
+     * 缂栫爜鐨勫瓧娈�
+     */
+    public static final String CODE_FIELD = "id";
+
+    /**
+     * 鐘舵��
+     */
+    public static final String CODE_STATUS_FILED = "lcstatus";
+
+    /**
+     * 闆嗗洟鐮佺殑瀛楁
+     */
+    public static final String CODE_GROUP_FIELD = "groupcode";
+
+    /**
+     * 鍒嗙被鐨勪富閿瓧娈�
+     */
+    public static final String CODE_CLASSIFY_OID_FIELD = "codeclsfid";
+
+    /**
+     * 妯℃澘鐨勪富閿瓧娈�
+     */
+    public static final String CODE_TEMPLATE_OID_FIELD = "codetemplateoid";
+
+    /**
+     * 鍒嗙被鍏ㄨ矾寰勭殑瀛楁
+     */
+    public static final String CODE_FULL_PATH_FILED = "codeclsfpath";
+
+    /**
+     * 鐮佹鐨勯暱搴︾殑瀛楁锛�-杩欎笉鏄暟鎹簱閲岀殑瀛楁
+     */
+    public static final String CODE_SEC_LENGTH_FIELD = "codeSecLengthField";
+
+    /**
+     * 瀵嗙骇鐨勫瓧娈�
+     */
+    public static final String SECRET_FIELD = "secretgrade";
+    /**
+     * 鍒涘缓鑰呭瓧娈�
+     */
+    public static final String CODE_CREATOR = "creator";
+    /**
+     * 鏇存敼鑰呭瓧娈�
+     */
+    public static final String CODE_EDITOR = "lastmodifier";
+    /**
+     * 榛樿鐨勫睘鎬у垪琛�
+     */
+    public static final List DEFAULT_ATTR_LIST = new ArrayList(){{
+        add(CODE_FIELD);
+        add(CODE_STATUS_FILED);
+        add(CODE_GROUP_FIELD);
+        add(CODE_CLASSIFY_OID_FIELD);
+        add(CODE_TEMPLATE_OID_FIELD);
+        add(CODE_FULL_PATH_FILED);
+    }};
+
+    /**
+     * 榛樿鐨勫睘鎬у垪琛�
+     */
+    public static final List DEFAULT_SYNC_ATTR_LIST = new ArrayList(){{
+        add(CODE_FIELD);
+        add(CODE_STATUS_FILED);
+        add(CODE_GROUP_FIELD);
+        add(CODE_CLASSIFY_OID_FIELD);
+        add(CODE_TEMPLATE_OID_FIELD);
+        add(CODE_FULL_PATH_FILED);
+        add(CODE_EDITOR);
+        add(CODE_CREATOR);
+    }};
+
+    /**
+     * 琛屽彿
+     */
+    public static final String IMPORT_ROW_INDEX = "${rowIndex}";
+
+    /**
+     * 绌虹殑娴佹按渚濇嵁
+     */
+    public static final String EMPTY_SERIAL_UNIT = "${emptyserial}";
+
+    /**
+     * 娴佹按渚濊禆鐨勮繛鎺ョ
+     */
+    public static final String SERIAL_UNIT_SPACE = "${serial}";
+
+    /**
+     * 娴佺▼鍊肩殑鍒嗛殧绗�
+     */
+    public static final String SERIAL_VALUE_SPACE = "${sav}";
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEnumIdConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEnumIdConstant.java
new file mode 100644
index 0000000..5e35fbb
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmEnumIdConstant.java
@@ -0,0 +1,78 @@
+package org.springblade.code.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/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLifeCycleConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLifeCycleConstant.java
new file mode 100644
index 0000000..4d6b216
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLifeCycleConstant.java
@@ -0,0 +1,26 @@
+package org.springblade.code.constant;
+
+/**
+ * 鐢熷懡鍛ㄦ湡鐨勫悕绉�
+ * @author weidy
+ * @date 2022-2-11
+ */
+public class MdmLifeCycleConstant {
+    /**
+     * 鍒嗙被妯℃澘鐨勭敓鍛藉懆鏈�
+     */
+    public static final String CODE_CLASSIFY_TEMPLATE_LC ="codeClsTempLc";
+
+    /**
+     * 缂栫爜瑙勫垯鐨勭敓鍛藉懆鏈�
+     */
+    public static final String CODE_RULE_LC = "codeRuleLC";
+    /**
+     * 鍏ㄩ儴鐨勭爜鍊肩殑鐢熷懡鍛ㄦ湡
+     */
+    public static final String CODE_ALL_CODE_LC = "codeAllCodeLC" ;
+    /**
+     * 缂栫爜鐨勯粯璁ょ殑鐢熷懡鍛ㄦ湡
+     */
+    public static final String CODE_DEFAULT_LC = "codeDataLC";
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLinkTypeConstant.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLinkTypeConstant.java
new file mode 100644
index 0000000..1209f4a
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/constant/MdmLinkTypeConstant.java
@@ -0,0 +1,13 @@
+package org.springblade.code.constant;
+
+/**
+ * 涓绘暟鎹噷鐨勯摼鎺ョ被鍨嬪悕绉�
+ * @author weidy
+ * @date 2022-1-18
+ */
+public class MdmLinkTypeConstant {
+    /**
+     * 缂栫爜瑙勫垯鐨勬槑缁�
+     */
+    public static final String CODE_RULE_ITEM = "codeRuleItem";
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeApplySyncController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeApplySyncController.java
new file mode 100644
index 0000000..4b8c615
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeApplySyncController.java
@@ -0,0 +1,169 @@
+package org.springblade.code.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.vci.mdm.dto.datapush.result.ResultJsonDTO;
+import com.vci.mdm.dto.datapush.result.ResultNodeDataDTO;
+import com.vci.mdm.dto.datapush.result.ResultNodeObjectDTO;
+import com.vci.mdm.service.UniversalInterfaceI;
+import com.vci.starter.web.annotation.controller.VciUnCheckRight;
+import com.vci.starter.web.annotation.controller.VciUnUseResponseAdvice;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+
+/**
+ * 涓婚搴撳垎绫绘帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+@RestController
+@VciUnCheckRight
+@RequestMapping("/codeSyncUniversalControoler")
+public class CodeApplySyncController {
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+    /**
+     * 鎺ュ彛闆嗘垚鏈嶅姟
+     */
+    @Autowired
+    private UniversalInterfaceI universalInterface;
+    /****
+     * 鐢宠鎺ュ彛
+     * @param dataString 灞炴�т俊鎭�
+     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
+     * @return
+     * @throws Throwable
+     */
+    @VciUnCheckRight
+    @VciUnUseResponseAdvice
+    @PostMapping("/applyCode")
+   public String applyCode(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType)  {
+        String result="";
+        try {
+            result = universalInterface.applyCode(dataString, dataType);
+        }catch (Throwable e){
+            e.printStackTrace();
+            logger.error("applyCode->"+e.getMessage());
+        }
+         return result;
+    }
+
+    /****
+     * 鏇存柊/鍒犻櫎/鐘舵�佹帴鍙�
+     * @param dataString 灞炴�т俊鎭�
+     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
+     * @return
+     * @throws Throwable
+     */
+    @VciUnCheckRight
+    @VciUnUseResponseAdvice
+    @PostMapping("/syncData")
+    public String syncData(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType)  {
+        String result="";
+        try {
+            result= universalInterface.syncEditData(dataString,dataType);
+        }catch (Throwable e){
+            e.printStackTrace();;
+            logger.error("syncData->"+e.getMessage());
+        }
+        return result;
+    }
+
+
+    /****
+     * 鏌ヨ鍒嗙被鍙�
+     * @param dataString 灞炴�т俊鎭�
+     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
+     * @return
+     * @throws Throwable
+     */
+    @VciUnCheckRight
+    @VciUnUseResponseAdvice
+    @PostMapping("/queryClassify")
+    public String queryClassify(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType) throws Throwable {
+        String result="";
+        try {
+             result = universalInterface.queryClassify(dataString, dataType);
+        }catch (Throwable e){
+            e.printStackTrace();
+            logger.error("queryClassify->"+e.getMessage());
+        }
+        return result;
+    }
+
+    /****
+     * 鏌ヨ鍒嗙被鍙�
+     * @param dataString 灞炴�т俊鎭�
+     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
+     * @return
+     * @throws Throwable
+     */
+    @VciUnCheckRight
+    @VciUnUseResponseAdvice
+    @PostMapping("/queryData")
+    public String queryData(@RequestParam("dataString")String dataString,@RequestParam("dataType")String dataType) throws Throwable {
+        String result="";
+        try {
+            result= universalInterface.queryData(dataString,dataType);
+        }catch (Throwable e){
+            e.printStackTrace();
+            logger.error("queryData->"+e.getMessage());
+        }
+        return result;
+    }
+
+    /****
+     * 鏌ヨ鍒嗙被鍙�
+     * @param dataString 灞炴�т俊鎭�
+     * @param dataType 鏁版嵁鏍煎紡绫诲瀷
+     * @return
+     * @throws Throwable
+     */
+    @VciUnCheckRight
+    @VciUnUseResponseAdvice
+    @PostMapping("/testPushData")
+    public String testPushData(@RequestParam("dataString")String dataString, @RequestParam("dataType")String dataType) throws Throwable {
+        String result="";
+        ResultJsonDTO resultJsonDTO=new ResultJsonDTO();
+        ResultNodeDataDTO resultNodeDataDTO =new ResultNodeDataDTO();
+        ResultNodeObjectDTO resultNodeObjectDTO=new ResultNodeObjectDTO();
+        resultNodeObjectDTO.setCode("01001");
+        resultNodeObjectDTO.setOid("0001");
+        resultNodeObjectDTO.setMsg("娴嬭瘯鎴愬姛");
+        resultNodeObjectDTO.setErroid("0");
+        resultNodeDataDTO.setObject(Arrays.asList(resultNodeObjectDTO));
+        if(dataType.equalsIgnoreCase("json")){
+            resultJsonDTO.setData(resultNodeDataDTO);
+            Object object = JSONObject.toJSON(resultJsonDTO);
+            result = object.toString();
+        }else{
+            //缁勭粐杩斿洖鎺ュ彛淇℃伅
+            XStream xStream = new XStream(new DomDriver());
+            xStream.processAnnotations(ResultNodeDataDTO.class);
+            xStream.autodetectAnnotations(true);
+            String results=xStream.toXML(resultNodeDataDTO);
+            result ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + results;
+
+        }
+       //result="\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" ?><data>\\n  <object code=\\\"01001\\\" oid=\\\"0001\\\" erroid=\\\"0\\\" msg=\\\"娴嬭瘯鎴愬姛\\\"/>\\n</data>\"";
+        //缁勭粐杩斿洖鎺ュ彛淇℃伅
+       /* XStream xStream = new XStream(new DomDriver());
+        xStream.processAnnotations(ResultNodeDataDTO.class);
+        xStream.autodetectAnnotations(true);
+        ResultNodeDataDTO resultNodeDataDTOs = (ResultNodeDataDTO) xStream.fromXML(result);
+        resultJsonDTO.setData(resultNodeDataDTO);*/
+        return result;
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeBasicSecController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeBasicSecController.java
new file mode 100644
index 0000000..3363a60
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeBasicSecController.java
@@ -0,0 +1,190 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeBasicSecDTO;
+import com.vci.mdm.pagemodel.CodeBasicSecVO;
+import com.vci.mdm.service.CodeBasicSecServiceI;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.Tree;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+import java.util.List;
+
+
+/**
+ * 鐮佹鍩虹淇℃伅鎺у埗鍣�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeBasicSecController")
+public class CodeBasicSecController {
+    /**
+    * 鐮佹鍩虹淇℃伅 鏈嶅姟
+    */
+    @Autowired
+    private CodeBasicSecServiceI codeBasicSecService;
+
+    /**
+     * 鐮佹鍩虹淇℃伅鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridCodeBasicSec")
+    public DataGrid<CodeBasicSecVO> gridCodeBasicSec(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeBasicSecService.gridCodeBasicSec(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeBasicSecVO> addSave(@RequestBody CodeBasicSecDTO codeBasicSecDTO){
+        CodeBasicSecVO codeBasicSecVO = null;
+        try {
+            codeBasicSecVO = codeBasicSecService.addSave(codeBasicSecDTO);
+        } catch (VciBaseException e) {
+            return BaseResult.fail(e.getCode());
+        }
+        return BaseResult.success(codeBasicSecVO);
+    }
+
+    /**
+     * 淇敼 鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeBasicSecVO> editSave(@RequestBody CodeBasicSecDTO codeBasicSecDTO){
+        CodeBasicSecVO codeBasicSecVO = null;
+        try {
+            codeBasicSecVO = codeBasicSecService.editSave(codeBasicSecDTO);
+        } catch (VciBaseException e) {
+            return BaseResult.fail(e.getCode());
+        }
+        return BaseResult.success(codeBasicSecVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeBasicSec(CodeBasicSecDTO codeBasicSecDTO) {
+        return codeBasicSecService.deleteCodeBasicSec(codeBasicSecDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鐮佹鍩虹淇℃伅
+    * @param oid 涓婚敭
+    * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeBasicSecVO> getObjectByOid(String oid){
+        CodeBasicSecVO codeBasicSecVO = codeBasicSecService.getObjectByOid(oid);
+        return BaseResult.success(codeBasicSecVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐮佹鍩虹淇℃伅
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeBasicSecVO> listCodeBasicSecByOids(String oids){
+        Collection<CodeBasicSecVO> voCollection =  codeBasicSecService.listCodeBasicSecByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鐮佹鍩虹淇℃伅鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeBasicSecVO> refDataGridCodeBasicSec(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeBasicSecService.refDataGridCodeBasicSec(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鍙傛暟鍒嗙被鐮佹鍩虹淇℃伅鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑锛屽繀椤昏鏈夌紪鐮佽鍒欑殑涓婚敭 pkCodeRule
+     * @return 鐮佹鐨勪俊鎭�
+     */
+    @GetMapping("/refDataGridClassifySec")
+    public DataGrid<CodeBasicSecVO> refDataGridClassifySec(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeBasicSecService.refDataGridClassifySec(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鍏嬮殕鐮佹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱idArr锛氶�夋嫨婧愮爜娈典富閿殑闆嗗悎锛宲kCodeRule锛氱洰鏍囩紪鐮佽鍒欑殑涓婚敭
+     * @return 鍏嬮殕缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @PostMapping("/clone")
+    public BaseResult cloneCodeBasicSec(@RequestBody CodeBasicSecDTO codeBasicSecDTO){
+        VciBaseUtil.alertNotNull(codeBasicSecDTO.getOidArr(),"閫夋嫨鐮佹涓婚敭");
+        List<String> oidArr = VciBaseUtil.str2List(codeBasicSecDTO.getOidArr());
+        if (CollectionUtils.isEmpty(oidArr)){
+            return BaseResult.fail("閫夋嫨鐮佹涓婚敭涓嶈兘涓虹┖");
+        }
+        return codeBasicSecService.cloneCodeBasicSec(oidArr,codeBasicSecDTO.getPkCodeRule());
+    }
+
+    /**
+     * 鏌ヨ鐩爣鍒嗙被鐮佹鎵�鍦ㄧ殑鏍戠粨鏋�
+     * @param oid 鐩爣鍒嗙被鐮佹涓婚敭
+     * @return 鍒嗙被鐮佹鏍戠粨鏋�
+     */
+    @GetMapping("/treeCodeClassifySec")
+    public List<Tree> gridCodeClassifySecTree (String oid){
+        VciBaseUtil.alertNotNull(oid,"鍒嗙被鐮佹涓婚敭");
+        return codeBasicSecService.gridCodeClassifySecTree(oid);
+    }
+
+    /**
+     * 涓婄Щ
+     * @param oid 涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping("/upOrderNum")
+    public BaseResult upOrderNum(String oid){
+        codeBasicSecService.upOrderNum(oid);
+        return BaseResult.success();
+    }
+
+    /**
+     * 涓嬬Щ
+     * @param oid 涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping("/downOrderNum")
+    public BaseResult downOrderNum(String oid){
+        codeBasicSecService.downOrderNum(oid);
+        return BaseResult.success();
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeButtonController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeButtonController.java
new file mode 100644
index 0000000..4285c64
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeButtonController.java
@@ -0,0 +1,137 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeButtonDTO;
+import com.vci.mdm.pagemodel.CodeButtonVO;
+import com.vci.mdm.service.CodeButtonServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeButtonController")
+public class CodeButtonController {
+    /**
+    * 涓绘暟鎹腑鐨勬寜閽墿灞� 鏈嶅姟
+    */
+    @Autowired
+    private CodeButtonServiceI codeButtonService;
+
+    /**
+     * 涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeButton")
+    public DataGrid<CodeButtonVO> gridCodeButton(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+
+        return codeButtonService.gridCodeButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeButtonVO> addSave(@RequestBody CodeButtonDTO codeButtonDTO){
+         CodeButtonVO codeButtonVO = codeButtonService.addSave(codeButtonDTO);
+         return BaseResult.success(codeButtonVO);
+    }
+
+    /**
+     * 淇敼 涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeButtonVO> editSave(@RequestBody CodeButtonDTO codeButtonDTO){
+        CodeButtonVO codeButtonVO = codeButtonService.editSave(codeButtonDTO);
+        return BaseResult.success(codeButtonVO);
+    }
+
+
+    /**
+     * 鍒犻櫎涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeButton( CodeButtonDTO codeButtonDTO) {
+        return codeButtonService.deleteCodeButton(codeButtonDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+    * @param oid 涓婚敭
+    * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeButtonVO> getObjectByOid(String oid){
+        CodeButtonVO codeButtonVO = codeButtonService.getObjectByOid(oid);
+        return BaseResult.success(codeButtonVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeButtonVO> listCodeButtonByOids(String oids){
+        Collection<CodeButtonVO> voCollection =  codeButtonService.listCodeButtonByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+    /**
+     * 鍚敤
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍚敤缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @PostMapping("/enableData")
+    public BaseResult enableOrgDuty(CodeButtonDTO buttonDTO) {
+        return codeButtonService.enableCodeButton(buttonDTO);
+    }
+
+    /**
+     * 鍋滅敤
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍋滅敤缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @PostMapping("/disableData")
+    public BaseResult disableOrgDuty(CodeButtonDTO buttonDTO) {
+        return codeButtonService.disableCodeButton(buttonDTO);
+    }
+
+
+
+
+    /**
+     * 鍙傜収涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeButtonVO> refDataGridCodeButton(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeButtonService.refDataGridCodeButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyController.java
new file mode 100644
index 0000000..fd3a904
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyController.java
@@ -0,0 +1,255 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeClassifyDTO;
+import com.vci.mdm.pagemodel.CodeClassifyVO;
+import com.vci.mdm.service.CodeClassifyServiceI;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.util.ControllerUtil;
+import com.vci.starter.web.util.LangBaseUtil;
+import com.vci.starter.web.util.LocalFileUtil;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.OsAttributeVO;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Collection;
+import java.util.List;
+
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED;
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED;
+
+
+/**
+ * 涓婚搴撳垎绫绘帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+@RestController
+@RequestMapping("/codeClassifyController")
+public class CodeClassifyController {
+    /**
+    * 涓婚搴撳垎绫� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyServiceI codeClassifyService;
+
+    /**
+     * 涓婚搴撳垎绫绘爲
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撳垎绫绘樉绀烘爲
+     */
+    @GetMapping("/treeCodeClassify")
+    public List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject)  {
+        return  codeClassifyService.treeCodeClassify(treeQueryObject);
+    }
+
+    /**
+     * 涓婚搴撶殑鏍�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撴樉绀烘爲
+     */
+    @GetMapping("/treeTopCodeClassify")
+    public List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject){
+        return codeClassifyService.treeTopCodeClassify(treeQueryObject);
+    }
+
+    /**
+     * 澧炲姞 涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyVO> addSave(@RequestBody CodeClassifyDTO codeClassifyDTO){
+        if(codeClassifyDTO.getOrdernum()==null){
+            codeClassifyDTO.setOrdernum(0);
+        }
+         CodeClassifyVO codeClassifyVO = codeClassifyService.addSave(codeClassifyDTO);
+         return BaseResult.success(codeClassifyVO);
+    }
+
+    /**
+     * 淇敼 涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyVO> editSave(@RequestBody CodeClassifyDTO codeClassifyDTO){
+        return codeClassifyService.editSave(codeClassifyDTO);
+    }
+
+    /**
+    * 妫�鏌� 涓婚搴撳垎绫绘槸鍚﹀垹闄�
+    * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+    * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+    */
+    @PostMapping( "/checkIsCanDelete")
+    public BaseResult checkIsCanDelete(CodeClassifyDTO codeClassifyDTO)  {
+        return codeClassifyService.checkIsCanDelete(codeClassifyDTO);
+    }
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫�
+     * @param  codeClassifyDTO锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassify(CodeClassifyDTO codeClassifyDTO) {
+        return codeClassifyService.deleteCodeClassify(codeClassifyDTO);
+    }
+
+    /**
+     * 鍚敤
+     * @param codeClassifyDTO
+     * @return
+     */
+    @PostMapping( "/enableData")
+    public BaseResult enable(CodeClassifyDTO codeClassifyDTO) {
+        return codeClassifyService.updateLcStatus(codeClassifyDTO.getOid(),FRAMEWORK_DATA_ENABLED);
+    }
+
+    /**
+     * 鍋滅敤
+     * @param codeClassifyDTO
+     * @return
+     */
+    @PostMapping( "/disableData")
+    public BaseResult disable(CodeClassifyDTO codeClassifyDTO) {
+        return codeClassifyService.updateLcStatus(codeClassifyDTO.getOid(),FRAMEWORK_DATA_DISABLED);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫绘樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyVO> getObjectByOid(String oid){
+        CodeClassifyVO codeClassifyVO = codeClassifyService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫绘樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyVO> listCodeClassifyByOids(String oids){
+        Collection<CodeClassifyVO> voCollection =  codeClassifyService.listCodeClassifyByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+    /**
+    * 鍙傜収鏍� 涓婚搴撳垎绫�
+    * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+    * @return 涓婚搴撳垎绫绘樉绀烘爲
+    */
+    @GetMapping("/referTree")
+    public List<Tree> referTree(TreeQueryObject treeQueryObject)  {
+        return codeClassifyService.referTree(treeQueryObject);
+    }
+
+    /**
+     * 瀵煎嚭鍒嗙被
+     * @param oid 鍒嗙被涓婚敭
+     */
+    @GetMapping("/exportClassify")
+    public void exportClassify(String oid, HttpServletResponse response) throws IOException {
+        String excelName = codeClassifyService.exportClassify(oid);
+        try {
+            ControllerUtil.writeFileToResponse(response,excelName);
+        } catch (Throwable e) {
+            //濡傛灉鍑洪敊,鎶婇敊璇俊鎭啓鍒皌ext
+            String msg = LangBaseUtil.getErrorMsg(e);
+            String errorFile = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒.txt";
+            LocalFileUtil.writeContentToFile(msg,errorFile);
+            ControllerUtil.writeFileToResponse(response,errorFile);
+        }
+    }
+
+    /**
+     * 涓嬭浇瀵煎叆鐨勬ā鏉�
+     * @param response 鍝嶅簲瀵硅薄
+     * @throws IOException 鎶涘嚭寮傚父
+     */
+    @GetMapping("/downloadImportExcel")
+    public void downloadImportExcel(HttpServletResponse response) throws IOException{
+        String excelName = codeClassifyService.createImportExcel();
+        try {
+            ControllerUtil.writeFileToResponse(response,excelName);
+        } catch (Throwable e) {
+            //濡傛灉鍑洪敊,鎶婇敊璇俊鎭啓鍒皌ext
+            String msg = LangBaseUtil.getErrorMsg(e);
+            if(StringUtils.isBlank(msg)){
+                msg = "鏈煡閿欒";
+            }
+            ControllerUtil.writeDataToResponse(response,msg.getBytes(StandardCharsets.UTF_8),null);
+        }
+    }
+
+    /**
+     * 瀵煎叆鍒嗙被
+     * @param file excel鐨勫唴瀹�
+     * @return 鎵ц缁撴灉锛宱bj鏈夊�艰〃绀烘湁閿欒淇℃伅锛岄渶瑕佽闂甦ownloadErrorFile鏉ヤ笅杞�
+     */
+    @PostMapping("/importClassify")
+    public BaseResult importClassify(MultipartFile file) {
+        String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename());
+        File file1 = new File(excelFileName);
+        try {
+            file.transferTo(new File(excelFileName));
+            codeClassifyService.importClassify(file1);
+            return BaseResult.success();
+        }catch (Throwable e) {
+            String errorFile = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.txt";
+            LocalFileUtil.writeContentToFile(LangBaseUtil.getErrorMsg(e),errorFile);
+            //鏀惧埌map閲�
+            BaseResult result = BaseResult.fail("瀵煎叆澶辫触");
+            result.setObj(ControllerUtil.putErrorFile(errorFile));
+            return result;
+        }finally {
+            file1.delete();
+        }
+    }
+
+    /**
+     * 涓嬭浇閿欒鐨勬枃浠朵俊鎭�
+     * @param uuid 鍞竴鏍囪瘑
+     * @param response 鍝嶅簲瀵硅薄
+     * @throws IOException 鎶涘嚭寮傚父
+     */
+    @GetMapping("/downloadErrorFile")
+    public void downloadErrorFile(String uuid, HttpServletResponse response) throws IOException {
+        ControllerUtil.downloadErrorFile(response,uuid);
+    }
+
+    /**
+     * 鑾峰彇鍒嗙被鍏宠仈鐨勫睘鎬�
+     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤绘湁codeClassifyOid锛屾敮鎸乮d鍜宯ame涓ょ鏌ヨ鏉′欢(涓嶆敮鎸佸垎椤�)
+     * @return 灞炴�х殑淇℃伅锛屽寘鍚粯璁ょ殑灞炴��
+     */
+    @GetMapping("/listClassifyLinkAttr")
+    public DataGrid<OsAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject){
+        return codeClassifyService.listClassifyLinkAttr(baseQueryObject);
+    }
+
+    /**
+     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
+     * @param idPath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    @GetMapping("/getObjectByIdPath")
+    public CodeClassifyVO getObjectByIdPath(String idPath){
+        return codeClassifyService.getObjectByIdPath(idPath);
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyProcessTempController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyProcessTempController.java
new file mode 100644
index 0000000..705d418
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyProcessTempController.java
@@ -0,0 +1,130 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeClassifyProcessTempDTO;
+import com.vci.mdm.pagemodel.CodeClassifyProcessTempVO;
+import com.vci.mdm.service.CodeClassifyProcessTempServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+import java.util.List;
+
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClsProcessTempController")
+public class CodeClassifyProcessTempController {
+    /**
+    * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyProcessTempServiceI codeClassifyProcessTempService;
+
+    /**
+     * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyProcessTemp")
+    public DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyProcessTempService.gridCodeClassifyProcessTemp(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyProcessTempVO> addSave(@RequestBody CodeClassifyProcessTempDTO codeClassifyProcessTempDTO){
+         CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.addSave(codeClassifyProcessTempDTO);
+         return BaseResult.success(codeClassifyProcessTempVO);
+    }
+
+    /**
+     * 淇敼 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyProcessTempVO> editSave(@RequestBody CodeClassifyProcessTempDTO codeClassifyProcessTempDTO){
+        CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.editSave(codeClassifyProcessTempDTO);
+        return BaseResult.success(codeClassifyProcessTempVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyProcessTemp( CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) {
+        return codeClassifyProcessTempService.deleteCodeClassifyProcessTemp(codeClassifyProcessTempDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyProcessTempVO> getObjectByOid(String oid){
+        CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyProcessTempVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(String oids){
+        Collection<CodeClassifyProcessTempVO> voCollection =  codeClassifyProcessTempService.listCodeClassifyProcessTempByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyProcessTempService.refDataGridCodeClassifyProcessTemp(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 浣跨敤妯℃澘鑾峰彇浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeTemplateOid 妯℃澘鐨勪富閿�
+     * @param processUse 娴佺▼鐨勭敤閫�
+     * @return 娴佺▼妯℃澘鐨勪俊鎭�
+     */
+    @GetMapping("/listProcessTemplate")
+    public BaseResult<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid,String processUse){
+        List<CodeClassifyProcessTempVO> processTempVOList = codeClassifyProcessTempService.listProcessTemplate(codeTemplateOid,processUse);
+        BaseResult result = BaseResult.success();
+        result.setData(processTempVOList);
+        return result;
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTempMapItemController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTempMapItemController.java
new file mode 100644
index 0000000..4f7f95c
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTempMapItemController.java
@@ -0,0 +1,115 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeClassifyTempMapItemDTO;
+import com.vci.mdm.pagemodel.CodeClassifyTempMapItemVO;
+import com.vci.mdm.service.CodeClassifyTempMapItemServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+@RestController
+@RequestMapping("/codeClsTempMapItemController")
+public class CodeClassifyTempMapItemController {
+    /**
+    * 鏄犲皠瑙勫垯鐨勬槑缁� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyTempMapItemServiceI codeClassifyTempMapItemService;
+
+    /**
+     * 鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyTempMapItem")
+    public DataGrid<CodeClassifyTempMapItemVO> gridCodeClassifyTempMapItem(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTempMapItemService.gridCodeClassifyTempMapItem(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyTempMapItemVO> addSave(@RequestBody CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO){
+         CodeClassifyTempMapItemVO codeClassifyTempMapItemVO = codeClassifyTempMapItemService.addSave(codeClassifyTempMapItemDTO);
+         return BaseResult.success(codeClassifyTempMapItemVO);
+    }
+
+    /**
+     * 淇敼 鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyTempMapItemVO> editSave(@RequestBody CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO){
+        CodeClassifyTempMapItemVO codeClassifyTempMapItemVO = codeClassifyTempMapItemService.editSave(codeClassifyTempMapItemDTO);
+        return BaseResult.success(codeClassifyTempMapItemVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyTempMapItem( CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) {
+        return codeClassifyTempMapItemService.deleteCodeClassifyTempMapItem(codeClassifyTempMapItemDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+    * @param oid 涓婚敭
+    * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyTempMapItemVO> getObjectByOid(String oid){
+        CodeClassifyTempMapItemVO codeClassifyTempMapItemVO = codeClassifyTempMapItemService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyTempMapItemVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyTempMapItemVO> listCodeClassifyTempMapItemByOids(String oids){
+        Collection<CodeClassifyTempMapItemVO> voCollection =  codeClassifyTempMapItemService.listCodeClassifyTempMapItemByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeClassifyTempMapItemVO> refDataGridCodeClassifyTempMapItem(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTempMapItemService.refDataGridCodeClassifyTempMapItem(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateAttrController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateAttrController.java
new file mode 100644
index 0000000..c62e088
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateAttrController.java
@@ -0,0 +1,165 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeClassifyTemplateAttrDTO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.mdm.service.CodeClassifyTemplateAttrServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.OsBtmTypeAttributeVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+import java.util.List;
+
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClassifyTempAttrController")
+public class CodeClassifyTemplateAttrController {
+    /**
+    * 涓婚搴撳垎绫荤殑妯℃澘灞炴�� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyTemplateAttrServiceI codeClassifyTemplateAttrService;
+
+
+    /**
+     * 涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyTemplateAttr")
+    public DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTemplateAttrService.gridCodeClassifyTemplateAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyTemplateAttrVO> addSave(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO){
+         CodeClassifyTemplateAttrVO codeClassifyTemplateAttrVO = codeClassifyTemplateAttrService.addSave(codeClassifyTemplateAttrDTO);
+         return BaseResult.success(codeClassifyTemplateAttrVO);
+    }
+
+    /**
+     * 鎵归噺淇濆瓨鍒楄〃鏁版嵁
+     * @param list
+     * @return
+     */
+    @PostMapping( "/batchAddSave")
+    public BaseResult<List<CodeClassifyTemplateAttrVO>> batchAddSaves(@RequestBody List<CodeClassifyTemplateAttrDTO> list){
+        if(CollectionUtils.isEmpty(list)){
+            return BaseResult.fail("鍒楄〃涓嶈兘涓虹┖!");
+        }
+        List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOs = codeClassifyTemplateAttrService.batchAddSave(list);
+        return BaseResult.success(codeClassifyTemplateAttrVOs);
+    }
+
+
+    /**
+     * 淇敼 涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyTemplateAttrVO> editSave(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO){
+        return codeClassifyTemplateAttrService.editSave(codeClassifyTemplateAttrDTO);
+    }
+
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyTemplateAttr(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) {
+        return codeClassifyTemplateAttrService.deleteCodeClassifyTemplateAttr(codeClassifyTemplateAttrDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyTemplateAttrVO> getObjectByOid(String oid){
+        CodeClassifyTemplateAttrVO codeClassifyTemplateAttrVO = codeClassifyTemplateAttrService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyTemplateAttrVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByOids(String oids){
+        Collection<CodeClassifyTemplateAttrVO> voCollection =  codeClassifyTemplateAttrService.listCodeClassifyTemplateAttrByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTemplateAttrService.refDataGridCodeClassifyTemplateAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鏌ヨ杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�,鎺掗櫎鎺夎繖涓ā鏉垮凡缁忓瓨鍦ㄧ殑灞炴��
+     * @param baseQueryObject
+     * @return
+     */
+    @GetMapping("/codeClassifyTemplateAttrByBtm")
+    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
+        return codeClassifyTemplateAttrService.codeClassifyTemplateAttrByBtm(baseQueryObject);
+    }
+
+    /**
+     * 鏌ヨ杩欎釜涓氬姟绫诲瀷涓嬨�佽繖涓ā鏉垮凡缁忓瓨鍦ㄧ殑灞炴��
+     * @param baseQueryObject
+     * @return
+     */
+    @GetMapping("/codeClassifyTemplateAttrByBtmHave")
+    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
+        return codeClassifyTemplateAttrService.codeClassifyTemplateAttrByBtmHave(baseQueryObject);
+    }
+
+    /**
+     * 鍚屾鍒板叾浠栨ā鏉�
+     * @param codeClassifyAttrDTO   id 鑻辨枃鍚嶇О
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping( "/copyto")
+    public BaseResult copyto(@RequestBody CodeClassifyTemplateAttrDTO codeClassifyAttrDTO) {
+        return codeClassifyTemplateAttrService.copyto(codeClassifyAttrDTO);
+    }
+
+
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateButtonController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateButtonController.java
new file mode 100644
index 0000000..34c5782
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateButtonController.java
@@ -0,0 +1,115 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateButtonVO;
+import com.vci.mdm.service.CodeClassifyTemplateButtonServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClsTempButtonController")
+public class CodeClassifyTemplateButtonController {
+    /**
+    * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyTemplateButtonServiceI codeClassifyTemplateButtonService;
+
+    /**
+     * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyTemplateButton")
+    public DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTemplateButtonService.gridCodeClassifyTemplateButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyTemplateButtonVO> addSave(@RequestBody CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO){
+         CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = codeClassifyTemplateButtonService.addSave(codeClassifyTemplateButtonDTO);
+         return BaseResult.success(codeClassifyTemplateButtonVO);
+    }
+
+    /**
+     * 淇敼 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyTemplateButtonVO> editSave(@RequestBody CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO){
+        CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = codeClassifyTemplateButtonService.editSave(codeClassifyTemplateButtonDTO);
+        return BaseResult.success(codeClassifyTemplateButtonVO);
+    }
+
+
+    /**
+     * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyTemplateButton( CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) {
+        return codeClassifyTemplateButtonService.deleteCodeClassifyTemplateButton(codeClassifyTemplateButtonDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyTemplateButtonVO> getObjectByOid(String oid){
+        CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = codeClassifyTemplateButtonService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyTemplateButtonVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(String oids){
+        Collection<CodeClassifyTemplateButtonVO> voCollection =  codeClassifyTemplateButtonService.listCodeClassifyTemplateButtonByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+     * @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/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateController.java
new file mode 100644
index 0000000..6e4db67
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateController.java
@@ -0,0 +1,191 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeClassifyTemplateDTO;
+import com.vci.mdm.lifecycle.CodeClassifyTemplateLC;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateVO;
+import com.vci.mdm.service.CodeClassifyTemplateServiceI;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+import java.util.List;
+
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鎺у埗鍣�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClassifyTemplateController")
+public class CodeClassifyTemplateController {
+    /**
+    * 鍒嗙被妯℃澘瀵硅薄 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyTemplateServiceI codeClassifyTemplateService;
+
+    /**
+     * 鍒嗙被妯℃澘瀵硅薄鏍�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
+     */
+    @GetMapping("/treeCodeClassifyTemplate")
+    public List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject)  {
+        return  codeClassifyTemplateService.treeCodeClassifyTemplate(treeQueryObject);
+    }
+
+    /**
+     * 鍒嗙被妯℃澘鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     */
+    @GetMapping("/gridCodeClassifyTemplate")
+    public DataGrid<CodeClassifyTemplateVO> gridCodeClassifyTemplate(BaseQueryObject baseQueryObject){
+        return  codeClassifyTemplateService.gridCodeClassifyTemplate(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 澧炲姞 鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyTemplateVO> addSave(@RequestBody CodeClassifyTemplateDTO codeClassifyTemplateDTO){
+         return codeClassifyTemplateService.addSave(codeClassifyTemplateDTO);
+    }
+
+    /**
+     * 淇敼 鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyTemplateVO> editSave(@RequestBody CodeClassifyTemplateDTO codeClassifyTemplateDTO){
+        return codeClassifyTemplateService.editSave(codeClassifyTemplateDTO);
+    }
+
+    /**
+    * 妫�鏌� 鍒嗙被妯℃澘瀵硅薄鏄惁鍒犻櫎
+    * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s灞炴��
+    * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+    */
+    @PostMapping( "/checkIsCanDelete")
+    public BaseResult checkIsCanDelete(@RequestBody CodeClassifyTemplateDTO codeClassifyTemplateDTO)  {
+        return codeClassifyTemplateService.checkIsCanDelete(codeClassifyTemplateDTO);
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyTemplate( CodeClassifyTemplateDTO codeClassifyTemplateDTO) {
+        return codeClassifyTemplateService.deleteCodeClassifyTemplate(codeClassifyTemplateDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄
+    * @param oid 涓婚敭
+    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyTemplateVO> getObjectByOid(String oid){
+        CodeClassifyTemplateVO codeClassifyTemplateVO = codeClassifyTemplateService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyTemplateVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被妯℃澘瀵硅薄
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyTemplateVO> listCodeClassifyTemplateByOids(String oids){
+        Collection<CodeClassifyTemplateVO> voCollection =  codeClassifyTemplateService.listCodeClassifyTemplateByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+    * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
+    * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
+    */
+    @GetMapping("/referTree")
+    public List<Tree> referTree(TreeQueryObject treeQueryObject)  {
+        return codeClassifyTemplateService.referTree(treeQueryObject);
+    }
+
+    /**
+     * 鍚敤
+     * @param codeClassifyDTO oid
+     * @return
+     */
+    @PostMapping( "/enableData")
+    public BaseResult enable( CodeClassifyTemplateDTO codeClassifyDTO) {
+        return codeClassifyTemplateService.updateLcStatus(codeClassifyDTO.getOid(), CodeClassifyTemplateLC.RELEASED.getValue());
+    }
+
+    /**
+     * 鍋滅敤
+     * @param codeClassifyDTO oid
+     * @return
+     */
+    @PostMapping( "/disableData")
+    public BaseResult disableData( CodeClassifyTemplateDTO codeClassifyDTO) {
+        return codeClassifyTemplateService.updateLcStatus(codeClassifyDTO.getOid(),CodeClassifyTemplateLC.DISABLED.getValue());
+    }
+
+    /**
+     * 鍐嶇紪杈�
+     * @param codeClassifyDTO oid
+     * @return
+     */
+    @PostMapping( "/editDate")
+    public BaseResult editDate( CodeClassifyTemplateDTO codeClassifyDTO) {
+        return codeClassifyTemplateService.updateLcStatus(codeClassifyDTO.getOid(),CodeClassifyTemplateLC.EDITING.getValue());
+    }
+
+    /**
+     * 鍗囩増
+     * @param codeClassifyDTO
+     * @return oid妯℃澘oid
+     */
+    @PostMapping( "/upgrade")
+    public BaseResult Upgrade(@RequestBody CodeClassifyTemplateDTO codeClassifyDTO) {
+
+        return codeClassifyTemplateService.Upgrade(codeClassifyDTO);
+    }
+
+    @GetMapping( "/upgrade1")
+    public BaseResult upgrade1( CodeClassifyTemplateDTO codeClassifyDTO) {
+
+        return Upgrade(codeClassifyDTO);
+    }
+
+    /**
+     * 鍏嬮殕
+     * @param codeClassifyDTO
+     * @return oid妯℃澘oid
+     */
+    @PostMapping( "/copy")
+    public BaseResult copyTemplate(@RequestBody CodeClassifyTemplateDTO codeClassifyDTO) {
+
+        return codeClassifyTemplateService.copyTemplate(codeClassifyDTO);
+    }
+
+    @GetMapping( "/copyTemplate1")
+    public BaseResult copyTemplate1( CodeClassifyTemplateDTO codeClassifyDTO) {
+
+        return copyTemplate(codeClassifyDTO);
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateMapController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateMapController.java
new file mode 100644
index 0000000..9e88c95
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateMapController.java
@@ -0,0 +1,115 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeClassifyTemplateMapDTO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateMapVO;
+import com.vci.mdm.service.CodeClassifyTemplateMapServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClassifyTempMapController")
+public class CodeClassifyTemplateMapController {
+    /**
+    * 涓婚搴撴ā鏉挎槧灏勮鍒� 鏈嶅姟
+    */
+    @Autowired
+    private CodeClassifyTemplateMapServiceI codeClassifyTemplateMapService;
+
+    /**
+     * 涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyTemplateMap")
+    public DataGrid<CodeClassifyTemplateMapVO> gridCodeClassifyTemplateMap(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTemplateMapService.gridCodeClassifyTemplateMap(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeClassifyTemplateMapVO> addSave(@RequestBody CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO){
+         CodeClassifyTemplateMapVO codeClassifyTemplateMapVO = codeClassifyTemplateMapService.addSave(codeClassifyTemplateMapDTO);
+         return BaseResult.success(codeClassifyTemplateMapVO);
+    }
+
+    /**
+     * 淇敼 涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyTemplateMapVO> editSave(@RequestBody CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO){
+        CodeClassifyTemplateMapVO codeClassifyTemplateMapVO = codeClassifyTemplateMapService.editSave(codeClassifyTemplateMapDTO);
+        return BaseResult.success(codeClassifyTemplateMapVO);
+    }
+
+
+    /**
+     * 鍒犻櫎涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyTemplateMap( CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) {
+        return codeClassifyTemplateMapService.deleteCodeClassifyTemplateMap(codeClassifyTemplateMapDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyTemplateMapVO> getObjectByOid(String oid){
+        CodeClassifyTemplateMapVO codeClassifyTemplateMapVO = codeClassifyTemplateMapService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyTemplateMapVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyTemplateMapVO> listCodeClassifyTemplateMapByOids(String oids){
+        Collection<CodeClassifyTemplateMapVO> voCollection =  codeClassifyTemplateMapService.listCodeClassifyTemplateMapByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeClassifyTemplateMapVO> refDataGridCodeClassifyTemplateMap(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyTemplateMapService.refDataGridCodeClassifyTemplateMap(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyValueController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyValueController.java
new file mode 100644
index 0000000..fab5547
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyValueController.java
@@ -0,0 +1,146 @@
+package org.springblade.code.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.vci.mdm.dto.CodeClassifyValueDTO;
+import com.vci.mdm.pagemodel.CodeClassifyValueVO;
+import com.vci.mdm.service.CodeClassifyValueServiceI;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.Tree;
+import com.vci.starter.web.pagemodel.TreeQueryObject;
+import com.vci.starter.web.util.VciBaseUtil;
+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 CodeClassifyValueServiceI 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 BaseResult<CodeClassifyValueVO> addSave(@RequestBody CodeClassifyValueDTO codeClassifyValueDTO){
+         CodeClassifyValueVO codeClassifyValueVO = codeClassifyValueService.addSave(codeClassifyValueDTO);
+         return BaseResult.success(codeClassifyValueVO);
+    }
+
+    /**
+     * 淇敼 鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeClassifyValueVO> editSave(@RequestBody CodeClassifyValueDTO codeClassifyValueDTO){
+        CodeClassifyValueVO codeClassifyValueVO = codeClassifyValueService.editSave(codeClassifyValueDTO);
+        return BaseResult.success(codeClassifyValueVO);
+    }
+
+    /**
+    * 妫�鏌� 鍒嗙被鐮佹鐨勭爜鍊兼槸鍚﹀垹闄�
+    * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+    * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+    */
+    @PostMapping( "/checkIsCanDelete")
+    public BaseResult checkIsCanDelete( CodeClassifyValueDTO codeClassifyValueDTO)  {
+        return codeClassifyValueService.checkIsCanDelete(codeClassifyValueDTO);
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeClassifyValue( CodeClassifyValueDTO codeClassifyValueDTO) {
+        return codeClassifyValueService.deleteCodeClassifyValue(codeClassifyValueDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeClassifyValueVO> getObjectByOid(String oid){
+        CodeClassifyValueVO codeClassifyValueVO = codeClassifyValueService.getObjectByOid(oid);
+        return BaseResult.success(codeClassifyValueVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeClassifyValueVO> listCodeClassifyValueByOids(String oids){
+        Collection<CodeClassifyValueVO> voCollection =  codeClassifyValueService.listCodeClassifyValueByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+    * 鍙傜収鏍� 鍒嗙被鐮佹鐨勭爜鍊�
+    * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
+    */
+    @GetMapping("/referTree")
+        public List<Tree> referTree(TreeQueryObject treeQueryObject)  {
+        return codeClassifyValueService.referTree(treeQueryObject);
+    }
+
+    /**
+     * 淇濆瓨椤甸潰涓婄殑鍒嗙被鐮佹鐮佸�硷紝涓昏鏄繚瀛樺簭鍙风敤浜庢帓搴忋�傚鏋滄暟鎹簱涓瓨鍦ㄩ〉闈紶杈撳璞¢泦鍚堜腑涓嶅瓨鍦ㄧ殑鍊硷紝鍒欏垹闄ゃ��
+     * @param param 鍙傛暟锛屽寘鎷琩toList 椤甸潰浼犺緭瀵硅薄闆嗗悎 鍜宑odeclassifysecoid 鍒嗙被鐮佹涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping("/saveOrder")
+    public BaseResult 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 BaseResult.success();
+        }
+        return codeClassifyValueService.batchSave4Order(dtoList,codeclassifysecoid);
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeDuckingController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeDuckingController.java
new file mode 100644
index 0000000..905c58c
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeDuckingController.java
@@ -0,0 +1,286 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.*;
+import com.vci.mdm.model.*;
+import com.vci.mdm.pagemodel.*;
+import com.vci.mdm.service.CodeDuckingServiceI;
+import com.vci.mdm.service.CodeDuckingSyncServiceI;
+import com.vci.mdm.service.DockingPreApplyDataServiceI;
+import com.vci.mdm.service.DockingPreAttrMappingSeviceI;
+import com.vci.starter.web.annotation.controller.VciUnCheckRight;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.ControllerUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.mdm.constant.MdmDuckingConstant.DATA_LOGE_OUT;
+
+
+/**
+ * 涓绘暟鎹紪鐮侀�氱敤闆嗘垚鎺у埗鍣�
+ *
+ * @author wangyi
+ * @date 2022-03-20
+ */
+@RestController
+@RequestMapping("/ducking")
+class CodeDuckingController {
+
+    /**
+     * 闆嗘垚鏈嶅姟
+     */
+    @Autowired
+    private CodeDuckingServiceI codeDuckingServiceI;
+
+    /**
+     * 闆嗘垚鏈嶅姟
+     */
+    @Autowired
+    private CodeDuckingSyncServiceI codeDuckingSyncServiceI;
+    /***
+     * 闆嗘垚灞炴�ф搷浣滃眰
+     */
+   @Autowired
+    private DockingPreAttrMappingSeviceI dockingPreAttrMappingSeviceI;
+
+   /**
+     * 棰勭敵璇锋帴鏀堕泦鎴愭暟鎹�
+     */
+    @Autowired
+    private DockingPreApplyDataServiceI dockingPreApplyDataServiceI;
+
+    public CodeDuckingController() {
+    }
+
+
+
+
+    /**
+     * 淇敼 涓婚搴撳垎绫�
+     * @param dockingPreApplyDataDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/setDataClassId")
+    public BaseResult<List<DockingPreApplyDataVO>> batchSetDataClassId(@RequestBody DockingPreApplyDataDTO dockingPreApplyDataDTO){
+        List<DockingPreApplyDataVO> dataDTOList=  dockingPreApplyDataServiceI.batchSetDataClassId(dockingPreApplyDataDTO);
+        return BaseResult.success(dataDTOList);
+    }
+
+    /***
+     * 鏍规嵁閫夋嫨棰濋鐢宠鐨勬暟鎹嬀閫夋暟鎹�
+     * @param codeClassifyOid
+     * @param templateOid
+     * @param btmType
+     * @param dataOids
+     * @return
+     */
+    @GetMapping("/gridApplyData")
+    public DataGrid<Map<String,String>> gridApplyData(String codeClassifyOid,String templateOid,String btmType,String dataOids){
+        return  dockingPreApplyDataServiceI.gridApplyData(codeClassifyOid,templateOid,btmType,dataOids);
+    }
+
+
+    /***
+     * 鏍规嵁閫夋嫨棰濋鐢宠鐨勬暟鎹嬀閫夋暟鎹�
+     *
+     * @return
+     */
+    @PutMapping("/batchApplyDatas")
+    public BaseResult batchApplyDatas(@RequestBody List<CodeOrderDTO> orderDTOs){
+        return dockingPreApplyDataServiceI.batchApplyDatas(orderDTOs);
+    }
+
+    /**
+     * 闆嗘垚棰勭敵璇峰垪琛�-宸插弽鐮�
+     * @param baseQueryObject
+     * ducking/gridPreDataFinish
+     * @return
+     */
+    @GetMapping("/gridPreDataFinishNum")
+    public DataGrid<DockingPreApplyDataVO> gridDockingPreApplyDataFinishNum(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        baseQueryObject.addCondition("num", QueryOptionConstant.ISNOTNULL);
+        DataGrid<DockingPreApplyDataVO> dockingPreApplyDataVODataGrid = dockingPreApplyDataServiceI.gridDockingPreApplyData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+        return dockingPreApplyDataVODataGrid;
+    }
+
+    /**
+     * 闆嗘垚棰勭敵璇峰垪琛�-宸插鐞�
+     * @param baseQueryObject
+     * ducking/gridPreDataFinish
+     * @return
+     */
+    @GetMapping("/gridPreDataFinish")
+    public DataGrid<DockingPreApplyDataVO> gridDockingPreApplyDataFinish(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        baseQueryObject.addCondition("classifyoid", QueryOptionConstant.ISNOTNULL);
+        DataGrid<DockingPreApplyDataVO> dockingPreApplyDataVODataGrid = dockingPreApplyDataServiceI.gridDockingPreApplyData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+        return dockingPreApplyDataVODataGrid;
+    }
+
+    /**
+     * 闆嗘垚棰勭敵璇峰垪琛�-鏈畬鎴�
+     * @param baseQueryObject
+     * ducking/gridPreDataUnFinish
+     * @return
+     */
+    @GetMapping("/gridPreDataUnFinish")
+    public DataGrid<DockingPreApplyDataVO> gridPreDataUnFinish(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        baseQueryObject.addCondition("num", "null");
+        return dockingPreApplyDataServiceI.gridDockingPreApplyData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鎵归噺澶勭悊棰勭敵璇风紪鐮�
+     * 蹇呴』瑕佹湁鍒嗙被oid鍜宒ataoid
+     * @return
+     */
+    @PostMapping("/applyData")
+    public BaseResult applyData(@RequestBody List<PreApplyCodeOrderDTO> preApplyCodeOrderDTOList){
+        return dockingPreApplyDataServiceI.applyData(preApplyCodeOrderDTOList);
+    }
+
+    /**
+     * 闆嗘垚棰勭敵璇峰垪琛�-鏌ヨ鏁版嵁璇︾粏淇℃伅
+     * @param dockingPreApplyDataDTO
+     * @return
+     */
+    @GetMapping("/datainfo")
+    @VciUnCheckRight
+    public BaseResult datainfo(DockingPreApplyDataDTO dockingPreApplyDataDTO){
+        return dockingPreApplyDataServiceI.getDataInfoMap(dockingPreApplyDataDTO);
+    }
+
+    /**
+     * data鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridData")
+    public DataGrid<DockingDataDO> gridData(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeDuckingServiceI.gridData(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * data鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridTask")
+    public DataGrid<DockingTaskDO> gridTask(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeDuckingServiceI.gridTask(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鎺ㄩ�佹暟鎹泦鎴愭棩蹇楀垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 闆嗘垚鏃ュ織鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridLoge")
+    public DataGrid<DockingLogeDO> gridLoge(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+            Map<String, String>  queryMap = baseQueryObject.getConditionMap();
+            queryMap.put("type",DATA_LOGE_OUT);
+        }
+        return codeDuckingServiceI.gridLoge(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鎺ュ彛param鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 闆嗘垚鏃ュ織鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridHeader")
+    public DataGrid<SysIntHeaderDO> gridParam(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+            Map<String, String>  queryMap = baseQueryObject.getConditionMap();
+            queryMap.put("type",DATA_LOGE_OUT);
+        }
+        return codeDuckingServiceI.gridHeader(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     *鎵归噺澶勭悊
+     * 蹇呴』瑕佹湁鍒嗙被oid鍜宒ataoid
+     * @return
+     */
+    @PostMapping("/sendData")
+    public  BaseResult sendData(String oid){
+
+        return codeDuckingSyncServiceI.sendData(oid);
+    }
+
+    /***
+     * 鍒濆鍖栧睘鎬ч厤缃粍浠�
+     * @param sourceClsfId 鍒嗙被oid
+     * @param type  //1锛氭棤浜烘満;2锛�420
+     * @param templateOid 妯℃澘oid锛屽涓互,鍒嗗紑鐨�
+     * @param baseQueryObject //鏌ヨ瀵硅薄
+     * @return
+     */
+    @GetMapping("/gridAttrMapping")
+    public DataGrid<DockingPreAttrMappingVO> gridAttrMappings(String sourceClsfId,String templateOid,int type, BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return dockingPreAttrMappingSeviceI.gridAttrMappings(sourceClsfId,type,baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /***
+     * 灞炴�у彇鍊艰寖鍥磋幏鍙�
+     * @param attrOid 灞炴�id
+     * @param type //1锛氭棤浜烘満;2锛�420
+     * @param baseQueryObject /鏌ヨ瀵硅薄
+     * @return
+     */
+    @GetMapping("/gridAttrRanges")
+    public DataGrid<DockingPreAttrRangeVO> gridAttrRanges(String attrOid,int type,BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+         return dockingPreAttrMappingSeviceI.gridAttrRanges(attrOid,type,baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 淇濆瓨灞炴�ф槧灏勯厤缃粍浠�
+     * @param dockingPreAttrMappingDTOS 灞炴�ф槧灏勯厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/batchAddSave")
+    public BaseResult<List<DockingPreAttrMappingVO>> batchSave(@RequestBody List<DockingPreAttrMappingDTO> dockingPreAttrMappingDTOS){
+       List<DockingPreAttrMappingVO> dockingPreAttrRangeVOS= dockingPreAttrMappingSeviceI.batchAddSave(dockingPreAttrMappingDTOS);
+        return BaseResult.success(dockingPreAttrRangeVOS);
+    }
+
+    /**
+     * 涓嬭浇閿欒鐨勬枃浠朵俊鎭�
+     * @param uuid 鍞竴鏍囪瘑
+     * @param response 鍝嶅簲瀵硅薄
+     * @throws IOException 鎶涘嚭寮傚父
+     */
+    @GetMapping("/downloadErrorFile")
+    public void downloadErrorFile(String uuid, HttpServletResponse response) throws IOException {
+        ControllerUtil.downloadErrorFile(response,uuid);
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeFixedValueController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeFixedValueController.java
new file mode 100644
index 0000000..7ed8684
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeFixedValueController.java
@@ -0,0 +1,142 @@
+package org.springblade.code.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.vci.mdm.dto.CodeFixedValueDTO;
+import com.vci.mdm.pagemodel.CodeFixedValueVO;
+import com.vci.mdm.service.CodeFixedValueServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+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("/codeFixedValueController")
+public class CodeFixedValueController {
+    /**
+    * 鍥哄畾鐮佹鐨勭爜鍊� 鏈嶅姟
+    */
+    @Autowired
+    private CodeFixedValueServiceI codeFixedValueService;
+
+    /**
+     * 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeFixedValue")
+    public DataGrid<CodeFixedValueVO> gridCodeFixedValue(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeFixedValueService.gridCodeFixedValue(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeFixedValueVO> addSave(@RequestBody CodeFixedValueDTO codeFixedValueDTO){
+         CodeFixedValueVO codeFixedValueVO = codeFixedValueService.addSave(codeFixedValueDTO);
+         return BaseResult.success(codeFixedValueVO);
+    }
+
+    /**
+     * 淇敼 鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeFixedValueVO> editSave(@RequestBody CodeFixedValueDTO codeFixedValueDTO){
+        CodeFixedValueVO codeFixedValueVO = codeFixedValueService.editSave(codeFixedValueDTO);
+        return BaseResult.success(codeFixedValueVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeFixedValue( CodeFixedValueDTO codeFixedValueDTO) {
+        return codeFixedValueService.deleteCodeFixedValue(codeFixedValueDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeFixedValueVO> getObjectByOid(String oid){
+        CodeFixedValueVO codeFixedValueVO = codeFixedValueService.getObjectByOid(oid);
+        return BaseResult.success(codeFixedValueVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeFixedValueVO> listCodeFixedValueByOids(String oids){
+        Collection<CodeFixedValueVO> voCollection =  codeFixedValueService.listCodeFixedValueByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeFixedValueVO> refDataGridCodeFixedValue(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeFixedValueService.refDataGridCodeFixedValue(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+     * @param param 鍙傛暟锛屽寘鎷琩toList 椤甸潰浼犺緭瀵硅薄闆嗗悎 codefixedsecoid 鍥哄畾鐮佹涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping("/saveOrder")
+    public BaseResult<CodeFixedValueVO> 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 codeFixedValueService.batchDeleteBySecOid(codefixedsecoid);
+        }
+        return codeFixedValueService.batchSave4Order(dtoList,codefixedsecoid);
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeKeyAttrRepeatRuleController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeKeyAttrRepeatRuleController.java
new file mode 100644
index 0000000..d5d1205
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeKeyAttrRepeatRuleController.java
@@ -0,0 +1,116 @@
+package org.springblade.code.controller;
+
+
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springblade.code.dto.CodeKeyAttrRepeatRuleDTO;
+import org.springblade.code.pagemodel.CodeKeyAttrRepeatRuleVO;
+import org.springblade.code.service.CodeKeyAttrRepeatRuleServiceI;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鎺у埗鍣�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeKeyAttrRepeatController")
+public class CodeKeyAttrRepeatRuleController {
+    /**
+    * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯 鏈嶅姟
+    */
+    @Autowired
+    private CodeKeyAttrRepeatRuleServiceI codeKeyAttrRepeatRuleService;
+
+    /**
+     * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridCodeKeyAttrRepeatRule")
+    public DataGrid<CodeKeyAttrRepeatRuleVO> gridCodeKeyAttrRepeatRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeKeyAttrRepeatRuleService.gridCodeKeyAttrRepeatRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeKeyAttrRepeatRuleVO> addSave(@RequestBody CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO){
+         CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleVO = codeKeyAttrRepeatRuleService.addSave(codeKeyAttrRepeatRuleDTO);
+         return BaseResult.success(codeKeyAttrRepeatRuleVO);
+    }
+
+    /**
+     * 淇敼 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeKeyAttrRepeatRuleVO> editSave(@RequestBody CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO){
+        CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleVO = codeKeyAttrRepeatRuleService.editSave(codeKeyAttrRepeatRuleDTO);
+        return BaseResult.success(codeKeyAttrRepeatRuleVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeKeyAttrRepeatRule( CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) {
+        return codeKeyAttrRepeatRuleService.deleteCodeKeyAttrRepeatRule(codeKeyAttrRepeatRuleDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeKeyAttrRepeatRuleVO> getObjectByOid(String oid){
+        CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleVO = codeKeyAttrRepeatRuleService.getObjectByOid(oid);
+        return BaseResult.success(codeKeyAttrRepeatRuleVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByOids(String oids){
+        Collection<CodeKeyAttrRepeatRuleVO> voCollection =  codeKeyAttrRepeatRuleService.listCodeKeyAttrRepeatRuleByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeKeyAttrRepeatRuleVO> refDataGridCodeKeyAttrRepeatRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeKeyAttrRepeatRuleService.refDataGridCodeKeyAttrRepeatRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodePhaseAttrController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodePhaseAttrController.java
new file mode 100644
index 0000000..1fb5646
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodePhaseAttrController.java
@@ -0,0 +1,115 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodePhaseAttrDTO;
+import com.vci.mdm.pagemodel.CodePhaseAttrVO;
+import com.vci.mdm.service.CodePhaseAttrServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 闃舵鐨勫睘鎬ф帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codePhaseAttrController")
+public class CodePhaseAttrController {
+    /**
+    * 闃舵鐨勫睘鎬� 鏈嶅姟
+    */
+    @Autowired
+    private CodePhaseAttrServiceI codePhaseAttrService;
+
+    /**
+     * 闃舵鐨勫睘鎬у垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodePhaseAttr")
+    public DataGrid<CodePhaseAttrVO> gridCodePhaseAttr(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codePhaseAttrService.gridCodePhaseAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodePhaseAttrVO> addSave(@RequestBody CodePhaseAttrDTO codePhaseAttrDTO){
+         CodePhaseAttrVO codePhaseAttrVO = codePhaseAttrService.addSave(codePhaseAttrDTO);
+         return BaseResult.success(codePhaseAttrVO);
+    }
+
+    /**
+     * 淇敼 闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodePhaseAttrVO> editSave(@RequestBody CodePhaseAttrDTO codePhaseAttrDTO){
+        CodePhaseAttrVO codePhaseAttrVO = codePhaseAttrService.editSave(codePhaseAttrDTO);
+        return BaseResult.success(codePhaseAttrVO);
+    }
+
+
+    /**
+     * 鍒犻櫎闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodePhaseAttr( CodePhaseAttrDTO codePhaseAttrDTO) {
+        return codePhaseAttrService.deleteCodePhaseAttr(codePhaseAttrDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇闃舵鐨勫睘鎬�
+    * @param oid 涓婚敭
+    * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodePhaseAttrVO> getObjectByOid(String oid){
+        CodePhaseAttrVO codePhaseAttrVO = codePhaseAttrService.getObjectByOid(oid);
+        return BaseResult.success(codePhaseAttrVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇闃舵鐨勫睘鎬�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodePhaseAttrVO> listCodePhaseAttrByOids(String oids){
+        Collection<CodePhaseAttrVO> voCollection =  codePhaseAttrService.listCodePhaseAttrByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収闃舵鐨勫睘鎬у垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodePhaseAttrVO> refDataGridCodePhaseAttr(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codePhaseAttrService.refDataGridCodePhaseAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeResembleRuleController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeResembleRuleController.java
new file mode 100644
index 0000000..92303cb
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeResembleRuleController.java
@@ -0,0 +1,115 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeResembleRuleDTO;
+import com.vci.mdm.pagemodel.CodeResembleRuleVO;
+import com.vci.mdm.service.CodeResembleRuleServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鎺у埗鍣�
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+@RestController
+@RequestMapping("/resembleRuleController")
+public class CodeResembleRuleController {
+    /**
+    * 鐩镐技鏌ヨ瑙勫垯 鏈嶅姟
+    */
+    @Autowired
+    private CodeResembleRuleServiceI codeResembleRuleService;
+
+    /**
+     * 鐩镐技鏌ヨ瑙勫垯鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridCodeResembleRule")
+    public DataGrid<CodeResembleRuleVO> gridCodeResembleRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeResembleRuleService.gridCodeResembleRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeResembleRuleVO> addSave(@RequestBody CodeResembleRuleDTO codeResembleRuleDTO){
+         CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.addSave(codeResembleRuleDTO);
+         return BaseResult.success(codeResembleRuleVO);
+    }
+
+    /**
+     * 淇敼 鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeResembleRuleVO> editSave(@RequestBody CodeResembleRuleDTO codeResembleRuleDTO){
+        CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.editSave(codeResembleRuleDTO);
+        return BaseResult.success(codeResembleRuleVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeResembleRule( CodeResembleRuleDTO codeResembleRuleDTO) {
+        return codeResembleRuleService.deleteCodeResembleRule(codeResembleRuleDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鐩镐技鏌ヨ瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeResembleRuleVO> getObjectByOid(String oid){
+        CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.getObjectByOid(oid);
+        return BaseResult.success(codeResembleRuleVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐩镐技鏌ヨ瑙勫垯
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeResembleRuleVO> listCodeResembleRuleByOids(String oids){
+        Collection<CodeResembleRuleVO> voCollection =  codeResembleRuleService.listCodeResembleRuleByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鐩镐技鏌ヨ瑙勫垯鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeResembleRuleService.refDataGridCodeResembleRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeRuleController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeRuleController.java
new file mode 100644
index 0000000..ae1dec9
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeRuleController.java
@@ -0,0 +1,166 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeRuleDTO;
+import com.vci.mdm.pagemodel.CodeClassifyVO;
+import com.vci.mdm.pagemodel.CodeRuleVO;
+import com.vci.mdm.service.CodeRuleServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+import java.util.Map;
+
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/mdmRuleController")
+public class CodeRuleController {
+    /**
+    * 涓绘暟鎹紪鐮佽鍒� 鏈嶅姟
+    */
+    @Autowired
+    private CodeRuleServiceI codeRuleService;
+
+    /**
+     * 涓绘暟鎹紪鐮佽鍒欏垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeRule")
+    public DataGrid<CodeRuleVO> gridCodeRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        DataGrid<CodeRuleVO> result = codeRuleService.gridCodeRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+        return result;
+    }
+    /**
+     * 澧炲姞 涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeRuleVO> addSave(@RequestBody CodeRuleDTO codeRuleDTO){
+         CodeRuleVO codeRuleVO = codeRuleService.addSave(codeRuleDTO);
+         return BaseResult.success(codeRuleVO);
+    }
+
+    /**
+     * 淇敼 涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeRuleVO> editSave(@RequestBody CodeRuleDTO codeRuleDTO){
+        CodeRuleVO codeRuleVO = codeRuleService.editSave(codeRuleDTO);
+        return BaseResult.success(codeRuleVO);
+    }
+
+
+    /**
+     * 鍒犻櫎涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeRule( CodeRuleDTO codeRuleDTO) {
+        return codeRuleService.deleteCodeRule(codeRuleDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓绘暟鎹紪鐮佽鍒�
+    * @param oid 涓婚敭
+    * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeRuleVO> getObjectByOid(String oid){
+        CodeRuleVO codeRuleVO = codeRuleService.getObjectByOid(oid);
+        return BaseResult.success(codeRuleVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeRuleVO> listCodeRuleByOids(String oids){
+        Collection<CodeRuleVO> voCollection =  codeRuleService.listCodeRuleByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収涓绘暟鎹紪鐮佽鍒欏垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeRuleVO> refDataGridCodeRule(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeRuleService.refDataGridCodeRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 鏌ョ湅涓绘暟鎹紪鐮佽鍒欑殑浣跨敤鑼冨洿
+     * @param oid 涓婚敭
+     * @return 浣跨敤鑼冨洿
+     */
+    @GetMapping("/listUseRange")
+    public BaseResult<CodeClassifyVO> listUseRange(String oid){
+        Collection<CodeClassifyVO> voList = codeRuleService.listUseRangeInCodeClassify(oid);
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voList);
+       return baseResult;
+    }
+
+    /**
+     * 鍋滅敤涓庡惎鐢ㄧ紪鐮佽鍒�
+     * @param map 灏佽鍙傛暟锛屽寘鎷琽id 缂栫爜瑙勫垯涓婚敭 update 鏇存柊鐘舵�佺殑鎿嶄綔
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping ("/updateStatus")
+    public BaseResult updateStatus(@RequestBody Map<String,String> map){
+        if (CollectionUtils.isEmpty(map)){
+            return BaseResult.fail("鍙傛暟閿欒");
+        }
+        String oid = map.get("oid");
+        String update = map.get("update");
+        return codeRuleService.updateStatus(oid,update);
+    }
+
+    /**
+     * 鍏嬮殕缂栫爜瑙勫垯
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     */
+    @PostMapping("/clone")
+    public BaseResult cloneCodeRule(@RequestBody CodeRuleDTO codeRuleDTO){
+        return codeRuleService.cloneCodeRule(codeRuleDTO);
+    }
+
+    /**
+     * 缂栫爜瑙勫垯娓呯┖鎵�鏈夊凡鐢熸垚鐨勭紪鐮�
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @DeleteMapping("/clearAllCode")
+    public BaseResult clearAllCode(String oid){
+        return codeRuleService.clearAllCode(oid);
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSerialAlgorithmController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSerialAlgorithmController.java
new file mode 100644
index 0000000..b5ebf20
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSerialAlgorithmController.java
@@ -0,0 +1,34 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.pagemodel.CodeSerialAlgorithmVO;
+import com.vci.mdm.service.CodeSerialAlgorithmServiceI;
+import com.vci.starter.web.pagemodel.DataGrid;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 娴佹按绠楁硶鎺у埗鍣�
+ * @author weidy
+ * @date 2022-2-17
+ */
+@RestController
+@RequestMapping("/codeSerialAlgorithmController")
+public class CodeSerialAlgorithmController {
+
+    /**
+     * 绠楁硶鏈嶅姟
+     */
+    @Autowired
+    private CodeSerialAlgorithmServiceI algorithmService;
+
+    /**
+     * 绠楁硶鐨勫垪琛�
+     * @return 绠楁硶鐨勪俊鎭�
+     */
+    @GetMapping("/gridCodeSerialAlgorithm")
+    public DataGrid<CodeSerialAlgorithmVO> gridCodeSerialAlgorithm(){
+        return algorithmService.gridSerialAlgorithm();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSynonymController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSynonymController.java
new file mode 100644
index 0000000..7e2c5f3
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSynonymController.java
@@ -0,0 +1,115 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeSynonymDTO;
+import com.vci.mdm.pagemodel.CodeSynonymVO;
+import com.vci.mdm.service.CodeSynonymServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 鍚屼箟璇嶉厤缃帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+@RestController
+@RequestMapping("/codeSynonymController")
+public class CodeSynonymController {
+    /**
+    * 鍚屼箟璇嶉厤缃� 鏈嶅姟
+    */
+    @Autowired
+    private CodeSynonymServiceI codeSynonymService;
+
+    /**
+     * 鍚屼箟璇嶉厤缃垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeSynonym")
+    public DataGrid<CodeSynonymVO> gridCodeSynonym(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeSynonymService.gridCodeSynonym(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeSynonymVO> addSave(@RequestBody CodeSynonymDTO codeSynonymDTO){
+         CodeSynonymVO codeSynonymVO = codeSynonymService.addSave(codeSynonymDTO);
+         return BaseResult.success(codeSynonymVO);
+    }
+
+    /**
+     * 淇敼 鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeSynonymVO> editSave(@RequestBody CodeSynonymDTO codeSynonymDTO){
+        CodeSynonymVO codeSynonymVO = codeSynonymService.editSave(codeSynonymDTO);
+        return BaseResult.success(codeSynonymVO);
+    }
+
+
+    /**
+     * 鍒犻櫎鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeSynonym( CodeSynonymDTO codeSynonymDTO) {
+        return codeSynonymService.deleteCodeSynonym(codeSynonymDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍚屼箟璇嶉厤缃�
+    * @param oid 涓婚敭
+    * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeSynonymVO> getObjectByOid(String oid){
+        CodeSynonymVO codeSynonymVO = codeSynonymService.getObjectByOid(oid);
+        return BaseResult.success(codeSynonymVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍚屼箟璇嶉厤缃�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeSynonymVO> listCodeSynonymByOids(String oids){
+        Collection<CodeSynonymVO> voCollection =  codeSynonymService.listCodeSynonymByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収鍚屼箟璇嶉厤缃垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeSynonymVO> refDataGridCodeSynonym(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeSynonymService.refDataGridCodeSynonym(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeTemplatePhaseController.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeTemplatePhaseController.java
new file mode 100644
index 0000000..e5e758e
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeTemplatePhaseController.java
@@ -0,0 +1,137 @@
+package org.springblade.code.controller;
+
+import com.vci.mdm.dto.CodeTemplatePhaseDTO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.mdm.pagemodel.CodeTemplatePhaseVO;
+import com.vci.mdm.service.CodeTemplatePhaseServiceI;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+
+
+/**
+ * 妯℃澘闃舵鎺у埗鍣�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeTempPhaseController")
+public class CodeTemplatePhaseController {
+    /**
+    * 妯℃澘闃舵 鏈嶅姟
+    */
+    @Autowired
+    private CodeTemplatePhaseServiceI codeTemplatePhaseService;
+
+    /**
+     * 妯℃澘闃舵鍒楄〃
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃
+     */
+    @GetMapping("/gridCodeTemplatePhase")
+    public DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeTemplatePhaseService.gridCodeTemplatePhase(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+    /**
+     * 澧炲姞 妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public BaseResult<CodeTemplatePhaseVO> addSave(@RequestBody CodeTemplatePhaseDTO codeTemplatePhaseDTO){
+         CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.addSave(codeTemplatePhaseDTO);
+         return BaseResult.success(codeTemplatePhaseVO);
+    }
+
+    /**
+     * 淇敼 妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public BaseResult<CodeTemplatePhaseVO> editSave(@RequestBody CodeTemplatePhaseDTO codeTemplatePhaseDTO){
+        CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.editSave(codeTemplatePhaseDTO);
+        return BaseResult.success(codeTemplatePhaseVO);
+    }
+
+
+    /**
+     * 鍒犻櫎妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public BaseResult delCodeTemplatePhase( CodeTemplatePhaseDTO codeTemplatePhaseDTO) {
+        return codeTemplatePhaseService.deleteCodeTemplatePhase(codeTemplatePhaseDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇妯℃澘闃舵
+    * @param oid 涓婚敭
+    * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+    */
+    @GetMapping("/getObjectByOid")
+    public BaseResult<CodeTemplatePhaseVO> getObjectByOid(String oid){
+        CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.getObjectByOid(oid);
+        return BaseResult.success(codeTemplatePhaseVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+     */
+    @GetMapping("/listDataByOids")
+    public BaseResult<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(String oids){
+        Collection<CodeTemplatePhaseVO> voCollection =  codeTemplatePhaseService.listCodeTemplatePhaseByOids(VciBaseUtil.str2List(oids));
+        BaseResult baseResult = BaseResult.success();
+        baseResult.setData(voCollection);
+        return  baseResult;
+    }
+
+
+
+    /**
+     * 鍙傜収妯℃澘闃舵鍒楄〃
+     * @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/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeAllCodeDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeAllCodeDaoI.java
new file mode 100644
index 0000000..cb57d90
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeAllCodeDaoI.java
@@ -0,0 +1,141 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeAllCodeDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鎵�鏈夌殑鐮佸�兼暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-03-01
+ */
+public interface  CodeAllCodeDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeAllCodeDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeAllCodeDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeAllCodeDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeAllCodeDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeAllCodeDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeAllCodeDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeAllCodeDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeAllCodeDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeAllCodeDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeAllCodeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeBasicSecDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeBasicSecDaoI.java
new file mode 100644
index 0000000..1ed80cd
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeBasicSecDaoI.java
@@ -0,0 +1,148 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeBasicSecDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鐮佹鍩虹淇℃伅鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeBasicSecDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeBasicSecDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeBasicSecDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeBasicSecDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeBasicSecDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeBasicSecDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeBasicSecDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeBasicSecDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeBasicSecDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeBasicSecDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeBasicSecDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+	/**
+	 * 灏咲O瀵硅薄杞崲涓築atchCBO锛屾柟渚夸笌Cbo瀵硅薄涓�璧锋搷浣�
+	 * @param codeBasicSec 鐮佹鍩烘湰淇℃伅DO瀵硅薄
+	 * @param operationType 鎿嶄綔鏂瑰紡 - add 娣诲姞 edit 缂栬緫 delete 鍒犻櫎
+	 * @return 鎵ц缁撴灉琛屾暟
+	 */
+	BatchCBO trans2BatchCBO(CodeBasicSecDO codeBasicSec,String operationType);
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeButtonDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeButtonDaoI.java
new file mode 100644
index 0000000..f914614
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeButtonDaoI.java
@@ -0,0 +1,141 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeButtonDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeButtonDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeButtonDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeButtonDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeButtonDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeButtonDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeButtonDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeButtonDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeButtonDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeButtonDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeButtonDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyDaoI.java
new file mode 100644
index 0000000..71499c9
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyDaoI.java
@@ -0,0 +1,232 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeClassifyDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撳垎绫绘暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+public interface  CodeClassifyDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撳垎绫绘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撳垎绫绘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄
+	 */
+	List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ煡璇㈡�绘暟
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鎬绘暟
+	 */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉 key鏄富閿紝value鏄湰娆℃煡璇㈢殑灞傜骇
+	*/
+	Map<String,String> selectAllLevelChildOid(String oid);
+
+	/**
+	 * 鑾峰彇鎵�鏈夊眰绾т笂绾у叧鑱斾笟鍔$被鍨嬫暟鎹�
+	 * @param oid 褰撳墠鍒嗙被鐨刼id
+	 * @return oid,id,name,btmtypeid,btmtypename
+	 */
+	List<CodeClassifyDO> selectAllLevelParents(String oid);
+
+	/**
+	 * 鑾峰彇褰撳墠鍒嗙被鐨勬墍鏈変笂绾у垎绫伙紙鍚湰娆℃煡璇㈠眰绾у彿锛�
+	 * @param oid 涓婚敭
+	 * @return 鎵�鏈夌殑涓婄骇
+	 */
+	List<CodeClassifyDO> selectAllLevelParentByOid(String oid);
+
+	/**
+	 * 鑾峰彇杩欎釜鍒嗙被涓嬬殑涓氬姟绫诲瀷锛屽綋鍓嶆病鏈夊氨鑾峰彇涓婄骇鐨勭涓�涓笟鍔$被鍨�
+	 * @param oid 褰撳墠鍒嗙被鐨刼id
+	 * @return oid,id,name,btmtypeid,btmtypename
+	 */
+	CodeClassifyDO selectBtmOrParentBtm(String oid);
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	List<CodeClassifyDO> selectAllLevelChild(String oid);
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓嬬骇锛屽苟鍖呭惈灞傜骇鐨勮矾寰�
+	 * @param oid 涓婄骇鐨勪富閿�
+	 * @param fieldInPath 瀛楁鍦ㄨ矾寰勪腑鐨勫唴瀹�
+	 * @param enable 鏄惁鍙煡璇㈠惎鐢�
+	 * @return 鍒嗙被鐨勬暟鎹唴瀹�
+	 */
+    List<CodeClassifyDO> selectAllLevelChildHasPath(String oid, String fieldInPath,boolean enable);
+
+    /**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	long countAllLevelChildOid(String oid);
+
+	/**
+	 * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
+	 *
+	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+	 * @return 鍒嗙被鐨勬樉绀哄璞�
+	 */
+	List<CodeClassifyDO> listParentClassify(String codeClassifyOid);
+
+	/**
+	 * 鏌ヨ杩欎釜鍒嗙被鐨剅oot鑺傜偣oid
+	 */
+	CodeClassifyDO getRootClassify(String codeClassifyOid);
+
+	/**
+	 * 鍒ゆ柇杩欎釜鍒嗙被鏄惁灞炰簬wupin鍒嗙被鏍�
+	 * @param oid
+	 * @return
+	 */
+	boolean isWupin(String oid);
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+	/**
+	 * 鏍¢獙鏄惁鍖呭惈瀛愯妭鐐�
+	 * @param oid 鍒嗙被鐨勪富閿�
+	 * @return true 琛ㄧず鍖呭惈
+	 */
+    boolean checkHasChild(String oid);
+
+	/**
+	 * 浣跨敤瀛楁鐨勮矾寰勶紝鏌ヨ瀵硅薄
+	 * @param fieldPath 瀛楁鐨勮矾寰勶紝蹇呴』浠庨《灞傝妭鐐瑰紑濮� xxx/yyy/zz鐨勬牸寮�
+	 * @param field 瀛楁鐨勮嫳鏂囧悕绉�
+	 * @return 鍒嗙被鐨勫璞�
+	 */
+	CodeClassifyDO selectByFieldPath(String fieldPath, String field);
+
+	/***
+	 * 鏍规嵁涓婄骇鑺傜偣鑾峰彇涓嬬骇鑺傜偣浠e彿璺緞鍜屽悕绉拌矾寰�
+	 * @param classifyId
+	 * @param enable
+	 * @return
+	 */
+	public List<CodeClassifyDO>getIdPathToNamePathByParentId(String classifyId,boolean enable);
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyProcessTempDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyProcessTempDaoI.java
new file mode 100644
index 0000000..f20c395
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyProcessTempDaoI.java
@@ -0,0 +1,141 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeClassifyProcessTempDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyProcessTempDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyProcessTempDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyProcessTempDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyProcessTempDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyProcessTempDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyProcessTempDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyProcessTempDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyProcessTempDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyProcessTempDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyProcessTempDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyProcessTempDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTempMapItemDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTempMapItemDaoI.java
new file mode 100644
index 0000000..01a6e26
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTempMapItemDaoI.java
@@ -0,0 +1,127 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeClassifyTempMapItemDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+public interface  CodeClassifyTempMapItemDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyTempMapItemDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyTempMapItemDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyTempMapItemDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTempMapItemDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyTempMapItemDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyTempMapItemDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyTempMapItemDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyTempMapItemDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTempMapItemDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTempMapItemDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateAttrDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateAttrDaoI.java
new file mode 100644
index 0000000..f12976d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateAttrDaoI.java
@@ -0,0 +1,127 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeClassifyTemplateAttrDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyTemplateAttrDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyTemplateAttrDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyTemplateAttrDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyTemplateAttrDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateAttrDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyTemplateAttrDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyTemplateAttrDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyTemplateAttrDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyTemplateAttrDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateAttrDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateButtonDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateButtonDaoI.java
new file mode 100644
index 0000000..5741fbe
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateButtonDaoI.java
@@ -0,0 +1,127 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeClassifyTemplateButtonDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyTemplateButtonDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyTemplateButtonDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyTemplateButtonDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyTemplateButtonDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateButtonDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyTemplateButtonDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyTemplateButtonDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyTemplateButtonDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyTemplateButtonDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateButtonDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateDaoI.java
new file mode 100644
index 0000000..1411914
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateDaoI.java
@@ -0,0 +1,169 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeClassifyTemplateDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyTemplateDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyTemplateDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyTemplateDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyTemplateDO selectByPrimaryKey(String oid);
+
+
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyTemplateDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyTemplateDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyTemplateDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyTemplateDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉
+	*/
+	List<String> selectAllLevelChildOid(String oid);
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	List<CodeClassifyTemplateDO> selectAllLevelChild(String oid);
+
+	/**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	long countAllLevelChildOid(String oid);
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+	/**
+	 * 鏌ヨ鍒嗙被鐨勫瓙鍒嗙被鍖呭惈鐨勬ā鏉跨殑鍐呭
+	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+	 * @return key鏄ā鏉跨殑涓婚敭锛寁alue鏄ā鏉挎墍灞炵殑鍒嗙被涓婚敭
+	 */
+    Map<String/**妯℃澘鐨勪富閿�**/, String/**妯℃澘鐨勫垎绫�**/> selectChildHasReleaseTemplate(String codeClassifyOid);
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateMapDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateMapDaoI.java
new file mode 100644
index 0000000..459871a
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateMapDaoI.java
@@ -0,0 +1,141 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeClassifyTemplateMapDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyTemplateMapDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyTemplateMapDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyTemplateMapDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyTemplateMapDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateMapDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyTemplateMapDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyTemplateMapDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyTemplateMapDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyTemplateMapDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateMapDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyTemplateMapDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyValueDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyValueDaoI.java
new file mode 100644
index 0000000..e32e185
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyValueDaoI.java
@@ -0,0 +1,147 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeClassifyValueDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeClassifyValueDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeClassifyValueDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeClassifyValueDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeClassifyValueDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyValueDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeClassifyValueDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeClassifyValueDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeClassifyValueDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeClassifyValueDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyValueDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeClassifyValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉
+	*/
+	List<String> selectAllLevelChildOid(String oid);
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	List<CodeClassifyValueDO> selectAllLevelChild(String oid);
+
+	/**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	long countAllLevelChildOid(String oid);
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeFixedValueDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeFixedValueDaoI.java
new file mode 100644
index 0000000..8e9021d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeFixedValueDaoI.java
@@ -0,0 +1,127 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeFixedValueDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeFixedValueDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeFixedValueDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeFixedValueDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeFixedValueDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeFixedValueDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeFixedValueDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeFixedValueDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeFixedValueDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeFixedValueDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeFixedValueDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeFixedValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeKeyAttrRepeatRuleDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeKeyAttrRepeatRuleDaoI.java
new file mode 100644
index 0000000..f6286f1
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeKeyAttrRepeatRuleDaoI.java
@@ -0,0 +1,148 @@
+package org.springblade.code.dao;
+
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import org.springblade.code.model.CodeKeyAttrRepeatRuleDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeKeyAttrRepeatRuleDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeKeyAttrRepeatRuleDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeKeyAttrRepeatRuleDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeKeyAttrRepeatRuleDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+	 * 鏍规嵁缂栧彿鎵归噺鏌ヨ瀵硅薄
+	 * @param ids 缂栧彿鐨勯泦鍚�
+	 * @return 涓氬姟瀵硅薄
+	 */
+	List<CodeKeyAttrRepeatRuleDO> selectByIdCollection(Collection<String> ids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeKeyAttrRepeatRuleDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeKeyAttrRepeatRuleDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeKeyAttrRepeatRuleDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeKeyAttrRepeatRuleDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeKeyAttrRepeatRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodePhaseAttrDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodePhaseAttrDaoI.java
new file mode 100644
index 0000000..076b034
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodePhaseAttrDaoI.java
@@ -0,0 +1,141 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodePhaseAttrDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 闃舵鐨勫睘鎬ф暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodePhaseAttrDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodePhaseAttrDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodePhaseAttrDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodePhaseAttrDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodePhaseAttrDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodePhaseAttrDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodePhaseAttrDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodePhaseAttrDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodePhaseAttrDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodePhaseAttrDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodePhaseAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeResembleRuleDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeResembleRuleDaoI.java
new file mode 100644
index 0000000..7bdb879
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeResembleRuleDaoI.java
@@ -0,0 +1,141 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeResembleRuleDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+public interface  CodeResembleRuleDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeResembleRuleDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeResembleRuleDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeResembleRuleDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeResembleRuleDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeResembleRuleDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeResembleRuleDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeResembleRuleDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeResembleRuleDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeResembleRuleDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeResembleRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeRuleDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeRuleDaoI.java
new file mode 100644
index 0000000..e70cee3
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeRuleDaoI.java
@@ -0,0 +1,155 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeRuleDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeRuleDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeRuleDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeRuleDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeRuleDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeRuleDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeRuleDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+	 * 浣跨敤缂栧彿闆嗗悎鎵归噺鏌ヨ瀵硅薄
+	 * @param ids 缂栧彿鐨勯泦鍚�
+	 * @return 涓氬姟瀵硅薄
+	 */
+	List<CodeRuleDO> selectByIdCollection(Collection<String> ids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeRuleDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeRuleDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeRuleDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeRuleDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+	/**
+	 * 鍒犻櫎鏁版嵁涓嶈繘琛屾寔涔呭寲锛岃浆鍖栦负batchCBO
+	 * @param codeRule 缂栫爜瑙勫垯瀵硅薄
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	BatchCBO delete4BatchCBO (CodeRuleDO codeRule);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSerialValueDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSerialValueDaoI.java
new file mode 100644
index 0000000..6f644b1
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSerialValueDaoI.java
@@ -0,0 +1,127 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeSerialValueDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 娴佹按鐨勫�兼暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-03-01
+ */
+public interface  CodeSerialValueDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 娴佹按鐨勫�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeSerialValueDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeSerialValueDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeSerialValueDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSerialValueDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeSerialValueDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeSerialValueDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 娴佹按鐨勫�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeSerialValueDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeSerialValueDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSerialValueDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSerialValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSynonymDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSynonymDaoI.java
new file mode 100644
index 0000000..96317ce
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSynonymDaoI.java
@@ -0,0 +1,127 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeSynonymDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍚屼箟璇嶉厤缃暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+public interface  CodeSynonymDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeSynonymDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeSynonymDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeSynonymDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSynonymDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeSynonymDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeSynonymDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeSynonymDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeSynonymDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSynonymDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeSynonymDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeTemplatePhaseDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeTemplatePhaseDaoI.java
new file mode 100644
index 0000000..a170046
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeTemplatePhaseDaoI.java
@@ -0,0 +1,141 @@
+package org.springblade.code.dao;
+
+import com.vci.mdm.model.CodeTemplatePhaseDO;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 妯℃澘闃舵鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface  CodeTemplatePhaseDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(CodeTemplatePhaseDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<CodeTemplatePhaseDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	CodeTemplatePhaseDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeTemplatePhaseDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<CodeTemplatePhaseDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<CodeTemplatePhaseDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(CodeTemplatePhaseDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<CodeTemplatePhaseDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeTemplatePhaseDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<CodeTemplatePhaseDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	Long countByWrapper(VciQueryWrapperForDO queryWrapper);
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	String selectNameByOid(String oid);
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	long batchUpdateLcStatus(Collection<String> oids,  String lcStatus);
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int updateLcStatus( String oid, String lcStatus);
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	BatchCBO batchDeleteByOids(Collection<String> oids);
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeAllCodeDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeAllCodeDaoImpl.java
new file mode 100644
index 0000000..1af62aa
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeAllCodeDaoImpl.java
@@ -0,0 +1,244 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeAllCodeDaoI;
+import com.vci.mdm.model.CodeAllCodeDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鎵�鏈夌殑鐮佸�兼暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-01
+ */
+@Repository
+public class  CodeAllCodeDaoImpl implements CodeAllCodeDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeAllCodeDO codeAllCodeDO = selectByPrimaryKey(oid);
+		return boService.delete(codeAllCodeDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeAllCodeDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeAllCodeDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeAllCodeDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeAllCodeDO record = boService.selectByOid(oid, CodeAllCodeDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeAllCodeDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeAllCodeDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeAllCodeDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeAllCodeDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeAllCodeDO> selectAll(){
+		return boService.queryObject(CodeAllCodeDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鎵�鏈夌殑鐮佸�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeAllCodeDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鎵�鏈夌殑鐮佸�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeAllCodeDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeAllCodeDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeAllCodeDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeAllCodeDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeAllCodeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeAllCodeDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeAllCodeDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeallcode");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeallcode");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeAllCodeDO> dos = boService.selectByOidCollection(oids, CodeAllCodeDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeBasicSecDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeBasicSecDaoImpl.java
new file mode 100644
index 0000000..a1310f2
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeBasicSecDaoImpl.java
@@ -0,0 +1,268 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeBasicSecDaoI;
+import com.vci.mdm.model.CodeBasicSecDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鐮佹鍩虹淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeBasicSecDaoImpl implements CodeBasicSecDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeBasicSecDO codeBasicSecDO = selectByPrimaryKey(oid);
+		return boService.delete(codeBasicSecDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeBasicSecDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeBasicSecDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeBasicSecDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeBasicSecDO record = boService.selectByOid(oid, CodeBasicSecDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeBasicSecDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeBasicSecDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeBasicSecDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeBasicSecDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeBasicSecDO> selectAll(){
+		return boService.queryObject(CodeBasicSecDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeBasicSecDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeBasicSecDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeBasicSecDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeBasicSecDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeBasicSecDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeBasicSecDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeBasicSecDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeBasicSecDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codebasicsec");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codebasicsec");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeBasicSecDO> dos = boService.selectByOidCollection(oids, CodeBasicSecDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+
+	/**
+	 * 涓嶈缃寔涔呭寲锛岃浆鍖朌O涓築atchCBO
+	 * @param codeBasicSec 鐮佹鍩虹淇℃伅瀵硅薄
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public BatchCBO trans2BatchCBO(CodeBasicSecDO codeBasicSec,String operationType) {
+		VciBaseUtil.alertNotNull(codeBasicSec,"鐮佹鍩虹淇℃伅");
+		WebUtil.setPersistence(false);
+		BatchCBO batchCBO = null;
+		if ("add".equals(operationType)) {
+			batchCBO= boService.addSave(codeBasicSec);
+		}else if ("edit".equals(operationType)){
+			batchCBO = boService.editSave(codeBasicSec);
+		}else if ("delete".equals(operationType)){
+			batchCBO = boService.delete(codeBasicSec);
+		}else{
+			batchCBO = new BatchCBO();
+		}
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeButtonDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeButtonDaoImpl.java
new file mode 100644
index 0000000..a859f1c
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeButtonDaoImpl.java
@@ -0,0 +1,244 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeButtonDaoI;
+import com.vci.mdm.model.CodeButtonDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeButtonDaoImpl implements CodeButtonDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeButtonDO codeButtonDO = selectByPrimaryKey(oid);
+		return boService.delete(codeButtonDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeButtonDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeButtonDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeButtonDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeButtonDO record = boService.selectByOid(oid, CodeButtonDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeButtonDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeButtonDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeButtonDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeButtonDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeButtonDO> selectAll(){
+		return boService.queryObject(CodeButtonDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeButtonDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeButtonDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeButtonDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeButtonDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeButtonDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeButtonDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeButtonDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codebutton");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codebutton");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeButtonDO> dos = boService.selectByOidCollection(oids, CodeButtonDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyDaoImpl.java
new file mode 100644
index 0000000..58e3940
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyDaoImpl.java
@@ -0,0 +1,517 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.constant.MdmBtmTypeConstant;
+import com.vci.mdm.dao.CodeClassifyDaoI;
+import com.vci.mdm.model.CodeClassifyDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.PlatformClientUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓婚搴撳垎绫绘暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+@Repository
+public class  CodeClassifyDaoImpl implements CodeClassifyDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+	 * 骞冲彴鐨勫鎴风
+	 */
+	@Autowired
+	private PlatformClientUtil platformClientUtil;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyDO codeClassifyDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撳垎绫绘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyDO record = boService.selectByOid(oid, CodeClassifyDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyDO> selectAll(){
+		return boService.queryObject(CodeClassifyDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撳垎绫绘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撳垎绫绘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyDO.class,conditionMap)));
+	}
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+	 *
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄
+	 */
+	@Override
+	public List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyDO.class);
+	}
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ煡璇㈡�绘暟
+	 *
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鎬绘暟
+	 */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper) {
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉锛宬ey鏄富閿紝value鏄湰娆℃煡璇㈢殑灞傜骇
+	*/
+	@Override
+	public Map<String,String> selectAllLevelChildOid(String oid){
+		String sql = "select oid,level from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " START WITH parentCodeClassifyOid = :oid CONNECT BY PRIOR OID = parentCodeClassifyOid";
+	    Map< String,String> conditionMap = new HashMap< String,String>();
+	    conditionMap.put("oid",oid);
+	    List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		Map<String,String> oidLevelMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(dataList)){
+			for(Map data:dataList){
+				oidLevelMap.put(VciBaseUtil.getStringValueFromObject(data.get("oid")),VciBaseUtil.getStringValueFromObject(data.get("level")));
+			}
+		}
+		return oidLevelMap;
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈夊眰绾т笂绾у叧鑱斾笟鍔$被鍨嬫暟鎹�
+	 * @param oid 褰撳墠鍒嗙被鐨刼id
+	 * @return oid,id,name,btmtypeid,btmtypename
+	 */
+	@Override
+	public List<CodeClassifyDO> 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<CodeClassifyDO> oidList = new ArrayList<CodeClassifyDO>();
+		if(!CollectionUtils.isEmpty(dataList)){
+			for(Map data:dataList){
+				CodeClassifyDO codeClassifyDO = new CodeClassifyDO();
+				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;
+	}
+
+	/**
+	 * 鑾峰彇褰撳墠鍒嗙被鐨勬墍鏈変笂绾у垎绫伙紙鍚湰娆℃煡璇㈠眰绾у彿锛�
+	 * @param oid 涓婚敭
+	 * @return 鎵�鏈夌殑涓婄骇
+	 */
+	@Override
+	public List<CodeClassifyDO> selectAllLevelParentByOid(String oid){
+		String sql = "select oid,level from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " start with oid= :oid connect by prior PARENTCODECLASSIFYOID = oid ";
+		Map< String,String> conditionMap = new HashMap< String,String>();
+		conditionMap.put("oid",oid);
+		List<ClientBusinessObject> cbos = boService.queryBySql(sql, conditionMap);
+		Map<String,String> oidLevelMap = new HashMap<>();
+		Optional.ofNullable(cbos).orElseGet(()->new ArrayList<>()).stream().forEach(cbo->{
+			oidLevelMap.put(cbo.getOid(),cbo.getAttributeValue("level"));
+		});
+		if(CollectionUtils.isEmpty(oidLevelMap)){
+			return new ArrayList<>();
+		}
+		//浣跨敤涓婚敭鏌ヨ涓�涓�
+		List<CodeClassifyDO> classifyDOS = selectByPrimaryKeyCollection(oidLevelMap.keySet());
+		if(!CollectionUtils.isEmpty(classifyDOS)){
+			classifyDOS.stream().forEach(classifyDO->{
+				classifyDO.setDataLevel(VciBaseUtil.getInt(oidLevelMap.getOrDefault(classifyDO.getOid(),"0")));
+			});
+		}
+		return classifyDOS;
+	}
+
+	/**
+	 * 鑾峰彇杩欎釜鍒嗙被涓嬬殑涓氬姟绫诲瀷锛屽綋鍓嶆病鏈夊氨鑾峰彇涓婄骇鐨勭涓�涓笟鍔$被鍨�
+	 * @param oid 褰撳墠鍒嗙被鐨刼id
+	 * @return oid,id,name,btmtypeid,btmtypename锛屾病鏈夊氨杩斿洖null
+	 */
+	@Override
+	public CodeClassifyDO selectBtmOrParentBtm(String oid){
+		List<CodeClassifyDO> oidList = selectAllLevelParents(oid);
+		return oidList.size()==0?null:oidList.get(0);
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public List<CodeClassifyDO> selectAllLevelChild(String oid){
+		Map<String, String> oidLevelMap = selectAllLevelChildOid(oid);
+		if(CollectionUtils.isEmpty(oidLevelMap)){
+			return new ArrayList<>();
+		}
+		List<CodeClassifyDO> classifyDOS = boService.selectByOidCollection(oidLevelMap.keySet(), CodeClassifyDO.class);
+		if(!CollectionUtils.isEmpty(classifyDOS)){
+			classifyDOS.stream().forEach(classifyDO->{
+				classifyDO.setDataLevel(VciBaseUtil.getInt(oidLevelMap.getOrDefault(classifyDO.getOid(),"0")));
+			});
+		}
+		return classifyDOS;
+	}
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓嬬骇锛屽苟鍖呭惈灞傜骇鐨勮矾寰�
+	 * @param oid 涓婄骇鐨勪富閿�
+	 * @param fieldInPath 瀛楁鍦ㄨ矾寰勪腑鐨勫唴瀹�
+	 * @param enable 鏄惁鍙煡璇㈠惎鐢ㄧ殑
+	 * @return 鍒嗙被鐨勬暟鎹唴瀹�
+	 */
+	@Override
+	public List<CodeClassifyDO> selectAllLevelChildHasPath(String oid, String fieldInPath, boolean enable){
+		VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(new HashMap<>(),CodeClassifyDO.class);
+		if(StringUtils.isBlank(fieldInPath)){
+			fieldInPath = VciQueryWrapperForDO.ID_FIELD;
+		}
+		//coderuleoid.name as codeRuleOidName
+		String selectField = queryWrapperForDO.getSelectFieldSql().replace(", path","").replace(", dataLevel","")
+				+ ",level as datalevel ,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + "." + fieldInPath + ", '#') as path ";
+		String sql = selectField + " from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " " + queryWrapperForDO.getTableNick() +
+				queryWrapperForDO.getLinkTableSql() +
+				(enable?" where " +  queryWrapperForDO.getTableNick() + ".lcstatus ='Enabled' " :"")
+				+ " START WITH " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid " + (StringUtils.isBlank(oid)?" is null " : " = '" + oid + "' " )
+				+ " CONNECT BY PRIOR " +  queryWrapperForDO.getTableNick() + ".OID = " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid";
+		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
+		return dataList;
+	}
+
+	/**
+	 *
+	 * @param classifyId
+	 * @param enable
+	 * @return
+	 */
+	@Override
+	public List<CodeClassifyDO> getIdPathToNamePathByParentId(String classifyId,boolean enable) {
+		VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(new HashMap<>(), CodeClassifyDO.class);
+		//coderuleoid.name as codeRuleOidName
+		String selectField = queryWrapperForDO.getSelectFieldSql().replace(", path","").replace(", dataLevel","")
+		+",level as datalevel ,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + ".name, '#') as namePath,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + ".id, '#') as idPath ,SYS_CONNECT_BY_PATH (" + queryWrapperForDO.getTableNick() + ".id, '#') as path ";
+		String sql = selectField + " from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " " + queryWrapperForDO.getTableNick() +
+				queryWrapperForDO.getLinkTableSql() +
+				(enable?" where " +  queryWrapperForDO.getTableNick() + ".lcstatus ='Enabled' " :"")
+				+ " START WITH " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid " + (StringUtils.isBlank(classifyId)?" is null " : " = '" + classifyId + "' " )
+				+ " CONNECT BY PRIOR " +  queryWrapperForDO.getTableNick() + ".OID = " +  queryWrapperForDO.getTableNick() + ".parentCodeClassifyOid";
+		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
+
+		return dataList;
+	}
+
+	/**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	@Override
+	public long countAllLevelChildOid(String oid){
+		String sql = "select count(OID) as countsize from platformbtm_codeclassify START WITH parentCodeClassifyOid = :oid CONNECT BY PRIOR OID= parentCodeClassifyOid";
+		Map< String,String> conditionMap = new HashMap< String,String>();
+		conditionMap.put("oid",oid);
+		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		return !CollectionUtils.isEmpty(dataList)?VciBaseUtil.getInt(VciBaseUtil.getStringValueFromObject(dataList.get(0).get("countsize"))):0;
+	}
+
+	/**
+	 * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
+	 *
+	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+	 * @return 鍒嗙被鐨勬樉绀哄璞�
+	 */
+	@Override
+	public List<CodeClassifyDO> listParentClassify(String codeClassifyOid){
+		String sql = "select\n" +
+				"*\n" +
+				"from\n" +
+				"PLATFORMBTM_CODECLASSIFY\n" +
+				"where lcstatus='Enabled'" +
+				"start with \n" +
+				"oid='"+codeClassifyOid+"'\n" +
+				"connect by \n" +
+				"prior parentcodeclassifyoid=oid";
+		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
+		return dataList;
+	}
+
+	/**
+	 * 鏌ヨ杩欎釜鍒嗙被鐨剅oot鑺傜偣oid
+	 */
+	@Override
+	public CodeClassifyDO getRootClassify(String codeClassifyOid){
+		List<CodeClassifyDO> dataList = listParentClassify(codeClassifyOid);
+		return dataList.size()>0?dataList.get(dataList.size()-1):null;
+	}
+
+	/**
+	 * 鍒ゆ柇杩欎釜鍒嗙被鏄惁灞炰簬wupin鍒嗙被鏍�
+	 * @param oid
+	 * @return
+	 */
+	@Override
+	public boolean isWupin(String oid){
+		boolean u = false;
+		String sql = "  select count(1) iswupin from \n" +
+				"  (\n" +
+				"  select\n" +
+				"  oid\n" +
+				"  from\n" +
+				"  PLATFORMBTM_CODECLASSIFY\n" +
+				"  where lcstatus='Enabled'\n" +
+				"  start with\n" +
+				"  oid=\n" +
+				"  (\n" +
+				"  select oid from PLATFORMBTM_CODECLASSIFY where id='wupin'\n" +
+				"  )\n" +
+				"  connect by\n" +
+				"  parentcodeclassifyoid=prior oid\n" +
+				"  ) t\n" +
+				"  where oid = '"+oid+"'";
+		try {
+			List<Map> dataList = boService.queryByOnlySqlForMap(sql);
+			String iswupin = dataList.get(0).getOrDefault("ISWUPIN","0").toString();
+			int count = Integer.parseInt(iswupin);
+			u=count>0?true:false;
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+		return u;
+	}
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeclassify");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeclassify");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyDO> dos = boService.selectByOidCollection(oids, CodeClassifyDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁鍖呭惈瀛愯妭鐐�
+	 *
+	 * @param oid 鍒嗙被鐨勪富閿�
+	 * @return true 琛ㄧず鍖呭惈
+	 */
+	@Override
+	public boolean checkHasChild(String oid) {
+		if(StringUtils.isBlank(oid)){
+			return false;
+		}
+		Map<String ,String > conditionMap = new HashMap<>();
+		conditionMap.put("parentCodeClassifyOid",oid);
+		return boService.queryCount(CodeClassifyDO.class,conditionMap) > 0;
+	}
+
+	/**
+	 * 浣跨敤瀛楁鐨勮矾寰勶紝鏌ヨ瀵硅薄
+	 *
+	 * @param fieldPath 瀛楁鐨勮矾寰勶紝蹇呴』浠庨《灞傝妭鐐瑰紑濮� xxx/yyy/zz鐨勬牸寮�
+	 * @param field     瀛楁鐨勮嫳鏂囧悕绉�
+	 * @return 鍒嗙被鐨勫璞�
+	 */
+	@Override
+	public CodeClassifyDO selectByFieldPath(String fieldPath, String field) {
+		if(StringUtils.isBlank(field)){
+			field = VciQueryWrapperForDO.ID_FIELD;
+		}
+		VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(new HashMap<>(),CodeClassifyDO.class);
+		String sql = "select * from (select oid , SYS_CONNECT_BY_PATH(" + field + ",'/') as paths from " + queryWrapperForDO.getTableName() +
+				" START WITH parentCodeClassifyOid is null CONNECT BY PRIOR OID= parentCodeClassifyOid ) a where a.paths = '/" + fieldPath + "' ";
+		List<CodeClassifyDO> dataList =boService.queryByOnlySqlForObj(sql,CodeClassifyDO.class);
+		return (!CollectionUtils.isEmpty(dataList))?selectByPrimaryKey(dataList.get(0).getOid()):null;
+	}
+
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyProcessTempDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyProcessTempDaoImpl.java
new file mode 100644
index 0000000..025502f
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyProcessTempDaoImpl.java
@@ -0,0 +1,244 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeClassifyProcessTempDaoI;
+import com.vci.mdm.model.CodeClassifyProcessTempDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyProcessTempDaoImpl implements CodeClassifyProcessTempDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyProcessTempDO codeClassifyProcessTempDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyProcessTempDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyProcessTempDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyProcessTempDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyProcessTempDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyProcessTempDO record = boService.selectByOid(oid, CodeClassifyProcessTempDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyProcessTempDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyProcessTempDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyProcessTempDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyProcessTempDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyProcessTempDO> selectAll(){
+		return boService.queryObject(CodeClassifyProcessTempDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyProcessTempDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyProcessTempDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyProcessTempDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyProcessTempDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyProcessTempDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyProcessTempDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyProcessTempDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyProcessTempDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeclsflowtemp");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeclsflowtemp");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyProcessTempDO> dos = boService.selectByOidCollection(oids, CodeClassifyProcessTempDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java
new file mode 100644
index 0000000..6460b90
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java
@@ -0,0 +1,212 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeClassifyTempMapItemDaoI;
+import com.vci.mdm.model.CodeClassifyTempMapItemDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+@Repository
+public class  CodeClassifyTempMapItemDaoImpl implements CodeClassifyTempMapItemDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyTempMapItemDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyTempMapItemDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyTempMapItemDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyTempMapItemDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTempMapItemDO record = boService.selectByOid(oid, CodeClassifyTempMapItemDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTempMapItemDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTempMapItemDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyTempMapItemDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyTempMapItemDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyTempMapItemDO> selectAll(){
+		return boService.queryObject(CodeClassifyTempMapItemDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyTempMapItemDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyTempMapItemDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTempMapItemDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyTempMapItemDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTempMapItemDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyTempMapItemDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTempMapItemDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTempMapItemDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyTempMapItemDO> dos = boService.selectByOidCollection(oids, CodeClassifyTempMapItemDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java
new file mode 100644
index 0000000..80bed10
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java
@@ -0,0 +1,212 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeClassifyTemplateAttrDaoI;
+import com.vci.mdm.model.CodeClassifyTemplateAttrDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyTemplateAttrDaoImpl implements CodeClassifyTemplateAttrDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyTemplateAttrDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyTemplateAttrDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyTemplateAttrDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyTemplateAttrDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTemplateAttrDO record = boService.selectByOid(oid, CodeClassifyTemplateAttrDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateAttrDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateAttrDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyTemplateAttrDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyTemplateAttrDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyTemplateAttrDO> selectAll(){
+		return boService.queryObject(CodeClassifyTemplateAttrDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateAttrDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyTemplateAttrDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateAttrDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyTemplateAttrDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateAttrDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyTemplateAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateAttrDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateAttrDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyTemplateAttrDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateAttrDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos,false);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java
new file mode 100644
index 0000000..05e5b4e
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java
@@ -0,0 +1,212 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeClassifyTemplateButtonDaoI;
+import com.vci.mdm.model.CodeClassifyTemplateButtonDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyTemplateButtonDaoImpl implements CodeClassifyTemplateButtonDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyTemplateButtonDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyTemplateButtonDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyTemplateButtonDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyTemplateButtonDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTemplateButtonDO record = boService.selectByOid(oid, CodeClassifyTemplateButtonDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateButtonDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateButtonDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyTemplateButtonDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyTemplateButtonDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyTemplateButtonDO> selectAll(){
+		return boService.queryObject(CodeClassifyTemplateButtonDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateButtonDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyTemplateButtonDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateButtonDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyTemplateButtonDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateButtonDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyTemplateButtonDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateButtonDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateButtonDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyTemplateButtonDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateButtonDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateDaoImpl.java
new file mode 100644
index 0000000..701576c
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateDaoImpl.java
@@ -0,0 +1,319 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.mdm.constant.MdmBtmTypeConstant;
+import com.vci.mdm.dao.CodeClassifyTemplateDaoI;
+import com.vci.mdm.lifecycle.CodeClassifyTemplateLC;
+import com.vci.mdm.model.CodeClassifyTemplateDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyTemplateDaoImpl implements CodeClassifyTemplateDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateDO codeClassifyTemplateDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyTemplateDO,false);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyTemplateDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyTemplateDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyTemplateDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTemplateDO record = boService.selectByOid(oid, CodeClassifyTemplateDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyTemplateDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyTemplateDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyTemplateDO> selectAll(){
+		return boService.queryObject(CodeClassifyTemplateDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyTemplateDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyTemplateDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyTemplateDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉
+	*/
+	@Override
+	public List<String> selectAllLevelChildOid(String oid){
+		String sql = "select oid from platformbtm_codeclstemplate START WITH codeClassifyOid = :oid CONNECT BY PRIOR codeClassifyOid= OID";
+	    Map< String,String> conditionMap = new HashMap< String,String>();
+	    conditionMap.put("oid",oid);
+	    List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		List<String> oidList = new ArrayList<String>();
+		if(!CollectionUtils.isEmpty(dataList)){
+			for(Map data:dataList){
+				oidList.add(VciBaseUtil.getStringValueFromObject(data.get("oid")));
+			}
+		}
+		return oidList;
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public List<CodeClassifyTemplateDO> selectAllLevelChild(String oid){
+		return boService.selectByOidCollection(selectAllLevelChildOid(oid),CodeClassifyTemplateDO.class);
+	}
+
+	/**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	@Override
+	public long countAllLevelChildOid(String oid){
+		String sql = "select count(OID) countsize from platformbtm_codeclstemplate START WITH codeClassifyOid = :oid CONNECT BY PRIOR codeClassifyOid = OID";
+		Map< String,String> conditionMap = new HashMap< String,String>();
+		conditionMap.put("oid",oid);
+		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		return !CollectionUtils.isEmpty(dataList)?VciBaseUtil.getInt(VciBaseUtil.getStringValueFromObject(dataList.get(0).get("countsize"))):0;
+	}
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codeclstemplate");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeclstemplate");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyTemplateDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+	/**
+	 * 鏌ヨ鍒嗙被鐨勫瓙鍒嗙被鍖呭惈鐨勬ā鏉跨殑鍐呭
+	 *
+	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+	 * @return key鏄ā鏉跨殑涓婚敭锛寁alue鏄ā鏉挎墍灞炵殑鍒嗙被涓婚敭
+	 */
+	@Override
+	public Map<String, String> selectChildHasReleaseTemplate(String codeClassifyOid) {
+		Map<String, String> tempClsMap = new HashMap<>();
+		if(StringUtils.isNotBlank(codeClassifyOid)) {
+			String sql = "select t.oid as oid,cls.oid as clsoid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE) +
+					" t left join (select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " where lcstatus = :lcstatus " +
+					" start with oid = :classifyoid \n" +
+					"connect by prior oid=parentcodeclassifyoid) cls  on t.codeclassifyoid = cls.oid where t.lcstatus =:templatelcstatus and cls.oid is not null\n";
+			Map<String, String> conditionMap = new HashMap<>();
+			conditionMap.put("lcstatus", FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED);
+			conditionMap.put("classifyoid", codeClassifyOid.trim());
+			conditionMap.put("templatelcstatus", CodeClassifyTemplateLC.RELEASED.getValue());
+			List<ClientBusinessObject> cbos = boService.queryBySql(sql, conditionMap);
+
+			if(!CollectionUtils.isEmpty(cbos)){
+				cbos.stream().forEach(cbo->{
+					tempClsMap.put(cbo.getOid(),cbo.getAttributeValue("clsoid"));
+				});
+			}else{
+
+			}
+		}
+		return tempClsMap;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java
new file mode 100644
index 0000000..66c620d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java
@@ -0,0 +1,244 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeClassifyTemplateMapDaoI;
+import com.vci.mdm.model.CodeClassifyTemplateMapDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyTemplateMapDaoImpl implements CodeClassifyTemplateMapDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyTemplateMapDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyTemplateMapDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyTemplateMapDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyTemplateMapDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTemplateMapDO record = boService.selectByOid(oid, CodeClassifyTemplateMapDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateMapDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateMapDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyTemplateMapDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyTemplateMapDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyTemplateMapDO> selectAll(){
+		return boService.queryObject(CodeClassifyTemplateMapDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyTemplateMapDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyTemplateMapDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyTemplateMapDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyTemplateMapDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateMapDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyTemplateMapDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateMapDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateMapDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codetempmap");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codetempmap");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyTemplateMapDO> dos = boService.selectByOidCollection(oids, CodeClassifyTemplateMapDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyValueDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyValueDaoImpl.java
new file mode 100644
index 0000000..1ceae22
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyValueDaoImpl.java
@@ -0,0 +1,254 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeClassifyValueDaoI;
+import com.vci.mdm.model.CodeClassifyValueDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeClassifyValueDaoImpl implements CodeClassifyValueDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyValueDO codeClassifyValueDO = selectByPrimaryKey(oid);
+		return boService.delete(codeClassifyValueDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeClassifyValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeClassifyValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeClassifyValueDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyValueDO record = boService.selectByOid(oid, CodeClassifyValueDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyValueDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeClassifyValueDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeClassifyValueDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeClassifyValueDO> selectAll(){
+		return boService.queryObject(CodeClassifyValueDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeClassifyValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeClassifyValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeClassifyValueDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeClassifyValueDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyValueDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeClassifyValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeClassifyValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyValueDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+	/**
+	* 鑾峰彇鎵�鏈夊眰绾т笅绾х殑涓婚敭
+	* @param oid 鏁版嵁涓婚敭
+	* @return 鏌ヨ缁撴灉
+	*/
+	@Override
+	public List<String> selectAllLevelChildOid(String oid){
+		String sql = "select oid FROM platformbtm_codeclassifyvalue START WITH parentClassifyValueOid = :oid CONNECT BY PRIOR parentClassifyValueOid= OID";
+	    Map< String,String> conditionMap = new HashMap< String,String>();
+	    conditionMap.put("oid",oid);
+	    List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		List<String> oidList = new ArrayList<String>();
+		if(!CollectionUtils.isEmpty(dataList)){
+			for(Map data:dataList){
+				oidList.add(VciBaseUtil.getStringValueFromObject(data.get("oid")));
+			}
+		}
+		return oidList;
+	}
+
+	/**
+	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
+	 * @param oid 鏁版嵁涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public List<CodeClassifyValueDO> selectAllLevelChild(String oid){
+		return boService.selectByOidCollection(selectAllLevelChildOid(oid),CodeClassifyValueDO.class);
+	}
+
+	/**
+	* 鏌ヨ鏌愪釜鑺傜偣鐨勬墍鏈夊眰绾т笅绾х殑涓暟
+	* @param oid 涓婚敭
+	* @return 鎬绘暟
+	*/
+	@Override
+	public long countAllLevelChildOid(String oid){
+		String sql = "select count(OID) countsize FROM platformbtm_codeclassifyvalue START WITH parentClassifyValueOid = :oid CONNECT BY PRIOR parentClassifyValueOid = OID";
+		Map< String,String> conditionMap = new HashMap< String,String>();
+		conditionMap.put("oid",oid);
+		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
+		return !CollectionUtils.isEmpty(dataList)?VciBaseUtil.getInt(VciBaseUtil.getStringValueFromObject(dataList.get(0).get("countsize"))):0;
+	}
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeClassifyValueDO> dos = boService.selectByOidCollection(oids, CodeClassifyValueDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeFixedValueDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeFixedValueDaoImpl.java
new file mode 100644
index 0000000..6dfe48d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeFixedValueDaoImpl.java
@@ -0,0 +1,219 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeFixedValueDaoI;
+import com.vci.mdm.model.CodeFixedValueDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+import plm.bs.bom.common.AttributeValue;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeFixedValueDaoImpl implements CodeFixedValueDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeFixedValueDO codeFixedValueDO = selectByPrimaryKey(oid);
+		return boService.delete(codeFixedValueDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeFixedValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeFixedValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeFixedValueDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeFixedValueDO record = boService.selectByOid(oid, CodeFixedValueDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeFixedValueDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeFixedValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeFixedValueDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeFixedValueDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeFixedValueDO> selectAll(){
+		return boService.queryObject(CodeFixedValueDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeFixedValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeFixedValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeFixedValueDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeFixedValueDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeFixedValueDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeFixedValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeFixedValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeFixedValueDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeFixedValueDO> dos = boService.selectByOidCollection(oids, CodeFixedValueDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		Set<ClientBusinessObject> deleteCbos = batchCBO.getDeleteCbos();
+		deleteCbos.forEach(cbo -> {
+			cbo.getBusinessObject().newAttrValList = new AttributeValue[0];
+		});
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java
new file mode 100644
index 0000000..850c959
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java
@@ -0,0 +1,261 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeKeyAttrRepeatRuleDaoI;
+import com.vci.mdm.model.CodeKeyAttrRepeatRuleDO;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeKeyAttrRepeatRuleDaoImpl implements CodeKeyAttrRepeatRuleDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = selectByPrimaryKey(oid);
+		return boService.delete(codeKeyAttrRepeatRuleDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeKeyAttrRepeatRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeKeyAttrRepeatRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeKeyAttrRepeatRuleDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeKeyAttrRepeatRuleDO record = boService.selectByOid(oid, CodeKeyAttrRepeatRuleDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeKeyAttrRepeatRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeKeyAttrRepeatRuleDO.class);
+	}
+
+	/**
+	 * 鏍规嵁缂栧彿鎵归噺鏌ヨ瀵硅薄
+	 *
+	 * @param ids 缂栧彿鐨勯泦鍚�
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectByIdCollection(Collection<String> ids) {
+		VciBaseUtil.alertNotNull(ids,"缂栧彿闆嗗悎");
+		Map<String,String> conditionMap = new HashMap<>();
+		conditionMap.put("id", QueryOptionConstant.IN +VciBaseUtil.toInSql(ids.toArray(new String[0])));
+		VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap, CodeKeyAttrRepeatRuleDO.class);
+		return boService.selectByQueryWrapper(wrapper,CodeKeyAttrRepeatRuleDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectAll(){
+		return boService.queryObject(CodeKeyAttrRepeatRuleDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeKeyAttrRepeatRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeKeyAttrRepeatRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeKeyAttrRepeatRuleDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeKeyAttrRepeatRuleDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeKeyAttrRepeatRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeKeyAttrRepeatRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeKeyAttrRepeatRuleDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codekeyattrrepeat");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codekeyattrrepeat");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeKeyAttrRepeatRuleDO> dos = boService.selectByOidCollection(oids, CodeKeyAttrRepeatRuleDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodePhaseAttrDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodePhaseAttrDaoImpl.java
new file mode 100644
index 0000000..7ef1a0f
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodePhaseAttrDaoImpl.java
@@ -0,0 +1,244 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodePhaseAttrDaoI;
+import com.vci.mdm.model.CodePhaseAttrDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 闃舵鐨勫睘鎬ф暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodePhaseAttrDaoImpl implements CodePhaseAttrDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodePhaseAttrDO codePhaseAttrDO = selectByPrimaryKey(oid);
+		return boService.delete(codePhaseAttrDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodePhaseAttrDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodePhaseAttrDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodePhaseAttrDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodePhaseAttrDO record = boService.selectByOid(oid, CodePhaseAttrDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodePhaseAttrDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodePhaseAttrDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodePhaseAttrDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodePhaseAttrDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodePhaseAttrDO> selectAll(){
+		return boService.queryObject(CodePhaseAttrDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 闃舵鐨勫睘鎬ф暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodePhaseAttrDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 闃舵鐨勫睘鎬ф暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodePhaseAttrDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodePhaseAttrDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodePhaseAttrDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodePhaseAttrDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodePhaseAttrDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodePhaseAttrDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodePhaseAttrDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codephaseattr");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codephaseattr");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodePhaseAttrDO> dos = boService.selectByOidCollection(oids, CodePhaseAttrDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeResembleRuleDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeResembleRuleDaoImpl.java
new file mode 100644
index 0000000..350efae
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeResembleRuleDaoImpl.java
@@ -0,0 +1,244 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeResembleRuleDaoI;
+import com.vci.mdm.model.CodeResembleRuleDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+@Repository
+public class  CodeResembleRuleDaoImpl implements CodeResembleRuleDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeResembleRuleDO codeResembleRuleDO = selectByPrimaryKey(oid);
+		return boService.delete(codeResembleRuleDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeResembleRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeResembleRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeResembleRuleDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeResembleRuleDO record = boService.selectByOid(oid, CodeResembleRuleDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeResembleRuleDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeResembleRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeResembleRuleDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeResembleRuleDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeResembleRuleDO> selectAll(){
+		return boService.queryObject(CodeResembleRuleDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeResembleRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeResembleRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeResembleRuleDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeResembleRuleDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeResembleRuleDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeResembleRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeResembleRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeResembleRuleDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "coderesemblerule");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "coderesemblerule");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeResembleRuleDO> dos = boService.selectByOidCollection(oids, CodeResembleRuleDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeRuleDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeRuleDaoImpl.java
new file mode 100644
index 0000000..aee581b
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeRuleDaoImpl.java
@@ -0,0 +1,273 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeRuleDaoI;
+import com.vci.mdm.model.CodeRuleDO;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeRuleDaoImpl implements CodeRuleDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeRuleDO codeRuleDO = selectByPrimaryKey(oid);
+		return boService.delete(codeRuleDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeRuleDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeRuleDO record = boService.selectByOid(oid, CodeRuleDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeRuleDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeRuleDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeRuleDO.class);
+	}
+
+	/**
+	 * 浣跨敤缂栧彿闆嗗悎鎵归噺鏌ヨ瀵硅薄
+	 *
+	 * @param ids 缂栧彿鐨勯泦鍚�
+	 * @return 涓氬姟瀵硅薄
+	 */
+	@Override
+	public List<CodeRuleDO> selectByIdCollection(Collection<String> ids) {
+		VciBaseUtil.alertNotNull(ids,"缂栧彿闆嗗悎");
+		Map<String,String> conditionMap = new HashMap<>();
+		conditionMap.put("id", QueryOptionConstant.IN + VciBaseUtil.toInSql(ids.toArray(new String[0])) );
+		VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeRuleDO.class);
+		return boService.selectByQueryWrapper(wrapper,CodeRuleDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeRuleDO> selectAll(){
+		return boService.queryObject(CodeRuleDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 涓绘暟鎹紪鐮佽鍒欐暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeRuleDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 涓绘暟鎹紪鐮佽鍒欐暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeRuleDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeRuleDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeRuleDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeRuleDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeRuleDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeRuleDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeRuleDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "coderule");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "coderule");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeRuleDO> dos = boService.selectByOidCollection(oids, CodeRuleDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+	/**
+	 * 鍒犻櫎鏁版嵁涓嶈繘琛屾寔涔呭寲锛岃浆鍖栦负batchCBO
+	 * @param codeRule 缂栫爜瑙勫垯瀵硅薄
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public BatchCBO delete4BatchCBO(CodeRuleDO codeRule) {
+		VciBaseUtil.alertNotNull(codeRule,"缂栫爜瑙勫垯");
+		WebUtil.setPersistence(false);
+		return boService.delete(codeRule);
+	}
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSerialValueDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSerialValueDaoImpl.java
new file mode 100644
index 0000000..94eba42
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSerialValueDaoImpl.java
@@ -0,0 +1,212 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeSerialValueDaoI;
+import com.vci.mdm.model.CodeSerialValueDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 娴佹按鐨勫�兼暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-01
+ */
+@Repository
+public class  CodeSerialValueDaoImpl implements CodeSerialValueDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeSerialValueDO codeSerialValueDO = selectByPrimaryKey(oid);
+		return boService.delete(codeSerialValueDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 娴佹按鐨勫�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeSerialValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeSerialValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeSerialValueDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeSerialValueDO record = boService.selectByOid(oid, CodeSerialValueDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeSerialValueDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeSerialValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeSerialValueDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeSerialValueDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeSerialValueDO> selectAll(){
+		return boService.queryObject(CodeSerialValueDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 娴佹按鐨勫�兼暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeSerialValueDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 娴佹按鐨勫�兼暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeSerialValueDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeSerialValueDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeSerialValueDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeSerialValueDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeSerialValueDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeSerialValueDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeSerialValueDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeSerialValueDO> dos = boService.selectByOidCollection(oids, CodeSerialValueDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSynonymDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSynonymDaoImpl.java
new file mode 100644
index 0000000..bfa8771
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSynonymDaoImpl.java
@@ -0,0 +1,212 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeSynonymDaoI;
+import com.vci.mdm.model.CodeSynonymDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 鍚屼箟璇嶉厤缃暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+@Repository
+public class  CodeSynonymDaoImpl implements CodeSynonymDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeSynonymDO codeSynonymDO = selectByPrimaryKey(oid);
+		return boService.delete(codeSynonymDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeSynonymDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeSynonymDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeSynonymDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeSynonymDO record = boService.selectByOid(oid, CodeSynonymDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeSynonymDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeSynonymDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeSynonymDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeSynonymDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeSynonymDO> selectAll(){
+		return boService.queryObject(CodeSynonymDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 鍚屼箟璇嶉厤缃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeSynonymDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 鍚屼箟璇嶉厤缃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeSynonymDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeSynonymDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeSynonymDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeSynonymDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeSynonymDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeSynonymDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeSynonymDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeSynonymDO> dos = boService.selectByOidCollection(oids, CodeSynonymDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeTemplatePhaseDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeTemplatePhaseDaoImpl.java
new file mode 100644
index 0000000..2148e43
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeTemplatePhaseDaoImpl.java
@@ -0,0 +1,244 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.CodeTemplatePhaseDaoI;
+import com.vci.mdm.model.CodeTemplatePhaseDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 妯℃澘闃舵鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Repository
+public class  CodeTemplatePhaseDaoImpl implements CodeTemplatePhaseDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeTemplatePhaseDO codeTemplatePhaseDO = selectByPrimaryKey(oid);
+		return boService.delete(codeTemplatePhaseDO,false);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(CodeTemplatePhaseDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<CodeTemplatePhaseDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public CodeTemplatePhaseDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeTemplatePhaseDO record = boService.selectByOid(oid, CodeTemplatePhaseDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeTemplatePhaseDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeTemplatePhaseDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<CodeTemplatePhaseDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, CodeTemplatePhaseDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<CodeTemplatePhaseDO> selectAll(){
+		return boService.queryObject(CodeTemplatePhaseDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 妯℃澘闃舵鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(CodeTemplatePhaseDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 妯℃澘闃舵鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<CodeTemplatePhaseDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<CodeTemplatePhaseDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(CodeTemplatePhaseDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeTemplatePhaseDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<CodeTemplatePhaseDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,CodeTemplatePhaseDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeTemplatePhaseDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+	/**
+	 * 鎵归噺淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬�
+	 * @param oids 涓婚敭闆嗗悎锛屼笉鑳藉ぇ浜�1000
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐨勫��
+	 * @return 鎵ц鐨勭粨鏋�
+	 */
+	@Override
+	public long batchUpdateLcStatus(Collection<String> oids,  String lcStatus){
+		List<ClientBusinessObject> cbos = boService.selectCBOByOidCollection(oids, "codetempphase");
+		if(CollectionUtils.isEmpty(cbos)){
+			return 0;
+		}
+		lifeCycleService.transCboStatus(cbos,lcStatus);
+		return cbos.size();
+	}
+	/**
+	 * 鏍规嵁涓婚敭鏇存柊鐘舵��
+	 * @param oid 涓婚敭
+	 * @param lcStatus 鐢熷懡鍛ㄦ湡鐘舵��
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int updateLcStatus( String oid, String lcStatus){
+		ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codetempphase");
+		if(cbo == null || StringUtils.isBlank(cbo.getOid())){
+			return 0;
+		}
+		lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus);
+		return 1;
+	}
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<CodeTemplatePhaseDO> dos = boService.selectByOidCollection(oids, CodeTemplatePhaseDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos,false);//涓嶅垽鏂弬鐓�
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingDataDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingDataDaoImpl.java
new file mode 100644
index 0000000..f5928e2
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingDataDaoImpl.java
@@ -0,0 +1,212 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.DockingDataDaoI;
+import com.vci.mdm.model.DockingDataDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+@Repository
+public class DockingDataDaoImpl implements DockingDataDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingDataDO DockingDataDO = selectByPrimaryKey(oid);
+		return boService.delete(DockingDataDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(DockingDataDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<DockingDataDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public DockingDataDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingDataDO record = boService.selectByOid(oid, DockingDataDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingDataDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingDataDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<DockingDataDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, DockingDataDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<DockingDataDO> selectAll(){
+		return boService.queryObject(DockingDataDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(DockingDataDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<DockingDataDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingDataDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(DockingDataDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingDataDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<DockingDataDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,DockingDataDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingDataDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<DockingDataDO> dos = boService.selectByOidCollection(oids, DockingDataDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingLogeDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingLogeDaoImpl.java
new file mode 100644
index 0000000..a29cbe9
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingLogeDaoImpl.java
@@ -0,0 +1,213 @@
+package org.springblade.code.dao.impl;
+
+
+import com.vci.mdm.dao.DockingLogeDaoI;
+import com.vci.mdm.model.DockingLogeDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+@Repository
+public class DockingLogeDaoImpl implements DockingLogeDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingLogeDO dockingLogDO = selectByPrimaryKey(oid);
+		return boService.delete(dockingLogDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(DockingLogeDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<DockingLogeDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public DockingLogeDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingLogeDO record = boService.selectByOid(oid, DockingLogeDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingLogeDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingLogeDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<DockingLogeDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, DockingLogeDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<DockingLogeDO> selectAll(){
+		return boService.queryObject(DockingLogeDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(DockingLogeDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<DockingLogeDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingLogeDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(DockingLogeDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingLogeDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<DockingLogeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,DockingLogeDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingLogeDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<DockingLogeDO> dos = boService.selectByOidCollection(oids, DockingLogeDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataDaoImpl.java
new file mode 100644
index 0000000..d09f54c
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataDaoImpl.java
@@ -0,0 +1,213 @@
+package org.springblade.code.dao.impl;
+
+
+import com.vci.mdm.dao.DockingPreApplyDataDaoI;
+import com.vci.mdm.model.DockingPreApplyDataDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+@Repository
+public class  DockingPreApplyDataDaoImpl implements DockingPreApplyDataDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreApplyDataDO dockingPreApplyDataDO = selectByPrimaryKey(oid);
+		return boService.delete(dockingPreApplyDataDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(DockingPreApplyDataDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<DockingPreApplyDataDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public DockingPreApplyDataDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingPreApplyDataDO record = boService.selectByOid(oid, DockingPreApplyDataDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingPreApplyDataDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreApplyDataDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<DockingPreApplyDataDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, DockingPreApplyDataDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<DockingPreApplyDataDO> selectAll(){
+		return boService.queryObject(DockingPreApplyDataDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(DockingPreApplyDataDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<DockingPreApplyDataDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingPreApplyDataDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(DockingPreApplyDataDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreApplyDataDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<DockingPreApplyDataDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,DockingPreApplyDataDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreApplyDataDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<DockingPreApplyDataDO> dos = boService.selectByOidCollection(oids, DockingPreApplyDataDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java
new file mode 100644
index 0000000..676885d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java
@@ -0,0 +1,213 @@
+package org.springblade.code.dao.impl;
+
+
+import com.vci.mdm.dao.DockingPreApplyDataInfoDaoI;
+import com.vci.mdm.model.DockingPreApplyDataInfoDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+@Repository
+public class  DockingPreApplyDataInfoDaoImpl implements DockingPreApplyDataInfoDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO = selectByPrimaryKey(oid);
+		return boService.delete(dockingPreApplyDataInfoDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(DockingPreApplyDataInfoDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<DockingPreApplyDataInfoDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public DockingPreApplyDataInfoDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingPreApplyDataInfoDO record = boService.selectByOid(oid, DockingPreApplyDataInfoDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingPreApplyDataInfoDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreApplyDataInfoDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<DockingPreApplyDataInfoDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, DockingPreApplyDataInfoDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<DockingPreApplyDataInfoDO> selectAll(){
+		return boService.queryObject(DockingPreApplyDataInfoDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(DockingPreApplyDataInfoDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<DockingPreApplyDataInfoDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingPreApplyDataInfoDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(DockingPreApplyDataInfoDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreApplyDataInfoDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<DockingPreApplyDataInfoDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,DockingPreApplyDataInfoDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreApplyDataInfoDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<DockingPreApplyDataInfoDO> dos = boService.selectByOidCollection(oids, DockingPreApplyDataInfoDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrMappingDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrMappingDaoImpl.java
new file mode 100644
index 0000000..e7e116f
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrMappingDaoImpl.java
@@ -0,0 +1,202 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.DockingPreAttrMappingDaoI;
+import com.vci.mdm.model.DockingPreAttrMappingDO;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+@Repository
+public class DockingPreAttrMappingDaoImpl implements DockingPreAttrMappingDaoI {
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+     */
+    @Autowired
+    private OsLifeCycleServiceI lifeCycleService;
+    /**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO deleteByPrimaryKey(String oid) {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreAttrMappingDO dockingPreAttrMappingDO = selectByPrimaryKey(oid);
+        return boService.delete(dockingPreAttrMappingDO);
+    }
+    /**
+     * 娣诲姞鏁版嵁
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO insert(DockingPreAttrMappingDO record) {
+        VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+        return boService.addSave(record);
+    }
+    /**
+     * 鎵归噺娣诲姞鏁版嵁
+     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+     * @return 鎵ц缁撴灉鏁�
+     */
+    @Override
+    public BatchCBO batchInsert(List<DockingPreAttrMappingDO> records) {
+        VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+        BatchCBO batchCBO = boService.batchAddSave(records);
+        return batchCBO;
+    }
+    /**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+    @Override
+    public DockingPreAttrMappingDO selectByPrimaryKey(String oid) {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreAttrMappingDO record = boService.selectByOid(oid, DockingPreAttrMappingDO.class);
+        if(record == null || StringUtils.isBlank(record.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return record;
+    }
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectByPrimaryKeys(String oids) {
+        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+        return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreAttrMappingDO.class);
+
+    }
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectByPrimaryKeyCollection(Collection<String> oids) {
+        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+        return boService.selectByOidCollection(oids, DockingPreAttrMappingDO.class);
+    }
+    /**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectAll() {
+        return boService.queryObject(DockingPreAttrMappingDO.class,null);
+    }
+    /**
+     * 鏇存柊瀵硅薄
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO updateByPrimaryKey(DockingPreAttrMappingDO record) {
+        VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+        return boService.editSave(record);
+    }
+    /**
+     * 鎵归噺鏇存柊
+     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+     * @return 鎵ц缁撴灉琛屾暟
+     */
+    @Override
+    public BatchCBO batchUpdate(List<DockingPreAttrMappingDO> records) {
+        VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+        BatchCBO batchCBO = boService.batchEditSave(records);
+        return batchCBO;
+    }
+    /**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectByCondition(Map<String, String> conditionMap, PageHelper pageHelper) {
+        return boService.queryObject(DockingPreAttrMappingDO.class,conditionMap,pageHelper);
+    }
+    /**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+    @Override
+    public Long countByCondition(Map<String, String> conditionMap) {
+        return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreAttrMappingDO.class,conditionMap)));
+    }
+    /**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
+        return boService.selectByQueryWrapper(queryWrapper,DockingPreAttrMappingDO.class);
+    }
+    /**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+    @Override
+    public Long countByWrapper(VciQueryWrapperForDO queryWrapper) {
+        return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreAttrMappingDO.class)));
+    }
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+    @Override
+    public String selectNameByOid(String oid) {
+        return selectByPrimaryKey(oid).getName();
+    }
+    /**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+    @Override
+    public BatchCBO batchDeleteByOids(Collection<String> oids) {
+        List<DockingPreAttrMappingDO> dos = boService.selectByOidCollection(oids, DockingPreAttrMappingDO.class);
+        BatchCBO batchCBO = boService.batchDelete(dos);
+        return batchCBO;
+    }
+
+    /***
+     * 鏍规嵁灞炴�т富閿壒閲忚幏鍙栧璞�
+     * @param oids 涓婚敭
+     * @return
+     */
+    @Override
+    public List<DockingPreAttrMappingDO> selectByOid(String oids){
+        VciBaseUtil.alertNotNull(oids,"涓婚敭");
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingPreAttrMappingDO.class);
+        queryWrapper.addQueryMap("oid", QueryOptionConstant.IN  + VciBaseUtil.toInSql(oids));
+        return selectByWrapper(queryWrapper);
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrRangeDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrRangeDaoImpl.java
new file mode 100644
index 0000000..10fecd5
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrRangeDaoImpl.java
@@ -0,0 +1,202 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.DockingPreAttrRangeDaoI;
+import com.vci.mdm.model.DockingPreAttrRangeDO;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+@Repository
+public class DockingPreAttrRangeDaoImpl implements DockingPreAttrRangeDaoI {
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+     */
+    @Autowired
+    private OsLifeCycleServiceI lifeCycleService;
+    /**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO deleteByPrimaryKey(String oid) {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreAttrRangeDO dockingPreAttrRangeDO = selectByPrimaryKey(oid);
+        return boService.delete(dockingPreAttrRangeDO);
+    }
+    /**
+     * 娣诲姞鏁版嵁
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO insert(DockingPreAttrRangeDO record) {
+        VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+        return boService.addSave(record);
+    }
+    /**
+     * 鎵归噺娣诲姞鏁版嵁
+     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+     * @return 鎵ц缁撴灉鏁�
+     */
+    @Override
+    public BatchCBO batchInsert(List<DockingPreAttrRangeDO> records) {
+        VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+        BatchCBO batchCBO = boService.batchAddSave(records);
+        return batchCBO;
+    }
+    /**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+    @Override
+    public DockingPreAttrRangeDO selectByPrimaryKey(String oid) {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreAttrRangeDO record = boService.selectByOid(oid, DockingPreAttrRangeDO.class);
+        if(record == null || StringUtils.isBlank(record.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return record;
+    }
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectByPrimaryKeys(String oids) {
+        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+        return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingPreAttrRangeDO.class);
+
+    }
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectByPrimaryKeyCollection(Collection<String> oids) {
+        VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+        return boService.selectByOidCollection(oids, DockingPreAttrRangeDO.class);
+    }
+    /**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectAll() {
+        return boService.queryObject(DockingPreAttrRangeDO.class,null);
+    }
+    /**
+     * 鏇存柊瀵硅薄
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO updateByPrimaryKey(DockingPreAttrRangeDO record) {
+        VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+        return boService.editSave(record);
+    }
+    /**
+     * 鎵归噺鏇存柊
+     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+     * @return 鎵ц缁撴灉琛屾暟
+     */
+    @Override
+    public BatchCBO batchUpdate(List<DockingPreAttrRangeDO> records) {
+        VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+        BatchCBO batchCBO = boService.batchEditSave(records);
+        return batchCBO;
+    }
+    /**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectByCondition(Map<String, String> conditionMap, PageHelper pageHelper) {
+        return boService.queryObject(DockingPreAttrRangeDO.class,conditionMap,pageHelper);
+    }
+    /**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+    @Override
+    public Long countByCondition(Map<String, String> conditionMap) {
+        return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingPreAttrRangeDO.class,conditionMap)));
+    }
+    /**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
+        return boService.selectByQueryWrapper(queryWrapper,DockingPreAttrRangeDO.class);
+    }
+    /**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+    @Override
+    public Long countByWrapper(VciQueryWrapperForDO queryWrapper) {
+        return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingPreAttrRangeDO.class)));
+    }
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+    @Override
+    public String selectNameByOid(String oid) {
+        return selectByPrimaryKey(oid).getName();
+    }
+    /**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+    @Override
+    public BatchCBO batchDeleteByOids(Collection<String> oids) {
+        List<DockingPreAttrRangeDO> dos = boService.selectByOidCollection(oids, DockingPreAttrRangeDO.class);
+        BatchCBO batchCBO = boService.batchDelete(dos);
+        return batchCBO;
+    }
+
+    /***
+     * 鏍规嵁灞炴�т富閿壒閲忚幏鍙栧璞�
+     * @param attrOid 涓婚敭
+     * @return
+     */
+    @Override
+    public List<DockingPreAttrRangeDO> selectByAttrOid(String attrOid){
+        VciBaseUtil.alertNotNull(attrOid,"灞炴�т富閿�");
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingPreAttrRangeDO.class);
+        queryWrapper.addQueryMap("jmetaListId", QueryOptionConstant.IN  + VciBaseUtil.toInSql(attrOid));
+        return selectByWrapper(queryWrapper);
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingTaskDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingTaskDaoImpl.java
new file mode 100644
index 0000000..cea550f
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingTaskDaoImpl.java
@@ -0,0 +1,212 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.DockingTaskDaoI;
+import com.vci.mdm.model.DockingTaskDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+@Repository
+public class  DockingTaskDaoImpl implements DockingTaskDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingTaskDO dockingTaskDO = selectByPrimaryKey(oid);
+		return boService.delete(dockingTaskDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(DockingTaskDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<DockingTaskDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public DockingTaskDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		DockingTaskDO record = boService.selectByOid(oid, DockingTaskDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingTaskDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), DockingTaskDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<DockingTaskDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, DockingTaskDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<DockingTaskDO> selectAll(){
+		return boService.queryObject(DockingTaskDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(DockingTaskDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<DockingTaskDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<DockingTaskDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(DockingTaskDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(DockingTaskDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<DockingTaskDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,DockingTaskDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,DockingTaskDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<DockingTaskDO> dos = boService.selectByOidCollection(oids, DockingTaskDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntAuthorityDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntAuthorityDaoImpl.java
new file mode 100644
index 0000000..53f8532
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntAuthorityDaoImpl.java
@@ -0,0 +1,212 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.SysIntAuthorityDaoI;
+import com.vci.mdm.model.SysIntAuthorityDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+@Repository
+public class  SysIntAuthorityDaoImpl implements SysIntAuthorityDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntAuthorityDO sysIntAuthorityDO = selectByPrimaryKey(oid);
+		return boService.delete(sysIntAuthorityDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(SysIntAuthorityDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<SysIntAuthorityDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public SysIntAuthorityDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		SysIntAuthorityDO record = boService.selectByOid(oid, SysIntAuthorityDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntAuthorityDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntAuthorityDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<SysIntAuthorityDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, SysIntAuthorityDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<SysIntAuthorityDO> selectAll(){
+		return boService.queryObject(SysIntAuthorityDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(SysIntAuthorityDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<SysIntAuthorityDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntAuthorityDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(SysIntAuthorityDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntAuthorityDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<SysIntAuthorityDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,SysIntAuthorityDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntAuthorityDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<SysIntAuthorityDO> dos = boService.selectByOidCollection(oids, SysIntAuthorityDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntBaseDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntBaseDaoImpl.java
new file mode 100644
index 0000000..0085b81
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntBaseDaoImpl.java
@@ -0,0 +1,212 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.mdm.dao.SysIntBaseDaoI;
+import com.vci.mdm.model.SysIntBaseDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+@Repository
+public class  SysIntBaseDaoImpl implements SysIntBaseDaoI{
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntBaseDO sysIntBaseDO = selectByPrimaryKey(oid);
+		return boService.delete(sysIntBaseDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(SysIntBaseDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<SysIntBaseDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public SysIntBaseDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		SysIntBaseDO record = boService.selectByOid(oid, SysIntBaseDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntBaseDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntBaseDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<SysIntBaseDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, SysIntBaseDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<SysIntBaseDO> selectAll(){
+		return boService.queryObject(SysIntBaseDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(SysIntBaseDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<SysIntBaseDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntBaseDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(SysIntBaseDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntBaseDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<SysIntBaseDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,SysIntBaseDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntBaseDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<SysIntBaseDO> dos = boService.selectByOidCollection(oids, SysIntBaseDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntHeaderDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntHeaderDaoImpl.java
new file mode 100644
index 0000000..84f4131
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntHeaderDaoImpl.java
@@ -0,0 +1,258 @@
+package org.springblade.code.dao.impl;
+
+
+import com.vci.mdm.dao.SysIntHeaderDaoI;
+import com.vci.mdm.model.SysIntHeaderDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+import static com.vci.mdm.constant.MdmDuckingConstant.FLAG_FAIL;
+
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+@Repository
+public class  SysIntHeaderDaoImpl implements SysIntHeaderDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntHeaderDO sysIntHeaderDO = selectByPrimaryKey(oid);
+		return boService.delete(sysIntHeaderDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(SysIntHeaderDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<SysIntHeaderDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public SysIntHeaderDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		SysIntHeaderDO record = boService.selectByOid(oid, SysIntHeaderDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntHeaderDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntHeaderDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<SysIntHeaderDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, SysIntHeaderDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<SysIntHeaderDO> selectAll(){
+		return boService.queryObject(SysIntHeaderDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(SysIntHeaderDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<SysIntHeaderDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntHeaderDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(SysIntHeaderDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntHeaderDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<SysIntHeaderDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,SysIntHeaderDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntHeaderDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<SysIntHeaderDO> dos = boService.selectByOidCollection(oids, SysIntHeaderDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+	//==
+
+	/**
+	 * 鏍规嵁sysinfo涓婚敭鎵归噺鑾峰彇瀵硅薄
+	 * @param sysinfoOid 涓婚敭
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	public List<SysIntHeaderDO> selectBySysinfoOid(String sysinfoOid){
+		VciBaseUtil.alertNotNull(sysinfoOid,"sysinfo涓婚敭");
+		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(SysIntHeaderDO.class);
+		queryWrapper.addQueryMap("infoOid",sysinfoOid);
+		return selectByWrapper(queryWrapper);
+	}
+
+	/**
+	 * 鎵归噺淇敼杩欎釜sysinfo鐨刪eader锛屽厛鍒犻櫎sysinfo鎵�鏈夌殑header,鍐嶆柊寤烘墍鏈夌殑
+	 * @param records
+	 */
+	public BaseResult updateSysinfoHeader(List<SysIntHeaderDO> records){
+
+		if(records.size()<1){
+			return BaseResult.fail("sysinfoOid涓嶈兘涓虹┖!");
+		}
+		String sysinfoOid = records.get(0).getInfoOid();
+
+		List<SysIntHeaderDO> sysIntHeaderDOList = selectBySysinfoOid(sysinfoOid);
+		for (SysIntHeaderDO sysIntHeaderDO:sysIntHeaderDOList){
+				sysIntHeaderDO.setUsedflag(FLAG_FAIL);
+		}
+
+		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+		//鍏堜綔搴熶互鍓嶇殑
+		BatchCBO batchCBO_batchUpdate = batchUpdate(sysIntHeaderDOList);
+		//鍐嶆柊澧�
+		BatchCBO batchCBO_batchInsert = batchInsert(records);
+		batchCBO_batchUpdate.copyFromOther(batchCBO_batchInsert);
+
+		WebUtil.setPersistence(true);//鎵ц淇濆瓨
+		boService.persistenceBatch(batchCBO_batchUpdate);//涓�璧锋墽琛屼繚瀛�
+		return BaseResult.success("鎵归噺鎵ц鎴愬姛");
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntInfoDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntInfoDaoImpl.java
new file mode 100644
index 0000000..199cae4
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntInfoDaoImpl.java
@@ -0,0 +1,212 @@
+package org.springblade.code.dao.impl;
+
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.SysIntInfoDaoI;
+import org.springblade.code.model.SysIntInfoDO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+
+
+/**
+ * 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+@Repository
+public class  SysIntInfoDaoImpl implements SysIntInfoDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntInfoDO sysIntInfoDO = selectByPrimaryKey(oid);
+		return boService.delete(sysIntInfoDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(SysIntInfoDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<SysIntInfoDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public SysIntInfoDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		SysIntInfoDO record = boService.selectByOid(oid, SysIntInfoDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntInfoDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntInfoDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<SysIntInfoDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, SysIntInfoDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<SysIntInfoDO> selectAll(Map conditonMap){
+		return boService.queryObject(SysIntInfoDO.class,conditonMap);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(SysIntInfoDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<SysIntInfoDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntInfoDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(SysIntInfoDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntInfoDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<SysIntInfoDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,SysIntInfoDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntInfoDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<SysIntInfoDO> dos = boService.selectByOidCollection(oids, SysIntInfoDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntParamDaoImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntParamDaoImpl.java
new file mode 100644
index 0000000..d405883
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntParamDaoImpl.java
@@ -0,0 +1,257 @@
+package org.springblade.code.dao.impl;
+
+
+import com.vci.mdm.dao.SysIntParamDaoI;
+import com.vci.mdm.model.SysIntParamDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+import static com.vci.mdm.constant.MdmDuckingConstant.FLAG_FAIL;
+
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰瀹炵幇绫�
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+@Repository
+public class  SysIntParamDaoImpl implements SysIntParamDaoI {
+
+	/**
+	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+	*/
+	@Autowired
+	private WebBoServiceI boService;
+
+	/**
+	* 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+	*/
+	@Autowired
+	private OsLifeCycleServiceI lifeCycleService;
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO deleteByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntParamDO sysIntParamDO = selectByPrimaryKey(oid);
+		return boService.delete(sysIntParamDO);
+	}
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO insert(SysIntParamDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佹坊鍔犵殑鏁版嵁");
+		return boService.addSave(record);
+	}
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	@Override
+	public BatchCBO batchInsert(List<SysIntParamDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佹坊鍔犵殑鏁版嵁");
+		BatchCBO batchCBO = boService.batchAddSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	@Override
+	public SysIntParamDO selectByPrimaryKey(String oid){
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		SysIntParamDO record = boService.selectByOid(oid, SysIntParamDO.class);
+		if(record == null || StringUtils.isBlank(record.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return record;
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntParamDO> selectByPrimaryKeys(String oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(VciBaseUtil.str2List(oids), SysIntParamDO.class);
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	@Override
+	public List<SysIntParamDO> selectByPrimaryKeyCollection(Collection<String> oids){
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return boService.selectByOidCollection(oids, SysIntParamDO.class);
+	}
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	@Override
+	public List<SysIntParamDO> selectAll(){
+		return boService.queryObject(SysIntParamDO.class,null);
+	}
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	@Override
+	public BatchCBO updateByPrimaryKey(SysIntParamDO record){
+		VciBaseUtil.alertNotNull(record,"瑕佷慨鏀圭殑瀵硅薄",record.getOid(),"涓婚敭");
+		return boService.editSave(record);
+    }
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	@Override
+	public BatchCBO batchUpdate(List<SysIntParamDO> records){
+		VciBaseUtil.alertNotNull(records,"瑕佷慨鏀圭殑瀵硅薄");
+		BatchCBO batchCBO = boService.batchEditSave(records);
+		return batchCBO;
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	@Override
+	public List<SysIntParamDO> selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){
+		return boService.queryObject(SysIntParamDO.class,conditionMap,pageHelper);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByCondition(Map< String,String> conditionMap){
+		return VciBaseUtil.getLong(String.valueOf(boService.queryCount(SysIntParamDO.class,conditionMap)));
+	}
+
+	/**
+	 * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鏁版嵁
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	@Override
+	public List<SysIntParamDO> selectByWrapper(VciQueryWrapperForDO queryWrapper){
+		return boService.selectByQueryWrapper(queryWrapper,SysIntParamDO.class);
+	}
+
+	/**
+     * 鏍规嵁鏌ヨ灏佽鍣ㄦ潵鏌ヨ鎬绘暟
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鎬绘暟
+     */
+	@Override
+	public Long countByWrapper(VciQueryWrapperForDO queryWrapper){
+		return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,SysIntParamDO.class)));
+	}
+
+	/**
+     * 鏍规嵁涓婚敭鑾峰彇鍚嶇О
+     * @param oid 涓婚敭
+     * @return 涓枃鍚嶇О
+     */
+	@Override
+	public String selectNameByOid(String oid){
+		return selectByPrimaryKey(oid).getName();
+	}
+
+
+
+	/**
+     * 鎵归噺鍒犻櫎瀵硅薄
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+	@Override
+	public BatchCBO batchDeleteByOids(Collection<String> oids){
+		List<SysIntParamDO> dos = boService.selectByOidCollection(oids, SysIntParamDO.class);
+		BatchCBO batchCBO = boService.batchDelete(dos);
+		return batchCBO;
+	}
+
+	//==
+
+	/**
+	 * 鏍规嵁sysinfo涓婚敭鎵归噺鑾峰彇瀵硅薄
+	 * @param sysinfoOid 涓婚敭
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	public List<SysIntParamDO> selectBySysinfoOid(String sysinfoOid){
+		VciBaseUtil.alertNotNull(sysinfoOid,"sysinfo涓婚敭");
+		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(SysIntParamDO.class);
+		queryWrapper.addQueryMap("infoOid",sysinfoOid);
+		return selectByWrapper(queryWrapper);
+	}
+
+	/**
+	 * 鎵归噺淇敼杩欎釜sysinfo鐨刪eader锛屽厛鍒犻櫎sysinfo鎵�鏈夌殑header,鍐嶆柊寤烘墍鏈夌殑
+	 * @param records
+	 */
+	public BaseResult updateSysinfoParam(List<SysIntParamDO> records){
+
+		if(records.size()<1){
+			return BaseResult.fail("sysinfoOid涓嶈兘涓虹┖!");
+		}
+		String sysinfoOid = records.get(0).getInfoOid();
+
+		List<SysIntParamDO> sysIntParamDOList = selectBySysinfoOid(sysinfoOid);
+		for (SysIntParamDO sysIntParamDO:sysIntParamDOList){
+			sysIntParamDO.setUsedflag(FLAG_FAIL);
+		}
+
+		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+		//鍏堜綔搴熶互鍓嶇殑
+		BatchCBO batchCBO_batchUpdate = batchUpdate(sysIntParamDOList);
+		//鍐嶆柊澧�
+		BatchCBO batchCBO_batchInsert = batchInsert(records);
+		batchCBO_batchUpdate.copyFromOther(batchCBO_batchInsert);
+
+		WebUtil.setPersistence(true);//鎵ц淇濆瓨
+		boService.persistenceBatch(batchCBO_batchUpdate);//涓�璧锋墽琛屼繚瀛�
+		return BaseResult.success("鎵归噺鎵ц鎴愬姛");
+	}
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeButtonUseEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeButtonUseEnum.java
new file mode 100644
index 0000000..4103b0f
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeButtonUseEnum.java
@@ -0,0 +1,140 @@
+package org.springblade.code.enumpack;
+
+
+import com.vci.mdm.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 妯℃澘鐨勬寜閽敤閫�
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_TEMPLATE_BUTTON_USE,text = "妯℃澘鐨勬寜閽敤閫�",description = "")
+public enum CodeButtonUseEnum implements BaseEnum {
+
+    /**
+     * 缂栫爜鐢宠
+     */
+    ORDER("code_temp_button_use_order","缂栫爜鐢宠"),
+
+    /**
+     * 缂栫爜淇敼
+     */
+    MODIFY("code_temp_button_use_modify","缂栫爜淇敼"),
+
+    /**
+     * 缂栫爜鍥炴敹
+     */
+    DELETE("code_temp_button_use_delete","缂栫爜鍥炴敹"),
+
+    /**
+     * 鏌ヨ
+     */
+    QUERY("code_temp_button_use_query","鏌ヨ");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeButtonUseEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeButtonUseEnum wenum : CodeButtonUseEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeButtonUseEnum wenum : CodeButtonUseEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeButtonUseEnum forValue(String value) {
+        for (CodeButtonUseEnum wenum : CodeButtonUseEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeClassifyProcessUseEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeClassifyProcessUseEnum.java
new file mode 100644
index 0000000..5eb862c
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeClassifyProcessUseEnum.java
@@ -0,0 +1,150 @@
+package org.springblade.code.enumpack;
+
+
+import com.vci.mdm.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鍒嗙被鐨勬祦绋嬬殑鐢ㄩ��
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_CLASSIFY_PROCESS_USE,text = "鍒嗙被涓殑娴佺▼妯℃澘鐢ㄩ��",description = "")
+public enum CodeClassifyProcessUseEnum implements BaseEnum {
+
+    /**
+     * 鐢宠
+     */
+    ORDER("code_cls_flow_use_order","鐢宠"),
+
+    /**
+     * 淇敼
+     */
+    MODIFY("code_cls_flow_use_modify","淇敼"),
+
+    /**
+     * 鍥炴敹
+     */
+    DELETE("code_cls_flow_use_delete","鍥炴敹"),
+
+    /**
+     * 鍐荤粨
+     */
+    FREEZE("code_cls_flow_use_freeze","鍐荤粨"),
+
+    /**
+     * 瑙e喕
+     */
+    UNFREEZE("code_cls_flow_use_unfreeze","瑙e喕");
+
+//    /**
+//     * 鍏朵粬
+//     */
+//    OTHER("code_cls_flow_use_other","鍏朵粬");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeClassifyProcessUseEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeClassifyProcessUseEnum wenum : CodeClassifyProcessUseEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeClassifyProcessUseEnum wenum : CodeClassifyProcessUseEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeClassifyProcessUseEnum forValue(String value) {
+        for (CodeClassifyProcessUseEnum wenum : CodeClassifyProcessUseEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeCutTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeCutTypeEnum.java
new file mode 100644
index 0000000..342b183
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeCutTypeEnum.java
@@ -0,0 +1,135 @@
+package org.springblade.code.enumpack;
+
+
+import com.vci.mdm.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鎴彇绫诲瀷
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_CUT_TYPE,text = "鍊兼埅鍙栫被鍨�",description = "")
+public enum CodeCutTypeEnum implements BaseEnum {
+
+    /**
+     * 涓嶆埅鍙�
+     */
+    NONE("code_cut_none","涓嶆埅鍙�"),
+
+    /**
+     * 宸︽埅鍙�
+     */
+    LEFT("code_cut_left","宸︽埅鍙�"),
+
+    /**
+     * 鍙虫埅鍙�
+     */
+    RIGHT("code_level_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 CodeCutTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeCutTypeEnum wenum : CodeCutTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeCutTypeEnum wenum : CodeCutTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeCutTypeEnum forValue(String value) {
+        for (CodeCutTypeEnum wenum : CodeCutTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeGetValueTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeGetValueTypeEnum.java
new file mode 100644
index 0000000..223f8cf
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeGetValueTypeEnum.java
@@ -0,0 +1,130 @@
+package org.springblade.code.enumpack;
+
+
+import com.vci.mdm.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鍙栧�肩被鍨�
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_GET_VALUE_TYPE,text = "涓绘暟鎹腑鍙栧�肩被鍨�",description = "")
+public enum CodeGetValueTypeEnum implements BaseEnum {
+
+    /**
+     * 褰撳墠鍒嗙被浠e彿鍊�
+     */
+    CURRENT("code_get_value_current","褰撳墠鍒嗙被浠e彿鍊�"),
+
+    /**
+     * 鍚戜笂閬嶅巻鍏ㄩ儴鐖朵唬鍙风殑鍚堝苟鍊�
+     */
+    TOP("code_get_value_all_up","鍚戜笂閬嶅巻鍏ㄩ儴鐖朵唬鍙风殑鍚堝苟鍊�");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeGetValueTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeGetValueTypeEnum wenum : CodeGetValueTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeGetValueTypeEnum wenum : CodeGetValueTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeGetValueTypeEnum forValue(String value) {
+        for (CodeGetValueTypeEnum wenum : CodeGetValueTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeLevelTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeLevelTypeEnum.java
new file mode 100644
index 0000000..6249f12
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeLevelTypeEnum.java
@@ -0,0 +1,135 @@
+package org.springblade.code.enumpack;
+
+
+import com.vci.mdm.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 灞傜骇鐮佹鐨勫眰绾х被鍨�
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_LEVEL_TYPE,text = "灞傜骇鐮佹鐨勫眰绾х被鍨�",description = "")
+public enum CodeLevelTypeEnum implements BaseEnum {
+
+    /**
+     * 鎸囧畾灞傜骇
+     */
+    SPECIAL("code_level_special","鎸囧畾灞傜骇"),
+
+//    /**
+//     * 浠绘剰灞傜骇
+//     */
+//    ANY("code_level_any","浠绘剰灞傜骇"),
+
+    /**
+     * 鏈�灏忓眰绾�
+     */
+    MIN("code_level_min","鏈�灏忓眰绾�");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeLevelTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeLevelTypeEnum wenum : CodeLevelTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeLevelTypeEnum wenum : CodeLevelTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeLevelTypeEnum forValue(String value) {
+        for (CodeLevelTypeEnum wenum : CodeLevelTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeMapRuleTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeMapRuleTypeEnum.java
new file mode 100644
index 0000000..8488909
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeMapRuleTypeEnum.java
@@ -0,0 +1,145 @@
+package org.springblade.code.enumpack;
+
+
+import com.vci.mdm.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鏄犲皠瑙勫垯绫诲瀷
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_MAP_RULE_TYPE,text = "鏄犲皠瑙勫垯绫诲瀷",description = "")
+public enum CodeMapRuleTypeEnum implements BaseEnum {
+
+    /**
+     * 闆嗗洟鐮佸鍑�
+     */
+    GROUP_EXPORT("code_map_group_export","闆嗗洟鐮佸鍑�"),
+
+    /**
+     * 闆嗗洟鐮佸鍏�
+     */
+    GROUP_IMPORT("code_map_group_import","闆嗗洟鐮佸鍏�"),
+
+    /**
+     * 鎵归噺鐢宠
+     */
+    BATCH_ORDER("code_map_batch_order","鎵归噺鐢宠"),
+
+    /**
+     * 鍏朵粬
+     */
+    OTHER("code_map_other","鍏朵粬"),
+
+    /**
+     * 鍘嗗彶鏁版嵁瀵煎叆
+     */
+    HISTORY_DATA_IMPORT("code_map_history_import","鍘嗗彶鏁版嵁瀵煎叆");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeMapRuleTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeMapRuleTypeEnum wenum : CodeMapRuleTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeMapRuleTypeEnum wenum : CodeMapRuleTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeMapRuleTypeEnum forValue(String value) {
+        for (CodeMapRuleTypeEnum wenum : CodeMapRuleTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecLengthTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecLengthTypeEnum.java
new file mode 100644
index 0000000..71ca371
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecLengthTypeEnum.java
@@ -0,0 +1,130 @@
+package org.springblade.code.enumpack;
+
+
+import com.vci.mdm.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鐮佹闀垮害鎺у埗绫诲瀷
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_SEC_LENGTH,text = "鐮佹闀垮害绫诲瀷",description = "")
+public enum CodeSecLengthTypeEnum implements BaseEnum {
+
+    /**
+     * 鍥哄畾闀垮害
+     */
+    STATIC("code_sec_length_static","鍥哄畾闀垮害"),
+
+    /**
+     * 鍙彉闀垮害
+     */
+    TOOLBAR("code_sec_length_variable","鍙彉闀垮害");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeSecLengthTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeSecLengthTypeEnum wenum : CodeSecLengthTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeSecLengthTypeEnum wenum : CodeSecLengthTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeSecLengthTypeEnum forValue(String value) {
+        for (CodeSecLengthTypeEnum wenum : CodeSecLengthTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecTypeEnum.java
new file mode 100644
index 0000000..f03d7ee
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecTypeEnum.java
@@ -0,0 +1,157 @@
+package org.springblade.code.enumpack;
+
+
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+import org.springblade.code.constant.MdmEnumIdConstant;
+
+/**
+ * 鐮佹鐨勭被鍨�
+ * @author weidy
+ * @date 2022-1-20
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_SEC_TYPE,text = "鐮佹鐨勭被鍨�",description = "")
+public enum CodeSecTypeEnum implements BaseEnum {
+
+    /**
+     * 鍥哄畾鐮佹
+     */
+    CODE_FIXED_SEC("codefixedsec","鍥哄畾鐮佹"),
+
+    /**
+     * 鍙彉鐮佹
+     */
+    CODE_VARIABLE_SEC("codevariablesec","鍙彉鐮佹"),
+    /**
+     * 鏃ユ湡鐮佹
+     */
+    CODE_DATE_SEC("codedatasec","鏃ユ湡鐮佹"),
+    /**
+     * 鍒嗙被鐮佹
+     */
+    CODE_CLASSIFY_SEC("codeclassifysec","鍒嗙被鐮佹"),
+    /**
+     * 灞炴�х爜娈�
+     */
+    CODE_ATTR_SEC("codeattrsec","灞炴�х爜娈�"),
+    /**
+     * 娴佹按鐮佹
+     */
+    CODE_SERIAL_SEC("codeserialsec","娴佹按鐮佹"),
+
+    /**
+     * 灞傜骇鐮佹
+     */
+    CODE_LEVEL_SEC("codelevelsec","灞傜骇鐮佹"),
+
+    /**
+     * 寮曠敤鐮佹
+     */
+    CODE_REFER_SEC("coderefersec","寮曠敤鐮佹")
+    ;
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeSecTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeSecTypeEnum wenum : CodeSecTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeSecTypeEnum wenum : CodeSecTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeSecTypeEnum forValue(String value) {
+        for (CodeSecTypeEnum wenum : CodeSecTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeUseButtonPositionTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeUseButtonPositionTypeEnum.java
new file mode 100644
index 0000000..83853b5
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeUseButtonPositionTypeEnum.java
@@ -0,0 +1,130 @@
+package org.springblade.code.enumpack;
+
+
+import com.vci.mdm.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.VciEnum;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鎸夐挳浣跨敤浣嶇疆
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciEnum(name = MdmEnumIdConstant.CODE_BUTTON_POSITION,text = "鎸夐挳鐨勪娇鐢ㄤ綅缃�",description = "")
+public enum CodeUseButtonPositionTypeEnum implements BaseEnum {
+
+    /**
+     * 鍦ㄨ〃鏍间腑浣跨敤
+     */
+    TABLE("code_button_table","鍦ㄨ〃鏍间腑浣跨敤"),
+
+    /**
+     * 宸ュ叿鏍�
+     */
+    TOOLBAR("code_button_toolbar","宸ュ叿鏍�");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeUseButtonPositionTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeUseButtonPositionTypeEnum wenum : CodeUseButtonPositionTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeUseButtonPositionTypeEnum wenum : CodeUseButtonPositionTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeUseButtonPositionTypeEnum forValue(String value) {
+        for (CodeUseButtonPositionTypeEnum wenum : CodeUseButtonPositionTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeAllCodeLC.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeAllCodeLC.java
new file mode 100644
index 0000000..781c56a
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeAllCodeLC.java
@@ -0,0 +1,165 @@
+package org.springblade.code.lifecycle;
+
+
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.mdm.constant.MdmLifeCycleConstant;
+import com.vci.starter.web.annotation.VciLifeCycle;
+import com.vci.starter.web.annotation.VciLifeCycleTrans;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鍏ㄩ儴鐨勭爜鍊肩殑鐢熷懡鍛ㄦ湡
+ * @author weidy
+ * @date 2022-3-1
+ */
+@VciLifeCycle(name = MdmLifeCycleConstant.CODE_ALL_CODE_LC,text = "鍏ㄩ儴鐨勭爜鍊肩殑鐢熷懡鍛ㄦ湡",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
+        translations={
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_OBSOLETED,name = "鐮佸�煎洖鏀跺垹闄ゆ暟鎹�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,name = "鎻愪氦瀹℃壒"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,name = "瀹℃壒涓嶉�氳繃鎴栬�呯粓姝�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "瀹℃壒閫氳繃"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍥炴敹"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鎵ц鍋滅敤"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍋滅敤鍚庡洖鏀�")
+        }
+)
+public enum CodeAllCodeLC implements BaseEnum {
+
+    /**
+     * 缂栬緫涓�
+     */
+    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
+
+    /**
+     * 瀹℃壒涓�
+     */
+    AUDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,"瀹℃壒涓�"),
+
+    /**
+     * 宸插彂甯�
+     */
+    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
+
+    /**
+     * 鐮佸�煎洖鏀�
+     */
+    TASK_BACK(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,"鐮佸�煎洖鏀�"),
+
+    /**
+     * 鐮佸�兼暟鎹攢姣�
+     */
+    OBSOLETED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_OBSOLETED,"鐮佸�兼暟鎹攢姣�"),
+
+    /**
+     * 鍋滅敤
+     */
+    DISABLE(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeAllCodeLC(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeAllCodeLC wenum : CodeAllCodeLC.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeAllCodeLC wenum : CodeAllCodeLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeAllCodeLC forValue(String value) {
+        for (CodeAllCodeLC wenum : CodeAllCodeLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeClassifyTemplateLC.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeClassifyTemplateLC.java
new file mode 100644
index 0000000..c79db30
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeClassifyTemplateLC.java
@@ -0,0 +1,144 @@
+package org.springblade.code.lifecycle;
+
+
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.mdm.constant.MdmLifeCycleConstant;
+import com.vci.starter.web.annotation.VciLifeCycle;
+import com.vci.starter.web.annotation.VciLifeCycleTrans;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 鍒嗙被妯℃澘鐨勭敓鍛藉懆鏈�
+ * @author weidy
+ * @date 2022-2-11
+ */
+@VciLifeCycle(name = MdmLifeCycleConstant.CODE_CLASSIFY_TEMPLATE_LC,text = "鍒嗙被涓殑娴佺▼妯℃澘鐢熷懡鍛ㄦ湡",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
+        translations={
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "浣滃簾"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�")
+        }
+)
+public enum CodeClassifyTemplateLC implements BaseEnum {
+
+    /**
+     * 缂栬緫涓�
+     */
+    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
+
+    /**
+     * 宸插彂甯�
+     */
+    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
+
+    /**
+     * 鍋滅敤
+     */
+    DISABLED(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeClassifyTemplateLC(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeClassifyTemplateLC wenum : CodeClassifyTemplateLC.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeClassifyTemplateLC wenum : CodeClassifyTemplateLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeClassifyTemplateLC forValue(String value) {
+        for (CodeClassifyTemplateLC wenum : CodeClassifyTemplateLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeDefaultLC.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeDefaultLC.java
new file mode 100644
index 0000000..150db51
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeDefaultLC.java
@@ -0,0 +1,159 @@
+package org.springblade.code.lifecycle;
+
+
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.mdm.constant.MdmLifeCycleConstant;
+import com.vci.starter.web.annotation.VciLifeCycle;
+import com.vci.starter.web.annotation.VciLifeCycleTrans;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 涓婚搴撴暟鎹殑榛樿鐢熷懡鍛ㄦ湡
+ * @author weidy
+ * @date 2022-3-2
+ */
+@VciLifeCycle(name = MdmLifeCycleConstant.CODE_DEFAULT_LC,text = "涓婚搴撴暟鎹殑榛樿鐢熷懡鍛ㄦ湡",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
+        translations={
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,name = "鎻愪氦瀹℃壒"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,name = "瀹℃壒涓嶉�氳繃鎴栬�呯粓姝�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "瀹℃壒閫氳繃"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍥炴敹"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鎵ц鍋滅敤"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,name = "鍋滅敤鍚庡洖鏀�")
+        }
+)
+public enum CodeDefaultLC implements BaseEnum {
+
+    /**
+     * 缂栬緫涓�
+     */
+    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
+
+    /**
+     * 瀹℃壒涓�
+     */
+    AUDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_AUDITING,"瀹℃壒涓�"),
+
+    /**
+     * 宸插彂甯�
+     */
+    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
+
+    /**
+     * 鐮佸�煎洖鏀�
+     */
+    TASK_BACK(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK,"鐮佸�煎洖鏀�"),
+    /**
+     * 鍋滅敤
+     */
+    DISABLE(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
+
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeDefaultLC(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeDefaultLC wenum : CodeDefaultLC.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeDefaultLC wenum : CodeDefaultLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeDefaultLC forValue(String value) {
+        for (CodeDefaultLC wenum : CodeDefaultLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeRuleLC.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeRuleLC.java
new file mode 100644
index 0000000..9c08866
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeRuleLC.java
@@ -0,0 +1,144 @@
+package org.springblade.code.lifecycle;
+
+
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.mdm.constant.MdmLifeCycleConstant;
+import com.vci.starter.web.annotation.VciLifeCycle;
+import com.vci.starter.web.annotation.VciLifeCycleTrans;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * 缂栫爜瑙勫垯鐨勭敓鍛藉懆鏈�
+ * @author weidy
+ * @date 2022-2-23
+ */
+@VciLifeCycle(name = MdmLifeCycleConstant.CODE_RULE_LC,text = "缂栫爜瑙勫垯鏉跨敓鍛藉懆鏈�",description = "",startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,
+        translations={
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target =FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍙戝竷"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "浣滃簾"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,target = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,name = "鏈彂甯冪洿鎺ュ仠鐢�"),
+            @VciLifeCycleTrans(source = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,target = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,name = "鍋滅敤鍚庡啀娆$敓鏁�")
+        }
+)
+public enum CodeRuleLC implements BaseEnum {
+
+    /**
+     * 缂栬緫涓�
+     */
+    EDITING(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING,"缂栬緫涓�"),
+
+    /**
+     * 宸插彂甯�
+     */
+    RELEASED(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED,"宸插彂甯�"),
+
+    /**
+     * 鍋滅敤
+     */
+    DISABLED(FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED,"鍋滅敤");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 CodeRuleLC(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (CodeRuleLC wenum : CodeRuleLC.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (CodeRuleLC wenum : CodeRuleLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static CodeRuleLC forValue(String value) {
+        for (CodeRuleLC wenum : CodeRuleLC.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeAllCodeDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeAllCodeDO.java
new file mode 100644
index 0000000..15c17e4
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeAllCodeDO.java
@@ -0,0 +1,168 @@
+package org.springblade.code.model;
+
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.constant.MdmLifeCycleConstant;
+
+/**
+ * 鍏ㄩ儴鐨勭爜鍊�
+ * @author weidy
+ * @date 2022-3-1
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_ALL_CODE,text = "鎵�鏈夌殑鐮佸��",lifeCycle = MdmLifeCycleConstant.CODE_ALL_CODE_LC,
+        startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED)
+public class CodeAllCodeDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 5020487634341415429L;
+    /**
+     * 鍒嗙被鐨勪富閿�
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被鐨勪富閿�")
+    private String codeClassifyOid;
+
+    /**
+     * 瑙勫垯鐨勪富閿�
+     */
+    @Column(nullable = false,columnDefinition = "瑙勫垯鐨勪富閿�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_RULE)
+    private String codeRuleOid;
+
+    /**
+     * 瑙勫垯鐨勫悕绉�
+     */
+    @Transient
+    private String codeRuleOidName;
+
+    /**
+     * 瀛樺偍鏁版嵁鐨勬ā鏉�
+     */
+    @Column(columnDefinition = "鏁版嵁妯℃澘")
+    private String codeClassifyTemplateOid;
+
+    /**
+     * 鐮佸�肩殑鍊�
+     */
+    @Column(columnDefinition = "鐮佸�肩殑鍊�")
+    private String id;
+
+    /**
+     * 鍒涘缓缂栫爜鐨勪笟鍔$被鍨�
+     */
+    @Column(columnDefinition = "鍒涘缓缂栫爜鐨勪笟鍔$被鍨�")
+    private String createCodeBtm;
+
+    /**
+     * 鍒涘缓缂栫爜鐨勪笟鍔℃暟鎹富閿�
+     */
+    @Column(columnDefinition = "鍒涘缓缂栫爜鐨勬暟鎹富閿�")
+    private String createCodeOid;
+
+    /***
+     * 娴佹按渚濊禆
+     */
+    @Column(length = 4000,columnDefinition = "娴佹按渚濊禆")
+    private String serialUnit;
+
+    /**
+     * 娌℃湁濉厖鍓嶇殑娴佹按鍙�
+     */
+    @Column(columnDefinition = "娌℃湁濉厖鍓嶇殑娴佹按鍙�",length = 4000)
+    private String unFillSerial;
+
+    public String getSerialUnit() {
+        return serialUnit;
+    }
+
+    public void setSerialUnit(String serialUnit) {
+        this.serialUnit = serialUnit;
+    }
+
+    public String getUnFillSerial() {
+        return unFillSerial;
+    }
+
+    public void setUnFillSerial(String unFillSerial) {
+        this.unFillSerial = unFillSerial;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+
+    public String getCodeClassifyTemplateOid() {
+        return codeClassifyTemplateOid;
+    }
+
+    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
+        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCreateCodeBtm() {
+        return createCodeBtm;
+    }
+
+    public void setCreateCodeBtm(String createCodeBtm) {
+        this.createCodeBtm = createCodeBtm;
+    }
+
+    public String getCreateCodeOid() {
+        return createCodeOid;
+    }
+
+    public void setCreateCodeOid(String createCodeOid) {
+        this.createCodeOid = createCodeOid;
+    }
+
+    public String getCodeRuleOidName() {
+        return codeRuleOidName;
+    }
+
+    public void setCodeRuleOidName(String codeRuleOidName) {
+        this.codeRuleOidName = codeRuleOidName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeAllCodeDO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", codeRuleOidName='" + codeRuleOidName + '\'' +
+                ", codeClassifyTemplateOid='" + codeClassifyTemplateOid + '\'' +
+                ", id='" + id + '\'' +
+                ", createCodeBtm='" + createCodeBtm + '\'' +
+                ", createCodeOid='" + createCodeOid + '\'' +
+                ", serialUnit='" + serialUnit + '\'' +
+                ", unFillSerial='" + unFillSerial + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeBasicSecDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeBasicSecDO.java
new file mode 100644
index 0000000..1f6aba1
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeBasicSecDO.java
@@ -0,0 +1,728 @@
+package org.springblade.code.model;
+
+import org.springblade.code.constant.MdmEnumIdConstant;
+import com.vci.starter.web.annotation.*;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.starter.web.model.BaseModel;
+import com.vci.web.constant.EnumIdConstant;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 鍩虹鐮佹鐨勪俊鎭�
+ * 鏂逛究鍦ㄥ悓涓�涓〉闈㈤噷鏄剧ず鎵�鏈夌殑鐮佹
+ * @author weidy
+ * @date 2022-1-18
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_BASIC_SEC,text = "鐮佹鍩虹淇℃伅",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeBasicSecDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1803476098497357359L;
+    /**
+     * 鐮佹淇℃伅
+     */
+    @Column(columnDefinition = "鐮佹淇℃伅",nullable = false)
+    private String id;
+
+    /**
+     * 鐮佹鍚嶇О
+     */
+    @Column(columnDefinition = "鐮佹鍚嶇О",nullable = false)
+    private String name;
+
+    /**
+     * 鐮佹绫诲瀷
+     */
+    @Column(columnDefinition = "鐮佹绫诲瀷",nullable = false)
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_SEC_TYPE,showTextField = "secTypeText")
+    private String secType;
+
+    /**
+     * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
+     */
+    @Transient()
+    private String secTypeText;
+
+    /**
+     * 鎵�灞炵紪鐮佽鍒�
+     */
+    @Column(columnDefinition = "鎵�灞炵紪鐮佽鍒�",nullable = false)
+    private String pkCodeRule;
+
+    /**
+     * 鐮佹鎺掑簭鍙�
+     */
+    @Column(columnDefinition = "orderNum",nullable = false)
+    private Integer orderNum;
+
+    /**
+     * 寮曠敤鐨勫睘鎬х殑鏂囨湰
+     */
+    @Column(columnDefinition = "寮曠敤鐨勫睘鎬у悕绉�")
+    private String referAttributeName;
+
+    /**
+     * 寮曠敤鐨勫睘鎬ц嫳鏂囧悕绉�
+     */
+    @Column(columnDefinition = "寮曠敤鐨勫睘鎬ц嫳鏂�")
+    private String referAttributeId;
+
+    /**
+     * 鍙栧�艰鍒�
+     */
+    @Column(columnDefinition = "鍙栧�艰鍒�",length = 4000)
+    private String getValueClass ;
+
+    //鍓嶇杈撳叆鍚庤嚜鍔ㄥ姞鍏ュ埌鏋氫妇涓�
+    /**
+     * 鏃ユ湡鏍煎紡
+     */
+    @Column(columnDefinition = "鏃ユ湡鏍煎紡")
+    private String codeDateFormatStr;
+
+    /**
+     * 鐮佹闀垮害绫诲瀷
+     */
+    @Column(columnDefinition = "鐮佹闀垮害绫诲瀷")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_SEC_LENGTH,showTextField = "secLengthTypeText")
+    private String codeSecLengthType;
+
+    /**
+     * 鐮佹闀垮害绫诲瀷鏄剧ず鏂囨湰
+     */
+    @Transient(referColumn = MdmEnumIdConstant.CODE_SEC_LENGTH + "_secLengthType")
+    private String codeSecLengthTypeText;
+
+    /**
+     * 鐮佹鐨勯暱搴�
+     */
+    @Column(columnDefinition = "鐮佹鐨勯暱搴�")
+    private String codeSecLength;
+
+    /**
+     * 灞傜骇绫诲瀷
+     */
+    @Column(columnDefinition = "灞傜骇绫诲瀷")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_LEVEL_TYPE,showTextField = "codeLevelTypeText")
+    private String codeLevelType;
+
+    /**
+     * 灞傜骇绫诲瀷鏄剧ず鏂囨湰
+     */
+    @Transient(referColumn = MdmEnumIdConstant.CODE_LEVEL_TYPE + "_codeLevelType")
+    private String codeLevelTypeText;
+
+    /**
+     * 灞傜骇鐨勫��
+     */
+    @Column(columnDefinition = "灞傜骇鐨勫��")
+    private Integer codeLevelValue;
+
+    /**
+     * 鍊兼埅鍙栭暱搴�
+     */
+    @Column(columnDefinition = "鍊兼埅鍙栭暱搴�")
+    private Integer valueCutLength;
+
+    /**
+     * 瀛楃鎴彇绫诲瀷
+     */
+    @Column(columnDefinition = "瀛楃鎴彇绫诲瀷")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_CUT_TYPE,showTextField = "valueCutTypeText")
+    private String valueCutType;
+
+    /**
+     * 瀛楃涓叉埅鍙栫被鍨嬫樉绀烘枃鏈�
+     */
+    @Transient
+    private String valueCutTypeText;
+
+    /**
+     * 鍙栧�肩被鍨�
+     */
+    @Column(columnDefinition = "鍙栧�肩被鍨�")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_GET_VALUE_TYPE,showTextField = "codeGetValueTypeText")
+    private String codeGetValueType;
+
+    /**
+     * 鍙栧�肩被鍨嬫樉绀烘枃鏈�
+     */
+    @Transient
+    private String codeGetValueTypeText;
+
+    /**
+     * 寮曠敤鐨勫睘鎬ф墍灞炵殑搴撳垎绫�
+     */
+    @Column(columnDefinition = "寮曠敤灞炴�ф墍灞炵殑搴撳垎绫�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY)
+    private String referCodeClassifyOid;
+
+    /**
+     * 寮曠敤鐨勫睘鎬ф墍灞炲簱鍒嗙被鐨勫悕绉�
+     */
+    @Transient(referColumn = "referCodeClassifyOid.name")
+    private String referCodeClassifyOidName;
+
+    /**
+     * 寮曠敤鐨勪笟鍔$被鍨�
+     */
+    @Column(columnDefinition = "寮曠敤鐨勪笟鍔$被鍨�")
+    private String referBtmId;
+
+    /**
+     * 寮曠敤鐨勪笟鍔$被鍨嬪悕绉�
+     */
+    @Column(columnDefinition = "寮曠敤鐨勪笟鍔$被鍨嬪悕绉�")
+    private String referBtmName;
+
+    /**
+     * 鍙傜収鐨勭獥鍙i厤缃�
+     */
+    @Column(columnDefinition = "鍙傜収绐楀彛閰嶇疆",length = 4000)
+    private String referConfig;
+
+    /**
+     * 鏄剧ず淇℃伅
+     */
+    @Column(columnDefinition = "鏄剧ず淇℃伅",length = 4000)
+    private String referValueInfo;
+
+    /**
+     * 杩囨护鐨剆ql鍐呭
+     */
+    @Column(columnDefinition = "杩囨护鐨剆ql鍐呭",length = 4000)
+    private String filterSql ;
+
+
+    /**
+     * 娴佹按鍙疯捣濮嬪��
+     */
+    @Column(columnDefinition = "娴佹按鍙疯捣濮嬪��")
+    private String serialStart;
+
+    /**
+     * 娴佹按鐨勬闀�
+     */
+    @Column(columnDefinition = "娴佹按鐨勬闀�")
+    private Integer serialStep;
+
+
+    /**
+     * 缂栫爜琛ヤ綅鏂瑰紡
+     */
+    @VciUseEnum(value = EnumIdConstant.CODE_FILL_TYPE,showTextField = "codeFillTypeText")
+    @Column(columnDefinition = "缂栫爜琛ヤ綅鏂瑰紡")
+    private String codeFillType;
+
+    /**
+     * 缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰
+     */
+    @Column(columnDefinition = "缂栫爜琛ヤ綅鏂瑰紡鏄剧ず鏂囨湰")
+    private String codeFillTypeText;
+
+    /**
+     * 琛ヤ綅鏃剁殑瀛楃
+     */
+    @Column(columnDefinition = "琛ヤ綅鏃剁殑瀛楃",defaultValue = "0")
+    private String codeFillSeparator;
+
+    /**
+     * 濉厖闀垮害
+     */
+    @Column(columnDefinition = "濉厖闀垮害")
+    private String codeFillLength;
+
+    /**
+     * 涓婇檺
+     */
+    @Column(columnDefinition = "娴佹按涓婇檺")
+    private Integer codeFillLimit;
+
+    /**
+     * 娴佹按鏄惁琛ョ爜
+     */
+    @Column(columnDefinition = "娴佹按鏄惁琛ョ爜",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String codeFillFlag;
+
+    /**
+     * 鑷畾涔夌殑娴佹按绠楁硶绫�
+     */
+    @Column(columnDefinition = "鑷畾涔夌殑娴佹按绠楁硶")
+    private String customCodeSerialClass;
+
+    /**
+     * 鏄惁鑷姩鍖归厤鍒嗙被鍊�
+     */
+    @Column(columnDefinition = "鏄惁鑷姩鍖归厤鍒嗙被鍊�",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String matchClassifyValueFlag;
+
+    /**
+     * 鐖跺垎绫荤爜娈典富閿�
+     */
+    @Column(columnDefinition = "鐖跺垎绫荤爜娈典富閿�")
+    @VciUseRefer(value = MdmBtmTypeConstant.CODE_BASIC_SEC,showTextField = "parentClassifySecText")
+    private String parentClassifySecOid;
+
+    /**
+     * 鐖跺垎绫荤爜娈靛悕绉�
+     */
+    @Transient(referColumn = "parentClassifySecOid.name")
+    private String parentClassifySecText;
+
+
+    /**
+     * 鏄惁鍙互涓虹┖
+     */
+    @Column(columnDefinition = "鏄惁鍙互涓虹┖",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String nullableFlag;
+
+    /**
+     * 鏄惁鍙備笌缂栫爜
+     */
+    @Column(columnDefinition = "鏄惁鍙備笌缂栫爜",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String componentCodeFlag;
+
+    /**
+     * 鏄惁娴佹按渚濊禆
+     */
+    @Column(columnDefinition = "鏄惁娴佹按渚濊禆",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String serialDependFlag;
+
+    /**
+     * 鏄惁鏄剧ず
+     */
+    @Column(columnDefinition = "鏄惁鏄剧ず",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String displayFlag;
+
+    /**
+     * 娴佹按渚濊禆椤哄簭
+     */
+    @Column(columnDefinition = "娴佹按渚濊禆椤哄簭")
+    private Integer serialDependOrder;
+
+    public String getReferCodeClassifyOidName() {
+        return referCodeClassifyOidName;
+    }
+
+    public void setReferCodeClassifyOidName(String referCodeClassifyOidName) {
+        this.referCodeClassifyOidName = referCodeClassifyOidName;
+    }
+
+    public String getReferBtmId() {
+        return referBtmId;
+    }
+
+    public void setReferBtmId(String referBtmId) {
+        this.referBtmId = referBtmId;
+    }
+
+    public String getReferBtmName() {
+        return referBtmName;
+    }
+
+    public void setReferBtmName(String referBtmName) {
+        this.referBtmName = referBtmName;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSecType() {
+        return secType;
+    }
+
+    public void setSecType(String secType) {
+        this.secType = secType;
+    }
+
+    public String getSecTypeText() {
+        return secTypeText;
+    }
+
+    public void setSecTypeText(String secTypeText) {
+        this.secTypeText = secTypeText;
+    }
+
+    public String getPkCodeRule() {
+        return pkCodeRule;
+    }
+
+    public void setPkCodeRule(String pkCodeRule) {
+        this.pkCodeRule = pkCodeRule;
+    }
+
+    public String getGetValueClass() {
+        return getValueClass;
+    }
+
+    public void setGetValueClass(String getValueClass) {
+        this.getValueClass = getValueClass;
+    }
+
+    public String getCodeDateFormatStr() {
+        return codeDateFormatStr;
+    }
+
+    public void setCodeDateFormatStr(String codeDateFormatStr) {
+        this.codeDateFormatStr = codeDateFormatStr;
+    }
+
+
+    public String getCodeSecLength() {
+        return codeSecLength;
+    }
+
+    public void setCodeSecLength(String codeSecLength) {
+        this.codeSecLength = codeSecLength;
+    }
+
+    public String getCodeLevelType() {
+        return codeLevelType;
+    }
+
+    public void setCodeLevelType(String codeLevelType) {
+        this.codeLevelType = codeLevelType;
+    }
+
+    public String getCodeLevelTypeText() {
+        return codeLevelTypeText;
+    }
+
+    public void setCodeLevelTypeText(String codeLevelTypeText) {
+        this.codeLevelTypeText = codeLevelTypeText;
+    }
+
+    public Integer getCodeLevelValue() {
+        return codeLevelValue;
+    }
+
+    public void setCodeLevelValue(Integer codeLevelValue) {
+        this.codeLevelValue = codeLevelValue;
+    }
+
+    public Integer getValueCutLength() {
+        return valueCutLength;
+    }
+
+    public void setValueCutLength(Integer valueCutLength) {
+        this.valueCutLength = valueCutLength;
+    }
+
+    public String getValueCutType() {
+        return valueCutType;
+    }
+
+    public void setValueCutType(String valueCutType) {
+        this.valueCutType = valueCutType;
+    }
+
+    public String getValueCutTypeText() {
+        return valueCutTypeText;
+    }
+
+    public void setValueCutTypeText(String valueCutTypeText) {
+        this.valueCutTypeText = valueCutTypeText;
+    }
+
+    public String getCodeGetValueType() {
+        return codeGetValueType;
+    }
+
+    public void setCodeGetValueType(String codeGetValueType) {
+        this.codeGetValueType = codeGetValueType;
+    }
+
+    public String getCodeGetValueTypeText() {
+        return codeGetValueTypeText;
+    }
+
+    public void setCodeGetValueTypeText(String codeGetValueTypeText) {
+        this.codeGetValueTypeText = codeGetValueTypeText;
+    }
+
+    public String getReferCodeClassifyOid() {
+        return referCodeClassifyOid;
+    }
+
+    public void setReferCodeClassifyOid(String referCodeClassifyOid) {
+        this.referCodeClassifyOid = referCodeClassifyOid;
+    }
+
+    public String getReferConfig() {
+        return referConfig;
+    }
+
+    public void setReferConfig(String referConfig) {
+        this.referConfig = referConfig;
+    }
+
+    public String getReferValueInfo() {
+        return referValueInfo;
+    }
+
+    public void setReferValueInfo(String referValueInfo) {
+        this.referValueInfo = referValueInfo;
+    }
+
+    public String getFilterSql() {
+        return filterSql;
+    }
+
+    public void setFilterSql(String filterSql) {
+        this.filterSql = filterSql;
+    }
+
+    public String getSerialStart() {
+        return serialStart;
+    }
+
+    public void setSerialStart(String serialStart) {
+        this.serialStart = serialStart;
+    }
+
+    public Integer getSerialStep() {
+        return serialStep;
+    }
+
+    public void setSerialStep(Integer serialStep) {
+        this.serialStep = serialStep;
+    }
+
+    public String getCodeFillType() {
+        return codeFillType;
+    }
+
+    public void setCodeFillType(String codeFillType) {
+        this.codeFillType = codeFillType;
+    }
+
+    public String getCodeFillTypeText() {
+        return codeFillTypeText;
+    }
+
+    public void setCodeFillTypeText(String codeFillTypeText) {
+        this.codeFillTypeText = codeFillTypeText;
+    }
+
+    public String getCodeFillSeparator() {
+        return codeFillSeparator;
+    }
+
+    public void setCodeFillSeparator(String codeFillSeparator) {
+        this.codeFillSeparator = codeFillSeparator;
+    }
+
+    public String getCodeFillLength() {
+        return codeFillLength;
+    }
+
+    public void setCodeFillLength(String codeFillLength) {
+        this.codeFillLength = codeFillLength;
+    }
+
+    public Integer getCodeFillLimit() {
+        return codeFillLimit;
+    }
+
+    public void setCodeFillLimit(Integer codeFillLimit) {
+        this.codeFillLimit = codeFillLimit;
+    }
+
+    public String getCodeFillFlag() {
+        return codeFillFlag;
+    }
+
+    public void setCodeFillFlag(String codeFillFlag) {
+        this.codeFillFlag = codeFillFlag;
+    }
+
+    public String getCustomCodeSerialClass() {
+        return customCodeSerialClass;
+    }
+
+    public void setCustomCodeSerialClass(String customCodeSerialClass) {
+        this.customCodeSerialClass = customCodeSerialClass;
+    }
+
+    public String getMatchClassifyValueFlag() {
+        return matchClassifyValueFlag;
+    }
+
+    public void setMatchClassifyValueFlag(String matchClassifyValueFlag) {
+        this.matchClassifyValueFlag = matchClassifyValueFlag;
+    }
+
+    public String getParentClassifySecOid() {
+        return parentClassifySecOid;
+    }
+
+    public void setParentClassifySecOid(String parentClassifySecOid) {
+        this.parentClassifySecOid = parentClassifySecOid;
+    }
+
+    public String getParentClassifySecText() {
+        return parentClassifySecText;
+    }
+
+    public void setParentClassifySecText(String parentClassifySecText) {
+        this.parentClassifySecText = parentClassifySecText;
+    }
+
+
+    public String getCodeSecLengthType() {
+        return codeSecLengthType;
+    }
+
+    public void setCodeSecLengthType(String codeSecLengthType) {
+        this.codeSecLengthType = codeSecLengthType;
+    }
+
+    public String getCodeSecLengthTypeText() {
+        return codeSecLengthTypeText;
+    }
+
+    public void setCodeSecLengthTypeText(String codeSecLengthTypeText) {
+        this.codeSecLengthTypeText = codeSecLengthTypeText;
+    }
+
+    public String getNullableFlag() {
+        return nullableFlag;
+    }
+
+    public void setNullableFlag(String nullableFlag) {
+        this.nullableFlag = nullableFlag;
+    }
+
+    public String getComponentCodeFlag() {
+        return componentCodeFlag;
+    }
+
+    public void setComponentCodeFlag(String componentCodeFlag) {
+        this.componentCodeFlag = componentCodeFlag;
+    }
+
+    public String getSerialDependFlag() {
+        return serialDependFlag;
+    }
+
+    public void setSerialDependFlag(String serialDependFlag) {
+        this.serialDependFlag = serialDependFlag;
+    }
+
+    public String getDisplayFlag() {
+        return displayFlag;
+    }
+
+    public void setDisplayFlag(String displayFlag) {
+        this.displayFlag = displayFlag;
+    }
+
+    public Integer getSerialDependOrder() {
+        return serialDependOrder;
+    }
+
+    public void setSerialDependOrder(Integer serialDependOrder) {
+        this.serialDependOrder = serialDependOrder;
+    }
+
+    public String getReferAttributeId() {
+        return referAttributeId;
+    }
+
+    public void setReferAttributeId(String referAttributeId) {
+        this.referAttributeId = referAttributeId;
+    }
+
+    public String getReferAttributeName() {
+        return referAttributeName;
+    }
+
+    public void setReferAttributeName(String referAttributeName) {
+        this.referAttributeName = referAttributeName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeBasicSecDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", secType='" + secType + '\'' +
+                ", secTypeText='" + secTypeText + '\'' +
+                ", pkCodeRule='" + pkCodeRule + '\'' +
+                ", orderNum=" + orderNum +
+                ", referAttributeName='" + referAttributeName + '\'' +
+                ", referAttributeId='" + referAttributeId + '\'' +
+                ", getValueClass='" + getValueClass + '\'' +
+                ", codeDateFormatStr='" + codeDateFormatStr + '\'' +
+                ", codeSecLengthType='" + codeSecLengthType + '\'' +
+                ", codeSecLengthTypeText='" + codeSecLengthTypeText + '\'' +
+                ", codeSecLength='" + codeSecLength + '\'' +
+                ", codeLevelType='" + codeLevelType + '\'' +
+                ", codeLevelTypeText='" + codeLevelTypeText + '\'' +
+                ", codeLevelValue=" + codeLevelValue +
+                ", valueCutLength=" + valueCutLength +
+                ", valueCutType='" + valueCutType + '\'' +
+                ", valueCutTypeText='" + valueCutTypeText + '\'' +
+                ", codeGetValueType='" + codeGetValueType + '\'' +
+                ", codeGetValueTypeText='" + codeGetValueTypeText + '\'' +
+                ", referCodeClassifyOid='" + referCodeClassifyOid + '\'' +
+                ", referCodeClassifyOidName='" + referCodeClassifyOidName + '\'' +
+                ", referBtmId='" + referBtmId + '\'' +
+                ", referBtmName='" + referBtmName + '\'' +
+                ", referConfig='" + referConfig + '\'' +
+                ", referValueInfo='" + referValueInfo + '\'' +
+                ", filterSql='" + filterSql + '\'' +
+                ", serialStart='" + serialStart + '\'' +
+                ", serialStep=" + serialStep +
+                ", codeFillType='" + codeFillType + '\'' +
+                ", codeFillTypeText='" + codeFillTypeText + '\'' +
+                ", codeFillSeparator='" + codeFillSeparator + '\'' +
+                ", codeFillLength='" + codeFillLength + '\'' +
+                ", codeFillLimit=" + codeFillLimit +
+                ", codeFillFlag='" + codeFillFlag + '\'' +
+                ", customCodeSerialClass='" + customCodeSerialClass + '\'' +
+                ", matchClassifyValueFlag='" + matchClassifyValueFlag + '\'' +
+                ", parentClassifySecOid='" + parentClassifySecOid + '\'' +
+                ", parentClassifySecText='" + parentClassifySecText + '\'' +
+                ", nullableFlag='" + nullableFlag + '\'' +
+                ", componentCodeFlag='" + componentCodeFlag + '\'' +
+                ", serialDependFlag='" + serialDependFlag + '\'' +
+                ", displayFlag='" + displayFlag + '\'' +
+                ", serialDependOrder=" + serialDependOrder +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeButtonDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeButtonDO.java
new file mode 100644
index 0000000..3a9ccbb
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeButtonDO.java
@@ -0,0 +1,125 @@
+package org.springblade.code.model;
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseEnum;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.constant.MdmEnumIdConstant;
+
+/**
+ * 缂栫爜閲岀殑鎸夐挳鎵╁睍
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_BUTTON,text = "涓绘暟鎹腑鐨勬寜閽墿灞�",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
+public class CodeButtonDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -2281543776769670606L;
+
+    /**
+     * 鎸夐挳鐨勮嫳鏂囩紪鍙�
+     */
+    @Column(nullable = false,columnDefinition = "鎸夐挳鐨勮嫳鏂囩紪鍙�")
+    private String id;
+
+    /**
+     * 鎸夐挳鐨勪腑鏂囧悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "鎸夐挳鐨勪腑鏂囧悕绉�")
+    private String name;
+
+    /**
+     * 鎸夐挳鐨勫浘鏍囨牱寮�
+     */
+    @Column(columnDefinition = "鎸夐挳鐨勫浘鏍囨牱寮�")
+    private String iconCls;
+
+    /**
+     * 鎵ц鐨刯s鍐呭
+     */
+    @Column(columnDefinition = "鎵ц鐨刯s鍐呭")
+    private String executeJs;
+
+    /**
+     * 浣跨敤鎸夐挳鐨勪綅缃�
+     */
+    @Column(columnDefinition = "鎸夐挳鐨勪綅缃�")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_BUTTON_POSITION,showTextField = "usedPositionTypeText")
+    private String usedPositionType;
+
+    /**
+     * 浣跨敤鎸夐挳鐨勪綅缃殑鏄剧ず鏂囨湰
+     */
+    @Transient(referColumn = MdmEnumIdConstant.CODE_BUTTON_POSITION +"_usedPositionType")
+    private String usedPositionTypeText;
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIconCls() {
+        return iconCls;
+    }
+
+    public void setIconCls(String iconCls) {
+        this.iconCls = iconCls;
+    }
+
+    public String getExecuteJs() {
+        return executeJs;
+    }
+
+    public void setExecuteJs(String executeJs) {
+        this.executeJs = executeJs;
+    }
+
+    public String getUsedPositionType() {
+        return usedPositionType;
+    }
+
+    public void setUsedPositionType(String usedPositionType) {
+        this.usedPositionType = usedPositionType;
+    }
+
+    public String getUsedPositionTypeText() {
+        return usedPositionTypeText;
+    }
+
+    public void setUsedPositionTypeText(String usedPositionTypeText) {
+        this.usedPositionTypeText = usedPositionTypeText;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeButtonDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", iconCls='" + iconCls + '\'' +
+                ", executeJs='" + executeJs + '\'' +
+                ", usedPositionType='" + usedPositionType + '\'' +
+                ", usedPositionTypeText='" + usedPositionTypeText + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyDO.java
new file mode 100644
index 0000000..4fa8402
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyDO.java
@@ -0,0 +1,276 @@
+package org.springblade.code.model;
+
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 涓婚搴撶殑鍒嗙被
+ * @author weidy
+ * @date 2022-1-14
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY,text = "涓婚搴撳垎绫�",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
+public class CodeClassifyDO extends BaseModel {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 2217599544701726951L;
+
+    /**
+     * 鍒嗙被鐨勭紪鍙�
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被鐨勭紪鍙�")
+    private String id;
+
+    /**
+     * 鍒嗙被鐨勫悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被鐨勫悕绉�")
+    private String name;
+
+    /**
+     * 涓婄骇鐨勪富閿�
+     */
+    @Column(columnDefinition = "涓婄骇鏁版嵁鐨勪富閿�")
+    private String parentCodeClassifyOid;
+
+    /**
+     * 鎺掑簭鍙�
+     */
+    @Column(columnDefinition = "鎺掑簭鍙�",nullable = false)
+    private Integer orderNum;
+
+    /**
+     * 瀛樺偍鐨勪笟鍔$被鍨�
+     */
+    @Column(columnDefinition = "涓氬姟绫诲瀷鐨勭紪鍙�")
+    private String btmTypeId;
+
+    /**
+     * 瀛樺偍鐨勪笟鍔$被鍨嬬殑涓枃鍚嶇О
+     */
+    @Column(columnDefinition = "涓氬姟绫诲瀷鐨勫悕绉�")
+    private String btmTypeName;
+
+    /**
+     * 缂栫爜瑙勫垯鐨勪富閿�
+     */
+    @Column(columnDefinition = "缂栫爜瑙勫垯鐨勪富閿�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_RULE)
+    private String codeRuleOid;
+
+    /**
+     * 缂栫爜瑙勫垯鐨勫悕绉�
+     */
+    @Transient(referColumn = "codeRuleOid.name")
+    private String codeRuleOidName;
+
+    /**
+     * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯
+     */
+    @Column(columnDefinition = "鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_KEY_ATTR_REPEAT_RULE)
+    private String codeKeyAttrRepeatOid;
+
+    /**
+     * 鍏抽敭灞炴�ф煡璇㈢殑瑙勫垯鍚嶇О
+     */
+    @Transient(referColumn = "codeKeyAttrRepeatOid.name")
+    private String codeKeyAttrRepeatOidName;
+
+    /**
+     * 鐩镐技椤规煡璇㈢殑瑙勫垯涓婚敭
+     */
+    @Column(columnDefinition = "鐩镐技椤规煡璇㈢殑瑙勫垯")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_RESEMBLE_RULE)
+    private String codeResembleRuleOid;
+
+    /**
+     * 鐩镐技椤规煡璇㈣鍒欏悕绉�
+     */
+    @Transient(referColumn = "codeResembleRuleOid.name")
+    private String codeResembleRuleOidName;
+
+    /**
+     * 鏁版嵁鎵�鍦ㄧ殑灞傜骇
+     */
+    @Transient
+    private Integer dataLevel;
+
+    /**
+     * 璺緞
+     */
+    @Transient
+    private String path;
+    /***
+     * 鍚嶇О璺緞
+     */
+    @Transient
+    private String namePath;
+    /***
+     * 浠g爜璺緞
+     */
+    @Transient
+    private String idPath;
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getParentCodeClassifyOid() {
+        return parentCodeClassifyOid;
+    }
+
+    public void setParentCodeClassifyOid(String parentCodeClassifyOid) {
+        this.parentCodeClassifyOid = parentCodeClassifyOid;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    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 getCodeRuleOid() {
+        return codeRuleOid;
+    }
+
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+
+
+    public String getCodeKeyAttrRepeatOid() {
+        return codeKeyAttrRepeatOid;
+    }
+
+    public void setCodeKeyAttrRepeatOid(String codeKeyAttrRepeatOid) {
+        this.codeKeyAttrRepeatOid = codeKeyAttrRepeatOid;
+    }
+
+    public String getCodeRuleOidName() {
+        return codeRuleOidName;
+    }
+
+    public void setCodeRuleOidName(String codeRuleOidName) {
+        this.codeRuleOidName = codeRuleOidName;
+    }
+
+    public String getCodeKeyAttrRepeatOidName() {
+        return codeKeyAttrRepeatOidName;
+    }
+
+    public void setCodeKeyAttrRepeatOidName(String codeKeyAttrRepeatOidName) {
+        this.codeKeyAttrRepeatOidName = codeKeyAttrRepeatOidName;
+    }
+
+    public Integer getDataLevel() {
+        return dataLevel;
+    }
+
+    public void setDataLevel(Integer dataLevel) {
+        this.dataLevel = dataLevel;
+    }
+
+    public String getCodeResembleRuleOid() {
+        return codeResembleRuleOid;
+    }
+
+    public void setCodeResembleRuleOid(String codeResembleRuleOid) {
+        this.codeResembleRuleOid = codeResembleRuleOid;
+    }
+
+    public String getCodeResembleRuleOidName() {
+        return codeResembleRuleOidName;
+    }
+
+    public void setCodeResembleRuleOidName(String codeResembleRuleOidName) {
+        this.codeResembleRuleOidName = codeResembleRuleOidName;
+    }
+
+    public String getNamePath() {
+        return namePath;
+    }
+
+    public void setNamePath(String namePath) {
+        this.namePath = namePath;
+    }
+
+    public String getIdPath() {
+        return idPath;
+    }
+
+    public void setIdPath(String idPath) {
+        this.idPath = idPath;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", parentCodeClassifyOid='" + parentCodeClassifyOid + '\'' +
+                ", orderNum=" + orderNum +
+                ", btmTypeId='" + btmTypeId + '\'' +
+                ", btmTypeName='" + btmTypeName + '\'' +
+                ", codeRuleOid='" + codeRuleOid + '\'' +
+                ", codeRuleOidName='" + codeRuleOidName + '\'' +
+                ", codeKeyAttrRepeatOid='" + codeKeyAttrRepeatOid + '\'' +
+                ", codeKeyAttrRepeatOidName='" + codeKeyAttrRepeatOidName + '\'' +
+                ", codeResembleRuleOid='" + codeResembleRuleOid + '\'' +
+                ", codeResembleRuleOidName='" + codeResembleRuleOidName + '\'' +
+                ", dataLevel=" + dataLevel +
+                ", path='" + path + '\'' +
+                ", namePath='" + namePath + '\'' +
+                ", idPath='" + idPath + '\'' +
+                '}';
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessPhaseDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessPhaseDO.java
new file mode 100644
index 0000000..d4d3641
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessPhaseDO.java
@@ -0,0 +1,127 @@
+package org.springblade.code.model;
+
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 娴佺▼妯℃澘鍜岄樁娈电殑鍐呭
+ * @author weidy
+ * @date 2022-1-14
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_PROCESS_PHASE,text = "娴佺▼妯℃澘鍜岄樁娈电殑鍐呭",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyProcessPhaseDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 3814649551140170874L;
+    /**
+     * 涓婚搴撳垎绫讳富閿�
+     */
+    @Column(nullable = false,columnDefinition = "涓婚搴撳垎绫讳富閿�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY)
+    private String codeClassifyOid;
+
+    /**
+     * 鎵�灞炴ā鏉�
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String classifyTemplateOid;
+
+    /**
+     * 鎵�灞為樁娈电殑淇℃伅
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉块樁娈�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE)
+    private String codePhaseOid;
+
+    /**
+     * 娴佺▼妯℃澘缂栧彿
+     */
+    @Column(columnDefinition = "娴佺▼妯℃澘缂栧彿")
+    private String id;
+
+    /**
+     * 娴佺▼妯℃澘鐨勫悕绉�
+     */
+    @Column(columnDefinition = "娴佺▼妯℃澘鍚嶇О",nullable = false)
+    private String name;
+
+    /**
+     * 娴佺▼涓殑浠诲姟鑺傜偣鐨勫悕绉�
+     */
+    @Column(columnDefinition = "娴佺▼涓殑浠诲姟鑺傜偣鍚嶇О",nullable = false)
+    private String processNodeName;
+
+
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getClassifyTemplateOid() {
+        return classifyTemplateOid;
+    }
+
+    public void setClassifyTemplateOid(String classifyTemplateOid) {
+        this.classifyTemplateOid = classifyTemplateOid;
+    }
+
+    public String getCodePhaseOid() {
+        return codePhaseOid;
+    }
+
+    public void setCodePhaseOid(String codePhaseOid) {
+        this.codePhaseOid = codePhaseOid;
+    }
+
+    public String getProcessNodeName() {
+        return processNodeName;
+    }
+
+    public void setProcessNodeName(String processNodeName) {
+        this.processNodeName = processNodeName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyProcessPhaseDO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", classifyTemplateOid='" + classifyTemplateOid + '\'' +
+                ", codePhaseOid='" + codePhaseOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", processNodeName='" + processNodeName + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessTempDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessTempDO.java
new file mode 100644
index 0000000..33cc2a7
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyProcessTempDO.java
@@ -0,0 +1,169 @@
+package org.springblade.code.model;
+
+
+import com.vci.starter.web.annotation.*;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.constant.MdmEnumIdConstant;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+ * @author weidy
+ * @date 2022-1-14
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_PROCESS_TEMPLATE,text = "鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyProcessTempDO 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 = "娴佺▼妯℃澘缂栧彿")
+    private String id;
+
+    /**
+     * 娴佺▼妯℃澘鐨勫悕绉�
+     */
+    @Column(columnDefinition = "娴佺▼妯℃澘鍚嶇О",nullable = false)
+    private String name;
+
+    /**
+     * 娴佺▼妯℃澘鐢ㄩ��
+     */
+    @Column(columnDefinition = "娴佺▼妯℃澘鐢ㄩ��",nullable = false)
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_CLASSIFY_PROCESS_USE,showTextField = "codeProcessUseText")
+    private String codeProcessUse;
+
+    /**
+     * 娴佺▼妯℃澘鐢ㄩ�旀樉绀哄悕绉�
+     */
+    @Transient
+    private String codeProcessUseText;
+
+    /**
+     * 娴佺▼妯℃澘鐨勭増鏈�
+     */
+    @Column(nullable = false)
+    private String processVersion;
+
+    /**
+     * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬х紪鍙�
+     */
+    @Column(columnDefinition = "鏄剧ず鍦ㄦ祦绋嬩腑鐨勫睘鎬�")
+    private String codeTempAttrOidArr;
+
+    /**
+     * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬у悕绉�
+     */
+    @Column(columnDefinition = "鏄剧ず鍦ㄦ祦绋嬩腑鐨勫睘鎬у悕绉�")
+    private String codeTempAttrOidArrName;
+
+    public String getProcessVersion() {
+        return processVersion;
+    }
+
+    public void setProcessVersion(String processVersion) {
+        this.processVersion = processVersion;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCodeClassifyOid() {
+        return codeClassifyOid;
+    }
+
+    public void setCodeClassifyOid(String codeClassifyOid) {
+        this.codeClassifyOid = codeClassifyOid;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCodeProcessUse() {
+        return codeProcessUse;
+    }
+
+    public void setCodeProcessUse(String codeProcessUse) {
+        this.codeProcessUse = codeProcessUse;
+    }
+
+    public String getCodeProcessUseText() {
+        return codeProcessUseText;
+    }
+
+    public void setCodeProcessUseText(String codeProcessUseText) {
+        this.codeProcessUseText = codeProcessUseText;
+    }
+
+    public String getClassifyTemplateOid() {
+        return classifyTemplateOid;
+    }
+
+    public void setClassifyTemplateOid(String classifyTemplateOid) {
+        this.classifyTemplateOid = classifyTemplateOid;
+    }
+
+    public String getCodeTempAttrOidArr() {
+        return codeTempAttrOidArr;
+    }
+
+    public void setCodeTempAttrOidArr(String codeTempAttrOidArr) {
+        this.codeTempAttrOidArr = codeTempAttrOidArr;
+    }
+
+    public String getCodeTempAttrOidArrName() {
+        return codeTempAttrOidArrName;
+    }
+
+    public void setCodeTempAttrOidArrName(String codeTempAttrOidArrName) {
+        this.codeTempAttrOidArrName = codeTempAttrOidArrName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyProcessTempDO{" +
+                "codeClassifyOid='" + codeClassifyOid + '\'' +
+                ", classifyTemplateOid='" + classifyTemplateOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", codeProcessUse='" + codeProcessUse + '\'' +
+                ", codeProcessUseText='" + codeProcessUseText + '\'' +
+                ", processVersion='" + processVersion + '\'' +
+                ", codeTempAttrOidArr='" + codeTempAttrOidArr + '\'' +
+                ", codeTempAttrOidArrName='" + codeTempAttrOidArrName + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTempMapItemDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTempMapItemDO.java
new file mode 100644
index 0000000..55cddae
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTempMapItemDO.java
@@ -0,0 +1,181 @@
+package org.springblade.code.model;
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁�
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_MAP_ITEM,text = "鏄犲皠瑙勫垯鐨勬槑缁�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyTempMapItemDO extends BaseModel {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -415692697543751712L;
+
+    /**
+     * 鏄犲皠瑙勫垯涓婚敭
+     */
+    @Column(nullable = false,columnDefinition = "鏄犲皠瑙勫垯涓婚敭")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_TEMPLATE_MAP)
+    private String classifyTemplateMapOid;
+
+    /**
+     * 鏄犲皠鍚嶇О
+     */
+    @Column(columnDefinition = "鏄犲皠鍚嶇О")
+    private String name;
+
+    /**
+     * 闆嗗洟鐮佸睘鎬ey
+     */
+    @Column(columnDefinition = "闆嗗洟鐮佸睘鎬ey")
+    private String groupCodeAttrId;
+
+    /**
+     * 闆嗗洟鐮佸睘鎬у悕绉�
+     */
+    @Column(columnDefinition = "闆嗗洟鐮佸睘鎬у悕绉�")
+    private String groupCodeAttrName;
+
+    /**
+     * 鍒嗙被妯℃澘灞炴�т富閿�
+     */
+    @Column(columnDefinition = "鍒嗙被妯℃澘灞炴�т富閿�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR)
+    private String classifyTemplateAttrOid;
+    /**
+     * 妯℃澘灞炴�ey
+     */
+    @Transient(referColumn = "classifyTemplateAttrOid.id")
+    private String classifyAttrId;
+
+    /**
+     * 妯℃澘灞炴�у悕绉�
+     */
+    @Transient(referColumn = "classifyTemplateAttrOid.name")
+    private String classifyAttrName;
+
+    /**
+     * 鐩爣绔殑鏃堕棿鏍煎紡
+     */
+    @Column(columnDefinition = "鐩爣绔殑鏃堕棿鏍煎紡")
+    private String targetDateFormat;
+
+    /**
+     * 杞崲鍏紡
+     */
+    @Column(columnDefinition = "杞崲鍏紡",length = 4000)
+    private String switchEval;
+
+    /**
+     * 杞崲鐨勮嚜瀹氫箟绫�
+     */
+    @Column(columnDefinition = "杞崲鐨勮嚜瀹氫箟绫�",length = 200)
+    private String switchClassName;
+
+    public String getClassifyTemplateMapOid() {
+        return classifyTemplateMapOid;
+    }
+
+    public void setClassifyTemplateMapOid(String classifyTemplateMapOid) {
+        this.classifyTemplateMapOid = classifyTemplateMapOid;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getGroupCodeAttrId() {
+        return groupCodeAttrId;
+    }
+
+    public void setGroupCodeAttrId(String groupCodeAttrId) {
+        this.groupCodeAttrId = groupCodeAttrId;
+    }
+
+    public String getGroupCodeAttrName() {
+        return groupCodeAttrName;
+    }
+
+    public void setGroupCodeAttrName(String groupCodeAttrName) {
+        this.groupCodeAttrName = groupCodeAttrName;
+    }
+
+    public String getClassifyTemplateAttrOid() {
+        return classifyTemplateAttrOid;
+    }
+
+    public void setClassifyTemplateAttrOid(String classifyTemplateAttrOid) {
+        this.classifyTemplateAttrOid = classifyTemplateAttrOid;
+    }
+
+    public String getClassifyAttrId() {
+        return classifyAttrId;
+    }
+
+    public void setClassifyAttrId(String classifyAttrId) {
+        this.classifyAttrId = classifyAttrId;
+    }
+
+    public String getClassifyAttrName() {
+        return classifyAttrName;
+    }
+
+    public void setClassifyAttrName(String classifyAttrName) {
+        this.classifyAttrName = classifyAttrName;
+    }
+
+    public String getTargetDateFormat() {
+        return targetDateFormat;
+    }
+
+    public void setTargetDateFormat(String targetDateFormat) {
+        this.targetDateFormat = targetDateFormat;
+    }
+
+    public String getSwitchEval() {
+        return switchEval;
+    }
+
+    public void setSwitchEval(String switchEval) {
+        this.switchEval = switchEval;
+    }
+
+    public String getSwitchClassName() {
+        return switchClassName;
+    }
+
+    public void setSwitchClassName(String switchClassName) {
+        this.switchClassName = switchClassName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyTempMapItemDO{" +
+                "classifyTemplateMapOid='" + classifyTemplateMapOid + '\'' +
+                ", name='" + name + '\'' +
+                ", groupCodeAttrId='" + groupCodeAttrId + '\'' +
+                ", groupCodeAttrName='" + groupCodeAttrName + '\'' +
+                ", classifyTemplateAttrOid='" + classifyTemplateAttrOid + '\'' +
+                ", classifyAttrId='" + classifyAttrId + '\'' +
+                ", classifyAttrName='" + classifyAttrName + '\'' +
+                ", targetDateFormat='" + targetDateFormat + '\'' +
+                ", switchEval='" + switchEval + '\'' +
+                ", switchClassName='" + switchClassName + '\'' +
+                '}' + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateAttrDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateAttrDO.java
new file mode 100644
index 0000000..bff5a47
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateAttrDO.java
@@ -0,0 +1,858 @@
+package org.springblade.code.model;
+
+import com.vci.starter.web.annotation.*;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴��
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,text = "涓婚搴撳垎绫荤殑妯℃澘灞炴��",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyTemplateAttrDO 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(nullable = false,columnDefinition = "灞炴�ц嫳鏂囧悕绉�")
+    private String id;
+
+    /**
+     * 灞炴�т腑鏂囧悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "灞炴�т腑鏂囧悕绉�")
+    private String name;
+
+    /**
+     * 灞炴�х殑绫诲瀷
+     */
+    @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;
+
+
+
+    public String getClassifyTemplateOid() {
+        return classifyTemplateOid;
+    }
+
+    public void setClassifyTemplateOid(String classifyTemplateOid) {
+        this.classifyTemplateOid = classifyTemplateOid;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAttributeDataType() {
+        return attributeDataType;
+    }
+
+    public void setAttributeDataType(String attributeDataType) {
+        this.attributeDataType = attributeDataType;
+    }
+
+    public String getKeyAttrFlag() {
+        return keyAttrFlag;
+    }
+
+    public void setKeyAttrFlag(String keyAttrFlag) {
+        this.keyAttrFlag = keyAttrFlag;
+    }
+
+    public String getQueryAttrFlag() {
+        return queryAttrFlag;
+    }
+
+    public void setQueryAttrFlag(String queryAttrFlag) {
+        this.queryAttrFlag = queryAttrFlag;
+    }
+
+    public String getSeniorQueryAttrFlag() {
+        return seniorQueryAttrFlag;
+    }
+
+    public void setSeniorQueryAttrFlag(String seniorQueryAttrFlag) {
+        this.seniorQueryAttrFlag = seniorQueryAttrFlag;
+    }
+
+    public String getSameRepeatAttrFlag() {
+        return sameRepeatAttrFlag;
+    }
+
+    public void setSameRepeatAttrFlag(String sameRepeatAttrFlag) {
+        this.sameRepeatAttrFlag = sameRepeatAttrFlag;
+    }
+
+    public String getSortAttrFlag() {
+        return sortAttrFlag;
+    }
+
+    public void setSortAttrFlag(String sortAttrFlag) {
+        this.sortAttrFlag = sortAttrFlag;
+    }
+
+    public String getQrcodeFlag() {
+        return qrcodeFlag;
+    }
+
+    public void setQrcodeFlag(String qrcodeFlag) {
+        this.qrcodeFlag = qrcodeFlag;
+    }
+
+    public String getBarcodeFlag() {
+        return barcodeFlag;
+    }
+
+    public void setBarcodeFlag(String barcodeFlag) {
+        this.barcodeFlag = barcodeFlag;
+    }
+
+    public String getComponentRule() {
+        return componentRule;
+    }
+
+    public void setComponentRule(String componentRule) {
+        this.componentRule = componentRule;
+    }
+
+    public String getVerifyRule() {
+        return verifyRule;
+    }
+
+    public void setVerifyRule(String verifyRule) {
+        this.verifyRule = verifyRule;
+    }
+
+    public String getClassifyInvokeLevel() {
+        return classifyInvokeLevel;
+    }
+
+    public void setClassifyInvokeLevel(String classifyInvokeLevel) {
+        this.classifyInvokeLevel = classifyInvokeLevel;
+    }
+
+    public String getClassifyInvokeAttr() {
+        return classifyInvokeAttr;
+    }
+
+    public void setClassifyInvokeAttr(String classifyInvokeAttr) {
+        this.classifyInvokeAttr = classifyInvokeAttr;
+    }
+
+    public String getClassifyInvokeAttrName() {
+        return classifyInvokeAttrName;
+    }
+
+    public void setClassifyInvokeAttrName(String classifyInvokeAttrName) {
+        this.classifyInvokeAttrName = classifyInvokeAttrName;
+    }
+
+    public String getClassifyInvokeEditFlag() {
+        return classifyInvokeEditFlag;
+    }
+
+    public void setClassifyInvokeEditFlag(String classifyInvokeEditFlag) {
+        this.classifyInvokeEditFlag = classifyInvokeEditFlag;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public String getFormDisplayFlag() {
+        return formDisplayFlag;
+    }
+
+    public void setFormDisplayFlag(String formDisplayFlag) {
+        this.formDisplayFlag = formDisplayFlag;
+    }
+
+    public String getTableDisplayFlag() {
+        return tableDisplayFlag;
+    }
+
+    public void setTableDisplayFlag(String tableDisplayFlag) {
+        this.tableDisplayFlag = tableDisplayFlag;
+    }
+
+    public String getAttributeGroup() {
+        return attributeGroup;
+    }
+
+    public void setAttributeGroup(String attributeGroup) {
+        this.attributeGroup = attributeGroup;
+    }
+
+    public String getEnumId() {
+        return enumId;
+    }
+
+    public void setEnumId(String enumId) {
+        this.enumId = enumId;
+    }
+
+    public String getEnumName() {
+        return enumName;
+    }
+
+    public void setEnumName(String enumName) {
+        this.enumName = enumName;
+    }
+
+    public String getEnumEditFlag() {
+        return enumEditFlag;
+    }
+
+    public void setEnumEditFlag(String enumEditFlag) {
+        this.enumEditFlag = enumEditFlag;
+    }
+
+    public String getReferBtmId() {
+        return referBtmId;
+    }
+
+    public void setReferBtmId(String referBtmId) {
+        this.referBtmId = referBtmId;
+    }
+
+    public String getReferBtmName() {
+        return referBtmName;
+    }
+
+    public void setReferBtmName(String referBtmName) {
+        this.referBtmName = referBtmName;
+    }
+
+    public String getReferConfig() {
+        return referConfig;
+    }
+
+    public void setReferConfig(String referConfig) {
+        this.referConfig = referConfig;
+    }
+
+    public String getRequireFlag() {
+        return requireFlag;
+    }
+
+    public void setRequireFlag(String requireFlag) {
+        this.requireFlag = requireFlag;
+    }
+
+    public String getReadOnlyFlag() {
+        return readOnlyFlag;
+    }
+
+    public void setReadOnlyFlag(String readOnlyFlag) {
+        this.readOnlyFlag = readOnlyFlag;
+    }
+
+    public Integer getControlLength() {
+        return controlLength;
+    }
+
+    public void setControlLength(Integer controlLength) {
+        this.controlLength = controlLength;
+    }
+
+    public String getFormDisplayStyle() {
+        return formDisplayStyle;
+    }
+
+    public void setFormDisplayStyle(String formDisplayStyle) {
+        this.formDisplayStyle = formDisplayStyle;
+    }
+
+    public String getTableDisplayStyle() {
+        return tableDisplayStyle;
+    }
+
+    public void setTableDisplayStyle(String tableDisplayStyle) {
+        this.tableDisplayStyle = tableDisplayStyle;
+    }
+
+    public String getFormHref() {
+        return formHref;
+    }
+
+    public void setFormHref(String formHref) {
+        this.formHref = formHref;
+    }
+
+    public String getTableHref() {
+        return tableHref;
+    }
+
+    public void setTableHref(String tableHref) {
+        this.tableHref = tableHref;
+    }
+
+    public Integer getPrecisionLength() {
+        return precisionLength;
+    }
+
+    public void setPrecisionLength(Integer precisionLength) {
+        this.precisionLength = precisionLength;
+    }
+
+    public Integer getScaleLength() {
+        return scaleLength;
+    }
+
+    public void setScaleLength(Integer scaleLength) {
+        this.scaleLength = scaleLength;
+    }
+
+    public String getValueArea() {
+        return valueArea;
+    }
+
+    public void setValueArea(String valueArea) {
+        this.valueArea = valueArea;
+    }
+
+    public String getCodeDateFormat() {
+        return codeDateFormat;
+    }
+
+    public void setCodeDateFormat(String codeDateFormat) {
+        this.codeDateFormat = codeDateFormat;
+    }
+
+    public String getTableDisplayJs() {
+        return tableDisplayJs;
+    }
+
+    public void setTableDisplayJs(String tableDisplayJs) {
+        this.tableDisplayJs = tableDisplayJs;
+    }
+
+    public String getTextAreaFlag() {
+        return textAreaFlag;
+    }
+
+    public void setTextAreaFlag(String textAreaFlag) {
+        this.textAreaFlag = textAreaFlag;
+    }
+
+    public String getImageFlag() {
+        return imageFlag;
+    }
+
+    public void setImageFlag(String imageFlag) {
+        this.imageFlag = imageFlag;
+    }
+
+    public String getDefaultValue() {
+        return defaultValue;
+    }
+
+    public void setDefaultValue(String defaultValue) {
+        this.defaultValue = defaultValue;
+    }
+
+    public String getPrefixValue() {
+        return prefixValue;
+    }
+
+    public void setPrefixValue(String prefixValue) {
+        this.prefixValue = prefixValue;
+    }
+
+    public String getSuffixValue() {
+        return suffixValue;
+    }
+
+    public void setSuffixValue(String suffixValue) {
+        this.suffixValue = suffixValue;
+    }
+
+    public String getFilterSourceAttr() {
+        return filterSourceAttr;
+    }
+
+    public void setFilterSourceAttr(String filterSourceAttr) {
+        this.filterSourceAttr = filterSourceAttr;
+    }
+
+    public String getFilterSourceAttrName() {
+        return filterSourceAttrName;
+    }
+
+    public void setFilterSourceAttrName(String filterSourceAttrName) {
+        this.filterSourceAttrName = filterSourceAttrName;
+    }
+
+    public String getEnumString() {
+        return enumString;
+    }
+
+    public void setEnumString(String enumString) {
+        this.enumString = enumString;
+    }
+
+    public Integer getAttrTableWidth() {
+        return attrTableWidth;
+    }
+
+    public void setAttrTableWidth(Integer attrTableWidth) {
+        this.attrTableWidth = attrTableWidth;
+    }
+
+    public String getExplain() {
+        return explain;
+    }
+
+    public void setExplain(String explain) {
+        this.explain = explain;
+    }
+
+    public String getLibraryIdentification() {
+        return libraryIdentification;
+    }
+
+    public void setLibraryIdentification(String libraryIdentification) {
+        this.libraryIdentification = libraryIdentification;
+    }
+
+    public String getParentCode() {
+        return parentCode;
+    }
+
+    public void setParentCode(String parentCode) {
+        this.parentCode = parentCode;
+    }
+
+    public String getParentName() {
+        return parentName;
+    }
+
+    public void setParentName(String parentName) {
+        this.parentName = parentName;
+    }
+
+    public String getParentQueryAttr() {
+        return parentQueryAttr;
+    }
+
+    public void setParentQueryAttr(String parentQueryAttr) {
+        this.parentQueryAttr = parentQueryAttr;
+    }
+
+    public String getClassifyTemplateOidName() {
+        return classifyTemplateOidName;
+    }
+
+    public void setClassifyTemplateOidName(String classifyTemplateOidName) {
+        this.classifyTemplateOidName = classifyTemplateOidName;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyTemplateAttrDO{" +
+                "classifyTemplateOid='" + classifyTemplateOid + '\'' +
+                ", classifyTemplateOidName='" + classifyTemplateOidName + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", attributeDataType='" + attributeDataType + '\'' +
+                ", keyAttrFlag='" + keyAttrFlag + '\'' +
+                ", queryAttrFlag='" + queryAttrFlag + '\'' +
+                ", seniorQueryAttrFlag='" + seniorQueryAttrFlag + '\'' +
+                ", sameRepeatAttrFlag='" + sameRepeatAttrFlag + '\'' +
+                ", sortAttrFlag='" + sortAttrFlag + '\'' +
+                ", qrcodeFlag='" + qrcodeFlag + '\'' +
+                ", barcodeFlag='" + barcodeFlag + '\'' +
+                ", componentRule='" + componentRule + '\'' +
+                ", verifyRule='" + verifyRule + '\'' +
+                ", classifyInvokeLevel='" + classifyInvokeLevel + '\'' +
+                ", classifyInvokeAttr='" + classifyInvokeAttr + '\'' +
+                ", classifyInvokeAttrName='" + classifyInvokeAttrName + '\'' +
+                ", classifyInvokeEditFlag='" + classifyInvokeEditFlag + '\'' +
+                ", orderNum=" + orderNum +
+                ", formDisplayFlag='" + formDisplayFlag + '\'' +
+                ", tableDisplayFlag='" + tableDisplayFlag + '\'' +
+                ", attributeGroup='" + attributeGroup + '\'' +
+                ", enumId='" + enumId + '\'' +
+                ", enumName='" + enumName + '\'' +
+                ", enumEditFlag='" + enumEditFlag + '\'' +
+                ", referBtmId='" + referBtmId + '\'' +
+                ", referBtmName='" + referBtmName + '\'' +
+                ", referConfig='" + referConfig + '\'' +
+                ", requireFlag='" + requireFlag + '\'' +
+                ", readOnlyFlag='" + readOnlyFlag + '\'' +
+                ", controlLength=" + controlLength +
+                ", formDisplayStyle='" + formDisplayStyle + '\'' +
+                ", tableDisplayStyle='" + tableDisplayStyle + '\'' +
+                ", formHref='" + formHref + '\'' +
+                ", tableHref='" + tableHref + '\'' +
+                ", precisionLength=" + precisionLength +
+                ", scaleLength=" + scaleLength +
+                ", valueArea='" + valueArea + '\'' +
+                ", codeDateFormat='" + codeDateFormat + '\'' +
+                ", tableDisplayJs='" + tableDisplayJs + '\'' +
+                ", textAreaFlag='" + textAreaFlag + '\'' +
+                ", imageFlag='" + imageFlag + '\'' +
+                ", defaultValue='" + defaultValue + '\'' +
+                ", prefixValue='" + prefixValue + '\'' +
+                ", suffixValue='" + suffixValue + '\'' +
+                ", filterSourceAttr='" + filterSourceAttr + '\'' +
+                ", filterSourceAttrName='" + filterSourceAttrName + '\'' +
+                ", enumString='" + enumString + '\'' +
+                ", attrTableWidth=" + attrTableWidth +
+                ", explain='" + explain + '\'' +
+                ", libraryIdentification='" + libraryIdentification + '\'' +
+                ", parentCode='" + parentCode + '\'' +
+                ", parentName='" + parentName + '\'' +
+                ", parentQueryAttr='" + parentQueryAttr + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateButtonDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateButtonDO.java
new file mode 100644
index 0000000..6f6c619
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateButtonDO.java
@@ -0,0 +1,135 @@
+package org.springblade.code.model;
+
+import com.vci.starter.web.annotation.*;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.constant.MdmEnumIdConstant;
+
+/**
+ * 妯℃澘灞炴�т笅鐨勬寜閽�
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_BUTTON,text = "涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyTemplateButtonDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -5004852745300082871L;
+    /**
+     * 鎵�灞炴ā鏉�
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String classifyTemplateOid;
+
+    /**
+     * 鎸夐挳鐨勪富閿�
+     */
+    @Column(nullable = false,columnDefinition = "鎸夐挳鐨勪富閿�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_BUTTON)
+    private String classifyButtonOid;
+
+    /**
+     * 鎸夐挳鐨勫悕绉�
+     */
+    @Transient(referColumn = "classifyButtonOid.name")
+    private String classifyButtonOidName;
+
+    /**
+     * 鎸夐挳鐢ㄩ��
+     */
+    @Column(columnDefinition = "鎸夐挳鐢ㄩ��")
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_TEMPLATE_BUTTON_USE,showTextField = "buttonUseText")
+    private String buttonUse;
+
+    /**
+     * 鎸夐挳鐢ㄩ�旀樉绀哄璞�
+     */
+    @Transient()
+    private String buttonUseText;
+
+    /**
+     * 鎸夐挳鏍囪瘑
+     */
+    @Transient(referColumn = "classifyButtonOid.id")
+    private String id;
+
+    /**
+     * 鎺掑簭鍙�
+     */
+    @Column(columnDefinition = "鎺掑簭鍙�")
+    private Integer orderNum;
+
+    public String getClassifyTemplateOid() {
+        return classifyTemplateOid;
+    }
+
+    public void setClassifyTemplateOid(String classifyTemplateOid) {
+        this.classifyTemplateOid = classifyTemplateOid;
+    }
+
+    public String getClassifyButtonOid() {
+        return classifyButtonOid;
+    }
+
+    public void setClassifyButtonOid(String classifyButtonOid) {
+        this.classifyButtonOid = classifyButtonOid;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public String getButtonUse() {
+        return buttonUse;
+    }
+
+    public void setButtonUse(String buttonUse) {
+        this.buttonUse = buttonUse;
+    }
+
+    public String getButtonUseText() {
+        return buttonUseText;
+    }
+
+    public void setButtonUseText(String buttonUseText) {
+        this.buttonUseText = buttonUseText;
+    }
+
+    public String getClassifyButtonOidName() {
+        return classifyButtonOidName;
+    }
+
+    public void setClassifyButtonOidName(String classifyButtonOidName) {
+        this.classifyButtonOidName = classifyButtonOidName;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyTemplateButtonDO{" +
+                "classifyTemplateOid='" + classifyTemplateOid + '\'' +
+                ", classifyButtonOid='" + classifyButtonOid + '\'' +
+                ", classifyButtonOidName='" + classifyButtonOidName + '\'' +
+                ", buttonUse='" + buttonUse + '\'' +
+                ", buttonUseText='" + buttonUseText + '\'' +
+                ", orderNum=" + orderNum +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateDO.java
new file mode 100644
index 0000000..c4ee7f8
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateDO.java
@@ -0,0 +1,93 @@
+package org.springblade.code.model;
+
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.constant.MdmLifeCycleConstant;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE,text = "鍒嗙被妯℃澘瀵硅薄",lifeCycle = MdmLifeCycleConstant.CODE_CLASSIFY_TEMPLATE_LC,
+		revisionRule = FrameWorkDefaultValueConstant.NUMBER_REVISION,startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING)
+public class CodeClassifyTemplateDO extends BaseModel {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117801077811L;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿�
+	*/
+	@Column(columnDefinition = "涓婚搴撳垎绫讳富閿�"    ,showTextField = "codeClassifyOidName"  )
+    @VciUseRefer(value = MdmBtmTypeConstant.CODE_CLASSIFY,showTextField = "codeClassifyOidName" )
+    private String codeClassifyOid;
+
+	/**
+	* 涓婚搴撳垎绫讳富閿樉绀烘枃鏈�
+	*/
+	@Transient(referColumn = "codeClassifyOid.name")
+	private String codeClassifyOidName;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨�
+	 */
+	@Column(columnDefinition = "涓氬姟绫诲瀷鐨勭紪鍙�")
+	private String btmTypeId;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨嬬殑涓枃鍚嶇О
+	 */
+	@Column(columnDefinition = "涓氬姟绫诲瀷鐨勫悕绉�")
+	private String btmTypeName;
+
+	public String getCodeClassifyOid() {
+		return codeClassifyOid;
+	}
+
+	public void setCodeClassifyOid(String codeClassifyOid) {
+		this.codeClassifyOid = codeClassifyOid;
+	}
+
+	public String getCodeClassifyOidName() {
+		return codeClassifyOidName;
+	}
+
+	public void setCodeClassifyOidName(String codeClassifyOidName) {
+		this.codeClassifyOidName = codeClassifyOidName;
+	}
+
+	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;
+	}
+
+	@Override
+	public String toString() {
+		return "CodeClassifyTemplateDO{" +
+				"codeClassifyOid='" + codeClassifyOid + '\'' +
+				", codeClassifyOidName='" + codeClassifyOidName + '\'' +
+				", btmTypeId='" + btmTypeId + '\'' +
+				", btmTypeName='" + btmTypeName + '\'' +
+				"} " + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateMapDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateMapDO.java
new file mode 100644
index 0000000..41fb962
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyTemplateMapDO.java
@@ -0,0 +1,114 @@
+package org.springblade.code.model;
+
+import com.vci.starter.web.annotation.*;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.constant.MdmEnumIdConstant;
+
+/**
+ * 妯℃澘鏄犲皠瑙勫垯
+ * 闆嗗洟鐮佸鍏ュ拰瀵煎嚭
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_MAP,text = "涓婚搴撴ā鏉挎槧灏勮鍒�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyTemplateMapDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -7507653171857583003L;
+    /**
+     * 鎵�灞炴ā鏉�
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String classifyTemplateOid;
+
+    /**
+     * 鎵�灞炴ā鏉垮悕绉�
+     */
+    @Transient(referColumn = "classifyTemplateOid.name")
+    private String classifyTemplateName;
+
+    /**
+     * 鏄犲皠瑙勫垯缂栧彿
+     */
+    @Column(columnDefinition = "鏄犲皠瑙勫垯缂栧彿")
+    private String id;
+
+    /**
+     * 鏄犲皠瑙勫垯鍚嶇О
+     */
+    @Column(columnDefinition = "鏄犲皠瑙勫垯鍚嶇О",nullable = false)
+    private String name;
+
+    /**
+     * 鏄犲皠瑙勫垯绫诲瀷
+     */
+    @Column(columnDefinition = "鏄犲皠瑙勫垯绫诲瀷",nullable = false)
+    @VciUseEnum(value = MdmEnumIdConstant.CODE_MAP_RULE_TYPE,showTextField = "codeMapRuleTypeText")
+    private String codeMapRuleType;
+
+    /**
+     * 鏄犲皠瑙勫垯绫诲瀷鐨勫悕绉�
+     */
+    @Transient
+    private String codeMapRuleTypeText;
+
+    public String getClassifyTemplateOid() {
+        return classifyTemplateOid;
+    }
+
+    public void setClassifyTemplateOid(String classifyTemplateOid) {
+        this.classifyTemplateOid = classifyTemplateOid;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCodeMapRuleType() {
+        return codeMapRuleType;
+    }
+
+    public void setCodeMapRuleType(String codeMapRuleType) {
+        this.codeMapRuleType = codeMapRuleType;
+    }
+
+    public String getCodeMapRuleTypeText() {
+        return codeMapRuleTypeText;
+    }
+
+    public void setCodeMapRuleTypeText(String codeMapRuleTypeText) {
+        this.codeMapRuleTypeText = codeMapRuleTypeText;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyTemplateMapDO{" +
+                "classifyTemplateOid='" + classifyTemplateOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", codeMapRuleType='" + codeMapRuleType + '\'' +
+                ", codeMapRuleTypeText='" + codeMapRuleTypeText + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyValueDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyValueDO.java
new file mode 100644
index 0000000..fc809c9
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeClassifyValueDO.java
@@ -0,0 +1,108 @@
+package org.springblade.code.model;
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊�
+ * 鐩稿綋浜庣骇鑱旂殑涓嬫媺妗�
+ * @author weidy
+ * @date 2022-1-18
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_VALUE,text = "鍒嗙被鐮佹鐨勭爜鍊�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeClassifyValueDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 5238387322464830032L;
+    /**
+     * 鍒嗙被鐮佹涓婚敭
+     */
+    @Column(columnDefinition = "鍒嗙被鐮佹涓婚敭")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_BASIC_SEC)
+    private String codeClassifySecOid;
+
+    /**
+     * 鍒嗙被鐮佸��
+     */
+    @Column(columnDefinition = "鍒嗙被鐮佸��")
+    private String id;
+
+    /**
+     * 鍒嗙被鍚嶇О
+     */
+    @Column(columnDefinition = "鍒嗙被鍚嶇О")
+    private String name;
+
+    /**
+     * 鐮佸�煎簭鍙�
+     */
+    @Column(columnDefinition = "鐮佸�煎簭鍙�")
+    private Integer orderNum;
+
+    /**
+     * 涓婄骇鍒嗙被鐮佸�间富閿�
+     */
+    @Column(columnDefinition = "涓婄骇鍒嗙被鐮佸�间富閿�")
+    private String parentClassifyValueOid;
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCodeClassifySecOid() {
+        return codeClassifySecOid;
+    }
+
+    public void setCodeClassifySecOid(String codeClassifySecOid) {
+        this.codeClassifySecOid = codeClassifySecOid;
+    }
+
+    public String getParentClassifyValueOid() {
+        return parentClassifyValueOid;
+    }
+
+    public void setParentClassifyValueOid(String parentClassifyValueOid) {
+        this.parentClassifyValueOid = parentClassifyValueOid;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeClassifyValueDO{" +
+                "codeClassifySecOid='" + codeClassifySecOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", orderNum=" + orderNum +
+                ", parentClassifyValueOid='" + parentClassifyValueOid + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeFixedValueDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeFixedValueDO.java
new file mode 100644
index 0000000..8416111
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeFixedValueDO.java
@@ -0,0 +1,93 @@
+package org.springblade.code.model;
+
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊�
+ * 鐩稿綋浜庡湪鏋氫妇鐨勪綔鐢紝浼氭湁澶氫釜
+ * @author weidy
+ * @date 2022-1-18
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_FIXED_VALUE,text = "鍥哄畾鐮佹鐨勭爜鍊�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeFixedValueDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 3392365440606832597L;
+    /**
+     * 鍥哄畾鐮佹涓婚敭
+     */
+    @Column(columnDefinition = "鍥哄畾鐮佹涓婚敭")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_BASIC_SEC)
+    private String codeFixedSecOid;
+
+    /**
+     * 鍥哄畾鐮佹鐨勭爜鍊�
+     */
+    @Column(columnDefinition = "鍥哄畾鐮佹鐨勭爜鍊�")
+    private String id;
+
+    /**
+     * 鍥哄畾鐮佹鐮佸�肩殑鎻忚堪
+     */
+    @Column(columnDefinition = "鍥哄畾鐮佹鐮佸�肩殑鎻忚堪")
+    private String name;
+
+    /**
+     * 灞炴�ф帓搴忓彿
+     */
+    @Column(columnDefinition = "灞炴�ф帓搴忓彿")
+    private Integer orderNum;
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCodeFixedSecOid() {
+        return codeFixedSecOid;
+    }
+
+    public void setCodeFixedSecOid(String codeFixedSecOid) {
+        this.codeFixedSecOid = codeFixedSecOid;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeFixedValueDO{" +
+                "codeFixedSecOid='" + codeFixedSecOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", orderNum=" + orderNum +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeImprotDataGridVO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeImprotDataGridVO.java
new file mode 100644
index 0000000..180fc33
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeImprotDataGridVO.java
@@ -0,0 +1,4 @@
+package org.springblade.code.model;
+
+public class CodeImprotDataGridVO {
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeKeyAttrRepeatRuleDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeKeyAttrRepeatRuleDO.java
new file mode 100644
index 0000000..abe740f
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeKeyAttrRepeatRuleDO.java
@@ -0,0 +1,120 @@
+package org.springblade.code.model;
+
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+ * @author weidy
+ * @date 2022-1-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_KEY_ATTR_REPEAT_RULE,text = "鍏抽敭鏁版嵁鏌ラ噸瑙勫垯",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
+public class CodeKeyAttrRepeatRuleDO extends BaseModel {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6696611801656232742L;
+
+    /**
+     * 鏌ラ噸瑙勫垯鑻辨枃缂栧彿
+     */
+    @Column(columnDefinition = "鏌ラ噸瑙勫垯鑻辨枃缂栧彿")
+    private String id;
+
+    /**
+     * 鏌ラ噸瑙勫垯涓枃鍚嶇О
+     */
+    @Column(nullable = false,columnDefinition = "鏌ラ噸瑙勫垯涓枃鍚嶇О")
+    private String name;
+
+    /**
+     * 鏄惁蹇界暐澶у皬鍐�
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐澶у皬鍐�")
+    private String ignoreCaseFlag;
+
+    /**
+     * 鏄惁蹇界暐绌烘牸
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐绌烘牸")
+    private String ignoreSpaceFlag;
+
+    /**
+     * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄩ儴绌烘牸")
+    private String ignoreAllSpaceFlag;
+
+    /**
+     * 鏄惁蹇界暐鍏ㄥ崐瑙�
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄥ崐瑙�")
+    private String ignoreWidthFlag;
+
+    public String getIgnoreWidthFlag() {
+        return ignoreWidthFlag;
+    }
+
+    public void setIgnoreWidthFlag(String ignoreWidthFlag) {
+        this.ignoreWidthFlag = ignoreWidthFlag;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIgnoreCaseFlag() {
+        return ignoreCaseFlag;
+    }
+
+    public void setIgnoreCaseFlag(String ignoreCaseFlag) {
+        this.ignoreCaseFlag = ignoreCaseFlag;
+    }
+
+    public String getIgnoreSpaceFlag() {
+        return ignoreSpaceFlag;
+    }
+
+    public void setIgnoreSpaceFlag(String ignoreSpaceFlag) {
+        this.ignoreSpaceFlag = ignoreSpaceFlag;
+    }
+
+    public String getIgnoreAllSpaceFlag() {
+        return ignoreAllSpaceFlag;
+    }
+
+    public void setIgnoreAllSpaceFlag(String ignoreAllSpaceFlag) {
+        this.ignoreAllSpaceFlag = ignoreAllSpaceFlag;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeKeyAttrRepeatRuleDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", ignoreCaseFlag='" + ignoreCaseFlag + '\'' +
+                ", ignoreSpaceFlag='" + ignoreSpaceFlag + '\'' +
+                ", ignoreAllSpaceFlag='" + ignoreAllSpaceFlag + '\'' +
+                ", ignoreWidthFlag='" + ignoreWidthFlag + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodePhaseAttrDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodePhaseAttrDO.java
new file mode 100644
index 0000000..e37c25f
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodePhaseAttrDO.java
@@ -0,0 +1,93 @@
+package org.springblade.code.model;
+
+
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 闃舵鐨勫睘鎬�
+ * @author weidy
+ * @date 2022-1-14
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_PHASE_ATTR,text = "闃舵鐨勫睘鎬�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodePhaseAttrDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1316335276045033657L;
+    /**
+     * 鎵�灞為樁娈电殑淇℃伅
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉块樁娈�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE)
+    private String codePhaseOid;
+
+    /**
+     * 灞炴�х紪鍙�
+     */
+    @Column(columnDefinition = "灞炴�х紪鍙�",nullable = false)
+    private String id;
+
+    /**
+     * 灞炴�у悕绉�
+     */
+    @Column(columnDefinition = "灞炴�у悕绉�")
+    private String name;
+
+    /**
+     * 鎵�灞炲睘鎬у垎缁�
+     */
+    @Column(columnDefinition = "鎵�灞炲睘鎬у垎缁�")
+    private String attributeGroup;
+
+    public String getAttributeGroup() {
+        return attributeGroup;
+    }
+
+    public void setAttributeGroup(String attributeGroup) {
+        this.attributeGroup = attributeGroup;
+    }
+
+    public String getCodePhaseOid() {
+        return codePhaseOid;
+    }
+
+    public void setCodePhaseOid(String codePhaseOid) {
+        this.codePhaseOid = codePhaseOid;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String toString() {
+        return "CodePhaseAttrDO{" +
+                "codePhaseOid='" + codePhaseOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", attributeGroup='" + attributeGroup + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeResembleRuleDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeResembleRuleDO.java
new file mode 100644
index 0000000..db85fdd
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeResembleRuleDO.java
@@ -0,0 +1,137 @@
+package org.springblade.code.model;
+
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯
+ * @author weidy
+ * @date 2022-4-10
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_RESEMBLE_RULE,text = "鐩镐技鏌ヨ瑙勫垯",lifeCycle = FrameWorkLcStatusConstant.FRAME_WORK_LIFE_CYCLE_NAME)
+public class CodeResembleRuleDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 7375719926432663351L;
+
+    /**
+     * 鐩镐技鏌ヨ瑙勫垯缂栧彿
+     */
+    @Column(columnDefinition = "鐩镐技鏌ヨ瑙勫垯缂栧彿")
+    private String id;
+
+    /**
+     * 鐩镐技鏌ヨ瑙勫垯缂栧彿
+     */
+    @Column(nullable = false,columnDefinition = "鐩镐技鏌ヨ瑙勫垯缂栧彿")
+    private String name;
+
+    /**
+     * 鏄惁蹇界暐澶у皬鍐�
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐澶у皬鍐�")
+    private String ignoreCaseFlag;
+
+    /**
+     * 鏄惁蹇界暐绌烘牸
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐绌烘牸")
+    private String ignoreSpaceFlag;
+
+    /**
+     * 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄩ儴绌烘牸")
+    private String ignoreAllSpaceFlag;
+
+    /**
+     * 鏄惁蹇界暐鍏ㄥ崐瑙�
+     */
+    @Column(columnDefinition = "鏄惁蹇界暐鍏ㄥ崐瑙�")
+    private String ignoreWidthFlag;
+
+    /**
+     * 杩炴帴绗�
+     */
+    @Column(columnDefinition = "杩炴帴绗�",length = 200)
+    private String linkCharacter;
+
+    public String getIgnoreWidthFlag() {
+        return ignoreWidthFlag;
+    }
+
+    public void setIgnoreWidthFlag(String ignoreWidthFlag) {
+        this.ignoreWidthFlag = ignoreWidthFlag;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIgnoreCaseFlag() {
+        return ignoreCaseFlag;
+    }
+
+    public void setIgnoreCaseFlag(String ignoreCaseFlag) {
+        this.ignoreCaseFlag = ignoreCaseFlag;
+    }
+
+    public String getIgnoreSpaceFlag() {
+        return ignoreSpaceFlag;
+    }
+
+    public void setIgnoreSpaceFlag(String ignoreSpaceFlag) {
+        this.ignoreSpaceFlag = ignoreSpaceFlag;
+    }
+
+    public String getIgnoreAllSpaceFlag() {
+        return ignoreAllSpaceFlag;
+    }
+
+    public void setIgnoreAllSpaceFlag(String ignoreAllSpaceFlag) {
+        this.ignoreAllSpaceFlag = ignoreAllSpaceFlag;
+    }
+
+
+    public String getLinkCharacter() {
+        return linkCharacter;
+    }
+
+    public void setLinkCharacter(String linkCharacter) {
+        this.linkCharacter = linkCharacter;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeResembleRuleDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", ignoreCaseFlag='" + ignoreCaseFlag + '\'' +
+                ", ignoreSpaceFlag='" + ignoreSpaceFlag + '\'' +
+                ", ignoreAllSpaceFlag='" + ignoreAllSpaceFlag + '\'' +
+                ", ignoreWidthFlag='" + ignoreWidthFlag + '\'' +
+                ", linkCharacter='" + linkCharacter + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeRuleDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeRuleDO.java
new file mode 100644
index 0000000..1609bbe
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeRuleDO.java
@@ -0,0 +1,79 @@
+package org.springblade.code.model;
+
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import com.vci.mdm.constant.MdmLifeCycleConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 缂栫爜瑙勫垯
+ * @author weidy
+ * @date 2022-1-18
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_RULE,text = "涓绘暟鎹紪鐮佽鍒�",lifeCycle = MdmLifeCycleConstant.CODE_RULE_LC,startStatus = FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING)
+public class CodeRuleDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -7142347409110551299L;
+    /**
+     * 瑙勫垯缂栧彿
+     */
+    @Column(columnDefinition = "瑙勫垯缂栧彿")
+    private String id;
+
+    /**
+     * 瑙勫垯鐨勫悕绉�
+     */
+    @Column(columnDefinition = "瑙勫垯鍚嶇О")
+    private String name;
+
+    /**
+     * 瑙勫垯鐨勬弿杩�
+     */
+    @Column(columnDefinition = "瑙勫垯鐨勬弿杩�")
+    private String description;
+
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeRuleDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSerialValueDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSerialValueDO.java
new file mode 100644
index 0000000..3d1c7a5
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSerialValueDO.java
@@ -0,0 +1,88 @@
+package org.springblade.code.model;
+
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 缂栫爜瑙勫垯鐨勬祦姘村��
+ * @author weidy
+ * @date 2022-3-1
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_SERIAL_VALUE,text = "娴佹按鐨勫��",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeSerialValueDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 4585738864706015777L;
+    /**
+     * 缂栫爜瑙勫垯鐨勪富閿�
+     */
+    @Column(nullable = false,columnDefinition = "缂栫爜瑙勫垯涓婚敭")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_RULE)
+    private String codeRuleOid;
+
+    /***
+     * 娴佹按渚濊禆
+     */
+    @Column(length = 4000,columnDefinition = "娴佹按渚濊禆")
+    private String serialUnit;
+
+    /**
+     * 鐮佹鐨勪富閿�
+     */
+    @Column(columnDefinition = "鐮佹鐨勪富閿�")
+    private String codeSecOid;
+
+    /**
+     * 鏈�澶ф祦姘村彿
+     */
+    @Column(columnDefinition = "鏈�澶ф祦姘村彿")
+    private String maxSerial;
+
+    public String getCodeRuleOid() {
+        return codeRuleOid;
+    }
+
+    public void setCodeRuleOid(String codeRuleOid) {
+        this.codeRuleOid = codeRuleOid;
+    }
+
+    public String getSerialUnit() {
+        return serialUnit;
+    }
+
+    public void setSerialUnit(String serialUnit) {
+        this.serialUnit = serialUnit;
+    }
+
+    public String getCodeSecOid() {
+        return codeSecOid;
+    }
+
+    public void setCodeSecOid(String codeSecOid) {
+        this.codeSecOid = codeSecOid;
+    }
+
+    public String getMaxSerial() {
+        return maxSerial;
+    }
+
+    public void setMaxSerial(String maxSerial) {
+        this.maxSerial = maxSerial;
+    }
+
+    @Override
+    public String toString() {
+        return "CodeSerialValueDO{" +
+                "codeRuleOid='" + codeRuleOid + '\'' +
+                ", serialUnit='" + serialUnit + '\'' +
+                ", codeSecOid='" + codeSecOid + '\'' +
+                ", maxSerial='" + maxSerial + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSynonymDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSynonymDO.java
new file mode 100644
index 0000000..3b7b468
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeSynonymDO.java
@@ -0,0 +1,121 @@
+package org.springblade.code.model;
+
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 鍚屼箟璇�
+ * @author weidy
+ * @date 2022-2-17
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_SYNONYM,text = "鍚屼箟璇嶉厤缃�",description = "鍚屼箟璇嶉厤缃�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeSynonymDO extends BaseModel {
+
+    /**
+     * 妯℃澘涓婚敭
+     */
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    @Column(nullable = false,columnDefinition = "妯℃澘涓婚敭")
+    private String codeClassifyTemplateOid;
+
+    /**
+     * 妯℃澘鐨勫悕绉�
+     */
+    @Transient(referColumn = "codeClassifyTemplateOid.name")
+    private String codeClassifyTemplateOidName;
+
+
+    /**
+     * 灞炴�х殑鑻辨枃鍚嶇О
+     */
+    @Column(nullable = false,columnDefinition = "灞炴�ц嫳鏂囧悕绉�")
+    private String id;
+
+    /**
+     * 灞炴�х殑涓枃鍚嶇О
+     */
+    @Column(nullable = false,columnDefinition = "灞炴�т腑鏂囧悕绉�")
+    private String name;
+
+    /**
+     * 婧愬��
+     */
+    @Column(nullable = false,length = 200,columnDefinition = "婧愬��")
+    private String sourceValue;
+
+    /**
+     * 鍚屼箟璇�
+     */
+    @Column(nullable = false,length = 200,columnDefinition = "鍚屼箟璇�")
+    private String synonymValue;
+
+    public String getCodeClassifyTemplateOid() {
+        return codeClassifyTemplateOid;
+    }
+
+    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
+        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
+    }
+
+    public String getCodeClassifyTemplateOidName() {
+        return codeClassifyTemplateOidName;
+    }
+
+    public void setCodeClassifyTemplateOidName(String codeClassifyTemplateOidName) {
+        this.codeClassifyTemplateOidName = codeClassifyTemplateOidName;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSourceValue() {
+        return sourceValue;
+    }
+
+    public void setSourceValue(String sourceValue) {
+        this.sourceValue = sourceValue;
+    }
+
+    public String getSynonymValue() {
+        return synonymValue;
+    }
+
+    public void setSynonymValue(String synonymValue) {
+        this.synonymValue = synonymValue;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeSynonymDO{" +
+                "codeClassifyTemplateOid='" + codeClassifyTemplateOid + '\'' +
+                ", codeClassifyTemplateOidName='" + codeClassifyTemplateOidName + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", sourceValue='" + sourceValue + '\'' +
+                ", synonymValue='" + synonymValue + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeTemplatePhaseDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeTemplatePhaseDO.java
new file mode 100644
index 0000000..7aa35cf
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeTemplatePhaseDO.java
@@ -0,0 +1,81 @@
+package org.springblade.code.model;
+
+
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.annotation.VciUseRefer;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 妯℃澘闃舵
+ * @author weidy
+ * @date 2022-1-14
+ */
+@VciBtmType(name = MdmBtmTypeConstant.CODE_TEMPLATE_PHASE,text = "妯℃澘闃舵",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class CodeTemplatePhaseDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 3526024656097456437L;
+    /**
+     * 鎵�灞炵紪鐮佹ā鏉�
+     */
+    @Column(nullable = false,columnDefinition = "鎵�灞炵紪鐮佹ā鏉�")
+    @VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String codeClassifyTemplateOid;
+
+    /**
+     * 闃舵缂栧彿
+     */
+    @Column(columnDefinition = "闃舵缂栧彿")
+    private String id;
+
+    /**
+     * 闃舵鍚嶇О
+     */
+    @Column(nullable = false,columnDefinition = "闃舵鍚嶇О")
+    private String name;
+
+
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCodeClassifyTemplateOid() {
+        return codeClassifyTemplateOid;
+    }
+
+    public void setCodeClassifyTemplateOid(String codeClassifyTemplateOid) {
+        this.codeClassifyTemplateOid = codeClassifyTemplateOid;
+    }
+
+
+    @Override
+    public String toString() {
+        return "CodeTemplatePhaseDO{" +
+                "codeClassifyTemplateOid='" + codeClassifyTemplateOid + '\'' +
+                ", id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                "} " + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeBasicSecServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeBasicSecServiceI.java
new file mode 100644
index 0000000..4263f5e
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeBasicSecServiceI.java
@@ -0,0 +1,186 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeBasicSecDTO;
+import com.vci.mdm.model.CodeBasicSecDO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.pagemodel.Tree;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.pageModel.KeyValue;
+import org.springblade.code.vo.pagemodel.CodeBasicSecVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鐮佹鍩虹淇℃伅鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeBasicSecServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鐮佹鍩虹淇℃伅
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeBasicSecVO> gridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO>  codeBasicSecDOs) throws VciBaseException;
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasFixedValue 鏄惁鏈夊浐瀹氬��
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO> codeBasicSecDOs, boolean hasFixedValue) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeBasicSecDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeBasicSecVO codeBasicSecDO2VO(CodeBasicSecDO codeBasicSecDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeBasicSecVO addSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeBasicSecVO editSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鐮佹鍩虹淇℃伅
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeBasicSec(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鐮佹鍩虹淇℃伅
+    * @param oid 涓婚敭
+    * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeBasicSecVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐮佹鍩虹淇℃伅
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeBasicSecVO> listCodeBasicSecByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鐮佹鍩虹淇℃伅鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeBasicSecVO> refDataGridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 涓婚敭鍒犻櫎鐮佹鍩虹淇℃伅
+     * @param oid 鐮佹鍩虹淇℃伅涓婚敭
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeBasicSecByPrimaryKey(String oid) throws VciBaseException;
+
+    /**
+     * 鍏嬮殕鐮佹淇℃伅
+     * @param oidList 婧愮爜娈典俊鎭富閿泦鍚�
+     * @param pkCodeRule 鐩爣缂栫爜瑙勫垯
+     * @return 鍏嬮殕缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    BaseResult cloneCodeBasicSec(List<String> oidList, String pkCodeRule);
+
+    /**
+     * 鏌ヨ鐩爣鍒嗙被鐮佹鎵�鍦ㄧ殑鏍戠粨鏋�
+     * @param oid 鐩爣鍒嗙被鐮佹涓婚敭
+     * @return 鍒嗙被鐮佹鏍戠粨鏋�
+     */
+    List<Tree> gridCodeClassifySecTree(String oid);
+
+    /**
+     * 鏍规嵁鐮佹鍒嗙被鐨勭被鍨嬪垽鏂睘鎬ф槸鍚︽槸绌虹殑
+     *
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鏈夌┖鐨勫垯浼爇ey-灞炴�у悕 value-瀛楁鍚箟锛屾病鏈夌┖鐨勫垯浼� key-success value-true
+     */
+    KeyValue checkAttrNullableBySecType(CodeBasicSecDTO codeBasicSecDTO);
+
+    /**
+     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鍐呭
+     * @param ruleOid 瑙勫垯鐨勫唴瀹�
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    List<CodeBasicSecVO> listCodeBasicSecByRuleOid(String ruleOid);
+
+    /**
+     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鐨勫唴瀹�
+     * @param ruleCollection 瑙勫垯涓婚敭闆嗗悎
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    List<CodeBasicSecVO> listCodeBasicSecByRuleOids(Collection<String> ruleCollection);
+
+    /**
+     * 鍙傜収鍒嗙被鐨勭爜娈�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鐨勫璞�
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    DataGrid<CodeBasicSecVO> refDataGridClassifySec(Map<String, String> conditionMap, PageHelper pageHelper);
+
+    /**
+     * 鏍规嵁缂栫爜瑙勫垯鎵归噺鍒犻櫎鐮佹鍩烘湰淇℃伅
+     * @param codeRuleOid 缂栫爜瑙勫垯涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    BatchCBO batchDeleteSecByCodeRuleOid(String codeRuleOid);
+
+    /**
+     * 涓婄Щ
+     * @param oid 涓婚敭
+     */
+    void upOrderNum(String oid);
+
+    /**
+     * 涓嬬Щ
+     * @param oid 涓婚敭
+     */
+    void downOrderNum(String oid);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeButtonServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeButtonServiceI.java
new file mode 100644
index 0000000..b2ed736
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeButtonServiceI.java
@@ -0,0 +1,115 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeButtonDTO;
+import com.vci.mdm.model.CodeButtonDO;
+import com.vci.mdm.pagemodel.CodeButtonVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeButtonServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeButtonVO> gridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeButtonVO> codeButtonDO2VOs(Collection<CodeButtonDO>  codeButtonDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeButtonDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeButtonVO codeButtonDO2VO(CodeButtonDO codeButtonDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeButtonVO addSave(CodeButtonDTO codeButtonDTO) throws VciBaseException;
+
+    /**
+     * 淇敼涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeButtonVO editSave(CodeButtonDTO codeButtonDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeButton(CodeButtonDTO codeButtonDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+    * @param oid 涓婚敭
+    * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeButtonVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeButtonVO> listCodeButtonByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeButtonVO> refDataGridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鍚敤
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult enableCodeButton(CodeButtonDTO buttonDTO);
+
+    /**
+     * 鍋滅敤
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult disableCodeButton(CodeButtonDTO buttonDTO);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyProcessTempServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyProcessTempServiceI.java
new file mode 100644
index 0000000..83a85cb
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyProcessTempServiceI.java
@@ -0,0 +1,124 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeClassifyProcessTempDTO;
+import com.vci.mdm.model.CodeClassifyProcessTempDO;
+import com.vci.mdm.pagemodel.CodeClassifyProcessTempVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyProcessTempServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyProcessTempDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyProcessTempDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyProcessTempVO codeClassifyProcessTempDO2VO(CodeClassifyProcessTempDO 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 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult 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 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鍐呭
+     */
+    BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) ;
+
+    /**
+     * 鑾峰彇娴佺▼鐨勬ā鏉跨殑淇℃伅
+     * @param codeTemplateOid 妯℃澘鐨勪富閿�
+     * @param processUse 鐢ㄩ��
+     * @return 妯℃澘鐨勪俊鎭�
+     */
+    List<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid, String processUse);
+
+    /**
+     * 浣跨敤妯℃澘鍚嶇О鏌ヨ
+     * @param codeTemplateOid 鍒嗙被妯℃澘涓婚敭
+     * @param processName 妯℃澘鍚嶇О
+     */
+    CodeClassifyProcessTempVO getProcessTempVOByName(String codeTemplateOid,String processName);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyServiceI.java
new file mode 100644
index 0000000..2db04f6
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyServiceI.java
@@ -0,0 +1,240 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.bo.CodeClassifyFullInfoBO;
+import com.vci.mdm.dto.CodeClassifyDTO;
+import com.vci.mdm.model.CodeClassifyDO;
+import com.vci.mdm.pagemodel.CodeClassifyVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.OsAttributeVO;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 涓婚搴撳垎绫绘湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-20
+ */
+public interface CodeClassifyServiceI {
+    /**
+     * 鏌ヨ涓婚搴撳垎绫� 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 涓婚搴撳垎绫� 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject) throws VciBaseException;
+
+    /**
+     * 涓婚搴撶殑鏍�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撴樉绀烘爲
+     */
+    List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject);
+
+    /**
+     * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+     *
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+     */
+    List<CodeClassifyDO> selectCodeClassifyDOByTree(TreeQueryObject treeQueryObject);
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyVO> codeClassifyDO2VOs(Collection<CodeClassifyDO>  codeClassifyDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyVO codeClassifyDO2VO(CodeClassifyDO codeClassifyDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyVO addSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
+
+    /**
+     * 淇敼涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    BaseResult editSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
+
+
+    /**
+     * 妫�鏌� 涓婚搴撳垎绫绘槸鍚﹀垹闄�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult checkIsCanDelete(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
+
+    /**
+     * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+     *
+     * @param oid 涓婚敭
+     * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+     * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    boolean checkChildIsLinked(String oid) throws VciBaseException;
+
+    /**
+     * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+     *
+     * @param oid 涓婚敭
+     * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+     * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    boolean checkHasChild(String oid) throws VciBaseException;
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassify(CodeClassifyDTO codeClassifyDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫绘樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫绘樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyVO> listCodeClassifyByOids(Collection<String> oidCollections) throws VciBaseException;
+
+    /**
+     * 鍙傜収鏍� 涓婚搴撳垎绫�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撳垎绫绘樉绀烘爲
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException;
+
+    /**
+     * 鍚敤銆佸仠鐢�
+     * @param oid 涓婚敭
+     * @param lcStatus 鐘舵��
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult updateLcStatus( String oid, String lcStatus);
+
+    /**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄
+     */
+    List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper);
+
+    /**
+     * 浣跨敤鍒嗙被涓婚敭鑾峰彇鍒嗙被鐩稿叧鐨勬墍鏈変俊鎭�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被涓婄骇锛屼笅绾х殑淇℃伅
+     */
+    CodeClassifyFullInfoBO getClassifyFullInfo(String codeClassifyOid);
+
+    /**
+     * 鑾峰彇褰撳墠鍒嗙被鐨勯《灞傚垎绫�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 椤跺眰鍒嗙被鐨勪俊鎭�
+     */
+    CodeClassifyVO getTopClassifyVO(String codeClassifyOid);
+
+    /**
+     * 缁熻瀛愯妭鐐圭殑涓暟
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 涓暟
+     */
+    int countChildrenByClassifyOid(String codeClassifyOid);
+    /**
+     * 鑾峰彇瀛愮骇鐨勪富棰樺簱鍒嗙被
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param allLevel        鏄惁鎵�鏈夌殑灞傜骇
+     * @param fieldInPath 鍦ㄨ矾寰勪腑鐨勫瓧娈�
+     * @param enable 鏄惁鍙樉绀哄惎鐢�
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    List<CodeClassifyVO> listChildrenClassify(String codeClassifyOid, boolean allLevel, String fieldInPath, boolean enable);
+
+    /**
+     * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    List<CodeClassifyVO> listParentClassify(String codeClassifyOid);
+
+    /**
+     * 瀵煎嚭鍒嗙被
+     * @param oid 鍒嗙被涓婚敭
+     * @return excel鏂囦欢璺緞
+     */
+    String exportClassify(String oid);
+
+    /**
+     * 鍒涘缓瀵煎叆妯℃澘
+     * @return excel鏂囦欢璺緞
+     */
+    String createImportExcel();
+
+    /**
+     * 瀵煎叆鍒嗙被
+     * @param file1 鏂囦欢鐨勪俊鎭�
+     */
+    void importClassify(File file1);
+
+    /**
+     * 鑾峰彇鍒嗙被鍏宠仈鐨勫睘鎬�
+     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤绘湁codeClassifyOid锛屾敮鎸乮d鍜宯ame涓ょ鏌ヨ鏉′欢
+     * @return 灞炴�х殑淇℃伅锛屽寘鍚粯璁ょ殑灞炴��
+     */
+    DataGrid<OsAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject);
+
+    /**
+     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
+     * @param idPath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    CodeClassifyVO getObjectByIdPath(String idPath);
+
+    /**
+     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
+     * @param clsfNamePath 鍒嗙被鍚嶇О鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    CodeClassifyVO getObjectByClsfNamePath(String clsfNamePath);
+
+    /***
+     * 鏍规嵁涓婄骇鑺傜偣鑾峰彇涓嬬骇鑺傜偣浠e彿璺緞鍜屽悕绉拌矾寰�
+     * @param classifyId
+     * @param enable
+     * @return
+     */
+    public List<CodeClassifyVO> getIdPathToNamePathByParentId(String classifyId,boolean enable);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTempMapItemServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTempMapItemServiceI.java
new file mode 100644
index 0000000..7b6a4f6
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTempMapItemServiceI.java
@@ -0,0 +1,101 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeClassifyTempMapItemDTO;
+import com.vci.mdm.model.CodeClassifyTempMapItemDO;
+import com.vci.mdm.pagemodel.CodeClassifyTempMapItemVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-03-10
+ */
+public interface CodeClassifyTempMapItemServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyTempMapItemVO> gridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTempMapItemDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTempMapItemVO> codeClassifyTempMapItemDO2VOs(Collection<CodeClassifyTempMapItemDO>  codeClassifyTempMapItemDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTempMapItemDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyTempMapItemVO codeClassifyTempMapItemDO2VO(CodeClassifyTempMapItemDO codeClassifyTempMapItemDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTempMapItemVO addSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTempMapItemVO editSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyTempMapItem(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+    * @param oid 涓婚敭
+    * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyTempMapItemVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyTempMapItemVO> listCodeClassifyTempMapItemByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeClassifyTempMapItemVO> refDataGridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateAttrServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateAttrServiceI.java
new file mode 100644
index 0000000..e18bdfd
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateAttrServiceI.java
@@ -0,0 +1,133 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeClassifyTemplateAttrDTO;
+import com.vci.mdm.model.CodeClassifyTemplateAttrDO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.web.pageModel.OsBtmTypeAttributeVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyTemplateAttrServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClassifyTemplateAttrDO>  codeClassifyTemplateAttrDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateAttrVO codeClassifyTemplateAttrDO2VO(CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateAttrVO addSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
+    List<CodeClassifyTemplateAttrVO> batchAddSave(List<CodeClassifyTemplateAttrDTO> codeClassifyTemplateAttrDTOs) throws VciBaseException;
+
+    /**
+     * 淇敼涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    BaseResult editSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyTemplateAttr(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyTemplateAttrVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅鐨勬墍鏈夋湭閫夋嫨鐨勫睘鎬�
+     * @param baseQueryObject
+     * @return
+     */
+    DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject);
+
+    /**
+     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅宸查�夋嫨鐨勫睘鎬�
+     * @param baseQueryObject
+     * @return
+     */
+    DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject);
+
+    /**
+     * 鍚屾鍒板叾浠栨ā鏉�
+     * @param codeClassifyTemplateAttrDTO oid
+     * @return
+     */
+    BaseResult copyto(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException;
+
+    /**
+     * 浣跨敤妯℃澘鐨勪富閿幏鍙栨ā鏉跨殑灞炴��--鎵归噺
+     * @param templateOidCollection 妯℃澘鐨勪富閿�
+     * @return 灞炴�х殑淇℃伅
+     */
+    List<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByTemplateOids(Collection<String> templateOidCollection);
+
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateButtonServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateButtonServiceI.java
new file mode 100644
index 0000000..7d1db22
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateButtonServiceI.java
@@ -0,0 +1,133 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.mdm.model.CodeClassifyTemplateButtonDO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateButtonVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyTemplateButtonServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO>  codeClassifyTemplateButtonDOs) throws VciBaseException;
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勪俊鎭�
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOs, boolean hasButtonVO) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateButtonDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateButtonVO codeClassifyTemplateButtonDO2VO(CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateButtonVO addSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
+
+    /**
+     * 淇敼涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateButtonVO editSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult 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;
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid);
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
+     */
+    List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid);
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勬樉绀轰俊鎭�
+     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
+     */
+    List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid,boolean hasButtonVO);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateMapServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateMapServiceI.java
new file mode 100644
index 0000000..6897f16
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateMapServiceI.java
@@ -0,0 +1,100 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeClassifyTemplateMapDTO;
+import com.vci.mdm.model.CodeClassifyTemplateMapDO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateMapVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyTemplateMapServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyTemplateMapVO> gridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateMapDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateMapVO> codeClassifyTemplateMapDO2VOs(Collection<CodeClassifyTemplateMapDO>  codeClassifyTemplateMapDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateMapDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateMapVO codeClassifyTemplateMapDO2VO(CodeClassifyTemplateMapDO codeClassifyTemplateMapDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateMapVO addSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException;
+
+    /**
+     * 淇敼涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateMapVO editSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyTemplateMap(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyTemplateMapVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyTemplateMapVO> listCodeClassifyTemplateMapByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeClassifyTemplateMapVO> refDataGridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateServiceI.java
new file mode 100644
index 0000000..ef98847
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateServiceI.java
@@ -0,0 +1,200 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeClassifyTemplateDTO;
+import com.vci.mdm.model.CodeClassifyTemplateDO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyTemplateServiceI {
+    /**
+     * 鏌ヨ鍒嗙被妯℃澘瀵硅薄 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 鍒嗙被妯℃澘瀵硅薄 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject) throws VciBaseException;
+    /**
+      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+      *
+      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+      */
+    List<CodeClassifyTemplateDO> selectCodeClassifyTemplateDOByTree(TreeQueryObject treeQueryObject);
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO>  codeClassifyTemplateDOs) throws VciBaseException;
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasAttr 鏄惁鍖呭惈灞炴��
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO> codeClassifyTemplateDOs, boolean hasAttr) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateVO codeClassifyTemplateDO2VO(CodeClassifyTemplateDO codeClassifyTemplateDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    BaseResult<CodeClassifyTemplateVO> addSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    BaseResult editSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
+
+    /**
+     * 妫�鏌� 鍒嗙被妯℃澘瀵硅薄鏄惁鍒犻櫎
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s灞炴��
+     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult checkIsCanDelete(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
+
+    /**
+     * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+     *
+     * @param oid 涓婚敭
+     * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+     * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+     boolean checkChildIsLinked(String oid) throws VciBaseException;
+
+    /**
+      * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+      *
+      * @param oid 涓婚敭
+      * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+      * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+      */
+    boolean checkHasChild(String oid) throws VciBaseException;
+
+    /**
+     * 鍒犻櫎鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyTemplate(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄
+    * @param oid 涓婚敭
+    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyTemplateVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄(鍖呭惈灞炴�э級
+     * @param oid 涓婚敭
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyTemplateVO getObjectHasAttrByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被妯℃澘瀵硅薄
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyTemplateVO> listCodeClassifyTemplateByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException;
+
+    /**
+     * 鍒嗙被妯℃澘鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeClassifyTemplateVO> gridCodeClassifyTemplate(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鍚敤銆佸仠鐢�
+     * @param oid
+     * @param lcStatus
+     * @return
+     */
+    BaseResult updateLcStatus( String oid, String lcStatus);
+
+    /**
+     * 鍗囩増
+     */
+    BaseResult Upgrade(CodeClassifyTemplateDTO codeClassifyDTO);
+
+    /**
+     * 妯℃澘鍏嬮殕
+     */
+    BaseResult copyTemplate(CodeClassifyTemplateDTO codeClassifyDTO);
+
+    /**
+     * 浣跨敤涓婚搴撶殑鍒嗙被涓婚敭锛岃幏鍙栫敓鏁堢殑妯℃澘
+     * @param codeClassifyOid 涓婚搴撳垎绫讳富閿�
+     * @param hasAttribute 鏄惁鍖呭惈灞炴��
+     * @return 妯℃澘鐨勪俊鎭�
+     */
+    List<CodeClassifyTemplateVO> listReleaseTemplateByClassifyOid(String codeClassifyOid,boolean hasAttribute);
+
+    /**
+     * 鐢ㄦā鏉跨殑鐗堟湰鏉ユ帓搴�
+     * @param templateVOList 妯℃澘鐨勬樉绀哄璞�
+     * @return 鎺掑簭鍚庣殑鍒楄〃
+     */
+    List<CodeClassifyTemplateVO> sortTemplateByRevision(List<CodeClassifyTemplateVO> templateVOList);
+
+    /**
+     * 鏍¢獙瀛愬垎绫绘槸鍚︾浉鍚岀殑妯℃澘
+     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
+     * @return true琛ㄧず鐩稿悓
+     */
+    boolean checkChildHasSameTemplate(String codeClassifyOid);
+    /**
+     * 鑾峰彇鎵�鏈夊瓙鍒嗙被妯℃澘
+     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
+     * @return true琛ㄧず鐩稿悓
+     */
+    List<CodeClassifyTemplateVO> childTemplates(String codeClassifyOid);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyValueServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyValueServiceI.java
new file mode 100644
index 0000000..45916f7
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyValueServiceI.java
@@ -0,0 +1,152 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeClassifyValueDTO;
+import com.vci.mdm.model.CodeClassifyValueDO;
+import com.vci.mdm.pagemodel.CodeClassifyValueVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.Tree;
+import com.vci.starter.web.pagemodel.TreeQueryObject;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeClassifyValueServiceI {
+    /**
+     * 鏌ヨ鍒嗙被鐮佹鐨勭爜鍊� 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 鍒嗙被鐮佹鐨勭爜鍊� 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject) throws VciBaseException;
+    /**
+      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+      *
+      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+      */
+    List<CodeClassifyValueDO> selectCodeClassifyValueDOByTree(TreeQueryObject treeQueryObject);
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyValueDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeClassifyValueVO> codeClassifyValueDO2VOs(Collection<CodeClassifyValueDO>  codeClassifyValueDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyValueDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeClassifyValueVO codeClassifyValueDO2VO(CodeClassifyValueDO codeClassifyValueDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyValueVO addSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeClassifyValueVO editSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
+
+    /**
+     * 妫�鏌� 鍒嗙被鐮佹鐨勭爜鍊兼槸鍚﹀垹闄�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult checkIsCanDelete(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
+
+    /**
+     * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+     *
+     * @param oid 涓婚敭
+     * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+     * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+     boolean checkChildIsLinked(String oid) throws VciBaseException;
+
+    /**
+      * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+      *
+      * @param oid 涓婚敭
+      * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+      * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+      */
+    boolean checkHasChild(String oid) throws VciBaseException;
+
+    /**
+     * 鍒犻櫎鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeClassifyValue(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeClassifyValueVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeClassifyValueVO> listCodeClassifyValueByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鏍� 鍒嗙被鐮佹鐨勭爜鍊�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException;
+
+    /**
+     * 浣跨敤鐮佹鐨勪富閿幏鍙栧垎绫荤殑鐮佸�煎唴瀹�
+     * @param classifySecOid 鐮佹鐨勪富閿�
+     * @param parentClassifyValueOid 涓婄骇鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鐮佸�肩殑鍐呭
+     */
+    List<CodeClassifyValueVO> listCodeClassifyValueBySecOid(String classifySecOid, String parentClassifyValueOid);
+
+    /**
+     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
+     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult batchDeleteBySecOid(String codeclassifysecoid);
+
+    /**
+     * 鎵归噺娣诲姞鍒嗙被鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+     * @param dtoList 鍒嗙被鐮佹鐨勭爜鍊煎垪琛�
+     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult batchSave4Order(List<CodeClassifyValueDTO> dtoList, String codeclassifysecoid);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingServiceI.java
new file mode 100644
index 0000000..0a8f35b
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingServiceI.java
@@ -0,0 +1,89 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.model.*;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.Map;
+
+/**
+ * 涓�銆侀厤缃垎绫汇�佺郴缁熴�佹帴鍙f暟鎹�
+ * 1銆侀厤缃郴缁烻ysIntBaseDO
+ * 2銆侀厤缃郴缁熴�佹帴鍙c�佸垎绫籗ysIntInfoDO
+ *
+ * 浜屻�佸鐞嗛鐢宠鏁版嵁
+ * 1銆佹帴鏀秞mlData
+ * 2銆佸伐鑹虹郴缁熺壒娈婂鐞嗭紝鏍规嵁unique鏌ヨ缂栫爜锛屾湁宸茬粡鍙戝竷鐨勬暟鎹紝鐩存帴杩斿洖缂栫爜銆傛病鏈夋煡璇㈠埌宸茬粡鍙戝竷鐨勭紪鐮侊紙缂栬緫涓�佹彁浜や腑銆佸鏍镐腑銆佸仠鐢ㄧ瓑锛夊拰涓�鑸郴缁熶竴鏍锋寜鐓х3姝ュ鐞�
+ * 3銆佽В鏋恱mlData閲屾瘡涓�涓猟ata鑺傜偣锛屽瓨鍌ㄥ叆DockingPreApplyDataDO锛宒ata鑺傜偣涓媝ros鑺傜偣瀛樺偍鍏ockingPreApplyDataInfoDO
+ * 4銆佽繑鍥瀤mlData锛岄噷杈规爣璇嗕簡姣忎竴涓猟ata鐨勫鐞嗙粨鏋�
+ *
+ * 涓夈�佹牴鎹鐢宠鏁版嵁锛屾彃鍏ヤ富鏁版嵁
+ * 1銆佸叧鑱斿垎绫�
+ * 2銆佹煡璇㈠嚭DockingPreApplyDataInfoDO瀛樺偍鐨勬暟鎹紝鎸夌収鏁版嵁鏄犲皠xml锛岃浆鎹负鎴戜滑鐨刱ey锛岃繑缁欏墠绔嚜鍔ㄥ~鍏呭埌鏂板鏁版嵁鐨勯〉闈�
+ * 3銆佽皟鐢ㄩ�氱敤鐨勬暟鎹柊澧炴帴鍙d繚瀛樻暟鎹紝杩欎竴姝ュ拰涓绘暟鎹鐞嗘ā鍧楀姛鑳戒竴鏍�
+ *
+ * 鍥涖�佹帹閫佹暟鎹�
+ * 1銆佸垎绫绘暟鎹拰涓绘暟鎹湁鍙樺寲鐨勬椂鍊欙紝鏁版嵁搴撹Е鍙戝櫒(TIG_CODEALLCODE_FORDOCKINGDATA,TIG_codeclsify_FORDOCKINGDATA)鑷姩鎻掑叆dockingdata
+ * 2銆丏ockingScheduling鎵ц鏃讹紝鏌ヨdockingdatasendflag=false鐨勬暟鎹紝缁撳悎鏌ヨsysintinfo鏁版嵁锛屾煡璇ockingtask
+ * 3銆乨ockingtask涓彇鍑烘潵鏁版嵁锛屾牴鎹産tmname鍜屾暟鎹畂id鏌ヨ鍑烘潵瑕佹帹閫佺殑鏁版嵁锛屾煡璇ysIntInfoDO锛屾牴鎹竴銆�2銆佷腑閰嶇疆鐨勪俊鎭紝鎵ц鎺ㄩ��
+ *
+ * @author wangyi
+ * @date 2022-03-20
+ */
+public interface CodeDuckingServiceI {
+
+    /**
+     * 浜屻��1銆�2銆�3銆�4銆�
+     * 澶勭悊棰勭敵璇锋暟鎹�
+     * @param xmlDatas
+     * @return 鎺ユ敹鐨剎mlDate
+     */
+    String applicateCode(String xmlDatas);
+
+    /**
+     * 鍥涖��2銆�
+     * 鏌ヨredis涓暟鎹紝瀵规瘮鍚庢彃鍏ockingtask
+     */
+    void insertCache2();
+
+    /**
+     * 鍥涖��1銆�2銆�3銆�
+     */
+    void sendData3();
+
+    /**
+     * 瀹氭椂浠诲姟璋冪敤
+     */
+    void DockingScheduing();
+
+    /**
+     * 鏁版嵁鍒犻櫎鐨勬椂鍊欙紝缂撳瓨鍒皉edis
+     * @param oid
+     */
+    void cacheDeleteData(String oid,Object obj);
+
+    /**
+     * 鏌ヨdata鍒楄〃
+     */
+    DataGrid<DockingDataDO> gridData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鏌ヨtask鍒楄〃
+     */
+    DataGrid<DockingTaskDO> gridTask(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鏌ヨ闆嗘垚log鍒楄〃
+     */
+    DataGrid<DockingLogeDO> gridLoge(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鏌ヨ闆嗘垚鎺ュ彛param鍒楄〃
+     */
+    DataGrid<SysIntHeaderDO> gridHeader(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingSyncServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingSyncServiceI.java
new file mode 100644
index 0000000..a18196e
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingSyncServiceI.java
@@ -0,0 +1,48 @@
+package org.springblade.code.service;
+
+
+import com.vci.starter.web.pagemodel.BaseResult;
+
+/**
+ * 涓�銆侀厤缃垎绫汇�佺郴缁熴�佹帴鍙f暟鎹�
+ * 1銆侀厤缃郴缁烻ysIntBaseDO
+ * 2銆侀厤缃郴缁熴�佹帴鍙c�佸垎绫籗ysIntInfoDO
+ *
+ * 浜屻�佸鐞嗛鐢宠鏁版嵁
+ * 1銆佹帴鏀秞mlData
+ * 2銆佸伐鑹虹郴缁熺壒娈婂鐞嗭紝鏍规嵁unique鏌ヨ缂栫爜锛屾湁宸茬粡鍙戝竷鐨勬暟鎹紝鐩存帴杩斿洖缂栫爜銆傛病鏈夋煡璇㈠埌宸茬粡鍙戝竷鐨勭紪鐮侊紙缂栬緫涓�佹彁浜や腑銆佸鏍镐腑銆佸仠鐢ㄧ瓑锛夊拰涓�鑸郴缁熶竴鏍锋寜鐓х3姝ュ鐞�
+ * 3銆佽В鏋恱mlData閲屾瘡涓�涓猟ata鑺傜偣锛屽瓨鍌ㄥ叆DockingPreApplyDataDO锛宒ata鑺傜偣涓媝ros鑺傜偣瀛樺偍鍏ockingPreApplyDataInfoDO
+ * 4銆佽繑鍥瀤mlData锛岄噷杈规爣璇嗕簡姣忎竴涓猟ata鐨勫鐞嗙粨鏋�
+ *
+ * 涓夈�佹牴鎹鐢宠鏁版嵁锛屾彃鍏ヤ富鏁版嵁
+ * 1銆佸叧鑱斿垎绫�
+ * 2銆佹煡璇㈠嚭DockingPreApplyDataInfoDO瀛樺偍鐨勬暟鎹紝鎸夌収鏁版嵁鏄犲皠xml锛岃浆鎹负鎴戜滑鐨刱ey锛岃繑缁欏墠绔嚜鍔ㄥ~鍏呭埌鏂板鏁版嵁鐨勯〉闈�
+ * 3銆佽皟鐢ㄩ�氱敤鐨勬暟鎹柊澧炴帴鍙d繚瀛樻暟鎹紝杩欎竴姝ュ拰涓绘暟鎹鐞嗘ā鍧楀姛鑳戒竴鏍�
+ *
+ * 鍥涖�佹帹閫佹暟鎹�
+ * 1銆佸垎绫绘暟鎹拰涓绘暟鎹湁鍙樺寲鐨勬椂鍊欙紝鏁版嵁搴撹Е鍙戝櫒(TIG_CODEALLCODE_FORDOCKINGDATA,TIG_codeclsify_FORDOCKINGDATA)鑷姩鎻掑叆dockingdata
+ * 2銆丏ockingScheduling鎵ц鏃讹紝鏌ヨdockingdatasendflag=false鐨勬暟鎹紝缁撳悎鏌ヨsysintinfo鏁版嵁锛屾煡璇ockingtask
+ * 3銆乨ockingtask涓彇鍑烘潵鏁版嵁锛屾牴鎹産tmname鍜屾暟鎹畂id鏌ヨ鍑烘潵瑕佹帹閫佺殑鏁版嵁锛屾煡璇ysIntInfoDO锛屾牴鎹竴銆�2銆佷腑閰嶇疆鐨勪俊鎭紝鎵ц鎺ㄩ��
+ *
+ * @author wangyi
+ * @date 2022-03-20
+ */
+public interface CodeDuckingSyncServiceI {
+
+    /**
+     * 鏁版嵁瀹氭椂浠诲姟璋冪敤
+     */
+    void DockingDataSyncScheduing();
+
+    /**
+     * 鏁版嵁瀹氭椂浠诲姟璋冪敤
+     */
+    void DockingClassSyncScheduing();
+
+    /**
+     * 鎺ㄩ�佹湭瀹屾垚鐨勯泦鎴愭暟鎹�
+     * @return
+     */
+    BaseResult sendData(String oids);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeFixedValueServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeFixedValueServiceI.java
new file mode 100644
index 0000000..fb50094
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeFixedValueServiceI.java
@@ -0,0 +1,124 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeFixedValueDTO;
+import com.vci.mdm.model.CodeFixedValueDO;
+import com.vci.mdm.pagemodel.CodeFixedValueVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeFixedValueServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍥哄畾鐮佹鐨勭爜鍊�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeFixedValueVO> gridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeFixedValueDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeFixedValueVO> codeFixedValueDO2VOs(Collection<CodeFixedValueDO>  codeFixedValueDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeFixedValueDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeFixedValueVO codeFixedValueDO2VO(CodeFixedValueDO codeFixedValueDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeFixedValueVO addSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeFixedValueVO editSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult 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 conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeFixedValueVO> refDataGridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 浣跨敤鐮佹鐨勪富閿幏鍙栧浐瀹氱爜鐨勭爜鍊�
+     * @param secOidCollection 鐮佹鐨勪富閿�
+     * @return 鐮佸�兼樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鐨勬椂鍊欏嚭鐜颁簡閿欒浼氭姏鍑哄紓甯�
+     */
+    Map<String,List<CodeFixedValueVO>> listCodeFixedValueBySecOids(Collection<String> secOidCollection) throws VciBaseException;
+
+    /**
+     * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+     * @param dtoList 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult<CodeFixedValueVO> batchSave4Order(List<CodeFixedValueDTO> dtoList, String codefixedsecoid);
+
+    /**
+     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
+     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult<CodeFixedValueVO> batchDeleteBySecOid(String codefixedsecoid);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeKeyAttrRepeatRuleServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeKeyAttrRepeatRuleServiceI.java
new file mode 100644
index 0000000..895cc68
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeKeyAttrRepeatRuleServiceI.java
@@ -0,0 +1,115 @@
+package org.springblade.code.service;
+
+
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import org.springblade.code.bo.CodeClassifyFullInfoBO;
+import org.springblade.code.dto.CodeKeyAttrRepeatRuleDTO;
+import org.springblade.code.model.CodeKeyAttrRepeatRuleDO;
+import org.springblade.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeKeyAttrRepeatRuleServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeKeyAttrRepeatRuleVO> gridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeKeyAttrRepeatRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeKeyAttrRepeatRuleVO> codeKeyAttrRepeatRuleDO2VOs(Collection<CodeKeyAttrRepeatRuleDO>  codeKeyAttrRepeatRuleDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeKeyAttrRepeatRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleDO2VO(CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeKeyAttrRepeatRuleVO addSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeKeyAttrRepeatRuleVO editSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeKeyAttrRepeatRule(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeKeyAttrRepeatRuleVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByOids(Collection<String> oidCollections) throws VciBaseException;
+
+    /**
+     * 缂栧彿鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param idCollections 缂栧彿闆嗗悎
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+     */
+    Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByIds(List<String> idCollections);
+
+    /**
+     * 鍙傜収鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeKeyAttrRepeatRuleVO> refDataGridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 浣跨敤鍒嗙被鐨勫叏閮ㄤ俊鎭潵鑾峰彇鍏抽敭灞炴�у垽鏂鍒欑殑鍐呭
+     * @param classifyFullInfo 涓婚搴撳垎绫荤殑鍏ㄩ儴淇℃伅
+     * @return 瑙勫垯鐨勬樉绀哄璞�
+     */
+    CodeKeyAttrRepeatRuleVO getRuleByClassifyFullInfo(CodeClassifyFullInfoBO classifyFullInfo);
+
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodePhaseAttrServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodePhaseAttrServiceI.java
new file mode 100644
index 0000000..9804fa9
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodePhaseAttrServiceI.java
@@ -0,0 +1,107 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodePhaseAttrDTO;
+import com.vci.mdm.model.CodePhaseAttrDO;
+import com.vci.mdm.pagemodel.CodePhaseAttrVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 闃舵鐨勫睘鎬ф湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodePhaseAttrServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑闃舵鐨勫睘鎬�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodePhaseAttrVO> gridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codePhaseAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodePhaseAttrVO> codePhaseAttrDO2VOs(Collection<CodePhaseAttrDO>  codePhaseAttrDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codePhaseAttrDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodePhaseAttrVO codePhaseAttrDO2VO(CodePhaseAttrDO codePhaseAttrDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodePhaseAttrVO addSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException;
+
+    /**
+     * 淇敼闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodePhaseAttrVO editSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodePhaseAttr(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇闃舵鐨勫睘鎬�
+    * @param oid 涓婚敭
+    * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodePhaseAttrVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇闃舵鐨勫睘鎬�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodePhaseAttrVO> listCodePhaseAttrByOids(Collection<String> oidCollections) throws VciBaseException;
+
+    /**
+     * 鍙傜収闃舵鐨勫睘鎬у垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodePhaseAttrVO> refDataGridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鍜岄樁娈电紪鍙疯幏鍙栧寘鍚殑灞炴��
+     * @param templateOid 妯℃澘鐨勭紪鍙�
+     * @param phaseId 闃舵鐨勭紪鍙�
+     * @return 灞炴�х殑鑻辨枃鍚嶇О
+     */
+    List<String> listAttrByTemplateOidAndPhaseId(String templateOid, String phaseId);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeResembleRuleServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeResembleRuleServiceI.java
new file mode 100644
index 0000000..f0cce62
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeResembleRuleServiceI.java
@@ -0,0 +1,101 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeResembleRuleDTO;
+import com.vci.mdm.model.CodeResembleRuleDO;
+import com.vci.mdm.pagemodel.CodeResembleRuleVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-04-10
+ */
+public interface CodeResembleRuleServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鐩镐技鏌ヨ瑙勫垯
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeResembleRuleVO> gridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeResembleRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeResembleRuleVO> codeResembleRuleDO2VOs(Collection<CodeResembleRuleDO>  codeResembleRuleDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeResembleRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeResembleRuleVO codeResembleRuleDO2VO(CodeResembleRuleDO codeResembleRuleDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeResembleRuleVO addSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeResembleRuleVO editSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeResembleRule(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鐩镐技鏌ヨ瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeResembleRuleVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐩镐技鏌ヨ瑙勫垯
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeResembleRuleVO> listCodeResembleRuleByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鐩镐技鏌ヨ瑙勫垯鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeRuleServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeRuleServiceI.java
new file mode 100644
index 0000000..9ef1275
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeRuleServiceI.java
@@ -0,0 +1,175 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeRuleDTO;
+import com.vci.mdm.model.CodeRuleDO;
+import com.vci.mdm.pagemodel.CodeClassifyVO;
+import com.vci.mdm.pagemodel.CodeRuleVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeRuleServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹紪鐮佽鍒�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeRuleVO> gridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO>  codeRuleDOs) throws VciBaseException;
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasSec 鏄惁鍖呭惈鐮佹
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO> codeRuleDOs, boolean hasSec) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeRuleVO codeRuleDO2VO(CodeRuleDO codeRuleDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeRuleVO addSave(CodeRuleDTO codeRuleDTO) throws VciBaseException;
+
+    /**
+     * 淇敼涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeRuleVO editSave(CodeRuleDTO codeRuleDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎涓绘暟鎹紪鐮佽鍒�
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeRule(CodeRuleDTO codeRuleDTO) throws VciBaseException;
+
+    /**
+     * 鏍¢獙缂栫爜瑙勫垯鐨勭姸鎬佹槸鍚﹀彲浠ョ紪杈戞垨鍒犻櫎
+     * @param lcStatus 缂栫爜瑙勫垯
+     * @return true琛ㄧず鍙互缂栬緫鎴栧垹闄わ紝false琛ㄧず涓嶅彲浠�
+     */
+    boolean checkEditDelStatus(String lcStatus);
+
+    /**
+    * 涓婚敭鑾峰彇涓绘暟鎹紪鐮佽鍒�
+    * @param oid 涓婚敭
+    * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeRuleVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @param hasSec 鏄惁鍖呭惈鐮佹
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections,boolean hasSec) throws VciBaseException;
+
+    /**
+     * 浣跨敤缂栧彿鐨勯泦鍚堣幏鍙栬鍒欑殑鍐呭
+     * @param idCollection 缂栧彿鐨勯泦鍚�
+     * @return 瑙勫垯鐨勫唴瀹�
+     */
+    List<CodeRuleVO> listCodeRuleByIds(Collection<String> idCollection);
+
+    /**
+     * 鍙傜収涓绘暟鎹紪鐮佽鍒欏垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeRuleVO> refDataGridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鏌ョ湅涓绘暟鎹紪鐮佽鍒欑殑浣跨敤鑼冨洿
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return 涓婚搴撳垎绫讳娇鐢ㄥ埌璇ョ紪鐮佽鍒欑殑鎵�鏈夐泦鍚�
+     */
+    Collection<CodeClassifyVO> listUseRangeInCodeClassify(String oid);
+
+    /**
+     * 妫�楠岀紪鐮佽鍒欐槸鍚﹀凡缁忚浣跨敤
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return true琛ㄧず宸茬粡浣跨敤锛宖alse琛ㄧず鏈浣跨敤
+     */
+    boolean isAlreadyInUse(String oid);
+
+    /**
+     * 鍋滅敤涓庡惎鐢ㄧ紪鐮佽鍒�
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @param update enable:鍚敤 disable:鍋滅敤 release:鍙戝竷
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult updateStatus(String oid, String update);
+
+    /**
+     * 鍏嬮殕缂栫爜瑙勫垯
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     */
+    BaseResult cloneCodeRule(CodeRuleDTO codeRuleDTO);
+
+    /**
+     * 浣跨敤涓婚敭鑾峰彇缂栫爜瑙勫垯鐨勫唴瀹�
+     * @param oid 涓婚敭
+     * @return 瑙勫垯鐨勬樉绀哄璞�
+     */
+    CodeRuleVO getObjectHasSecByOid(String oid);
+
+    /**
+     * 缂栫爜瑙勫垯娓呯┖鎵�鏈夊凡鐢熸垚鐨勭紪鐮�
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult clearAllCode(String oid);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSerialAlgorithmServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSerialAlgorithmServiceI.java
new file mode 100644
index 0000000..367212b
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSerialAlgorithmServiceI.java
@@ -0,0 +1,18 @@
+package org.springblade.code.service;
+
+import com.vci.mdm.pagemodel.CodeSerialAlgorithmVO;
+import com.vci.starter.web.pagemodel.DataGrid;
+
+/**
+ * 娴佹按绠楁硶绫�
+ * @author weidy
+ * @date 2022-2-17
+ */
+public interface CodeSerialAlgorithmServiceI {
+
+    /**
+     * 鑾峰彇娴佹按绠楁硶鐨勫垪琛�
+     * @return 娴佹按绠楁硶鐨勪俊鎭�
+     */
+    DataGrid<CodeSerialAlgorithmVO> gridSerialAlgorithm();
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSynonymServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSynonymServiceI.java
new file mode 100644
index 0000000..1561bc7
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSynonymServiceI.java
@@ -0,0 +1,101 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeSynonymDTO;
+import com.vci.mdm.model.CodeSynonymDO;
+import com.vci.mdm.pagemodel.CodeSynonymVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍚屼箟璇嶉厤缃湇鍔℃帴鍙�
+ *
+ * @author weidy
+ * @date 2022-02-17
+ */
+public interface CodeSynonymServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍚屼箟璇嶉厤缃�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeSynonymVO> gridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeSynonymDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeSynonymVO> codeSynonymDO2VOs(Collection<CodeSynonymDO>  codeSynonymDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeSynonymDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeSynonymVO codeSynonymDO2VO(CodeSynonymDO codeSynonymDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeSynonymVO addSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException;
+
+    /**
+     * 淇敼鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    CodeSynonymVO editSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeSynonym(CodeSynonymDTO codeSynonymDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇鍚屼箟璇嶉厤缃�
+    * @param oid 涓婚敭
+    * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    CodeSynonymVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍚屼箟璇嶉厤缃�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<CodeSynonymVO> listCodeSynonymByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収鍚屼箟璇嶉厤缃垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<CodeSynonymVO> refDataGridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeTemplatePhaseServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeTemplatePhaseServiceI.java
new file mode 100644
index 0000000..8b67b67
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeTemplatePhaseServiceI.java
@@ -0,0 +1,138 @@
+package org.springblade.code.service;
+
+
+import com.vci.mdm.dto.CodeTemplatePhaseDTO;
+import com.vci.mdm.model.CodeClassifyTemplateAttrDO;
+import com.vci.mdm.model.CodeTemplatePhaseDO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.mdm.pagemodel.CodeTemplatePhaseVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.web.pageModel.BatchCBO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 妯℃澘闃舵鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+public interface CodeTemplatePhaseServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑妯℃澘闃舵
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeTemplatePhaseDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhaseDO>  codeTemplatePhaseDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeTemplatePhaseDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    CodeTemplatePhaseVO codeTemplatePhaseDO2VO(CodeTemplatePhaseDO 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 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteCodeTemplatePhase(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
+
+    /**
+     * 妯℃澘淇敼瑙﹀彂鍔熻兘
+     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    BatchCBO codeTemplateAttrModifyTrigger(List<CodeClassifyTemplateAttrDO> attrDOList);
+
+    /**
+     * 妯℃澘灞炴�у垹闄ょ殑鏃跺�欒Е鍙�
+     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    BatchCBO codeTemplateAttrDeleteTrigger(List<CodeClassifyTemplateAttrDO> attrDOList);
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid);
+
+    /**
+    * 涓婚敭鑾峰彇妯℃澘闃舵
+    * @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);
+
+    /**
+     * 闃舵鍖呭惈鐨勫睘鎬�
+     * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
+     * @param pageHelper 鍒嗛〉瀵硅薄
+     * @return 灞炴�х殑淇℃伅
+     */
+    DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeBasicSecServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeBasicSecServiceImpl.java
new file mode 100644
index 0000000..07fe3f7
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeBasicSecServiceImpl.java
@@ -0,0 +1,831 @@
+package org.springblade.code.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.mdm.constant.MdmBtmTypeConstant;
+import com.vci.mdm.dao.CodeBasicSecDaoI;
+import com.vci.mdm.dao.CodeClassifyValueDaoI;
+import com.vci.mdm.dao.CodeFixedValueDaoI;
+import com.vci.mdm.dto.CodeBasicSecDTO;
+import com.vci.mdm.enumpack.CodeSecTypeEnum;
+import com.vci.mdm.lifecycle.CodeRuleLC;
+import com.vci.mdm.model.CodeBasicSecDO;
+import com.vci.mdm.model.CodeClassifyValueDO;
+import com.vci.mdm.model.CodeFixedValueDO;
+import com.vci.mdm.pagemodel.CodeBasicSecVO;
+import com.vci.mdm.pagemodel.CodeClassifyValueVO;
+import com.vci.mdm.pagemodel.CodeFixedValueVO;
+import com.vci.mdm.pagemodel.CodeRuleVO;
+import com.vci.mdm.service.*;
+import com.vci.starter.revision.bo.TreeWrapperOptions;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciParentQueryOption;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.enumpck.OsCodeFillTypeEnum;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.pageModel.KeyValue;
+import com.vci.web.pageModel.UIFormReferVO;
+import com.vci.web.service.BdSelectInputCharServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鐮佹鍩虹淇℃伅鏈嶅姟
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeBasicSecServiceImpl implements CodeBasicSecServiceI {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeBasicSecDaoI codeBasicSecMapper;
+
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+     * 瀵硅薄鐨勬搷浣�
+     */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 涓绘暟鎹紪鐮佽鍒欐湇鍔�
+     */
+    @Autowired
+    private CodeRuleServiceI codeRuleService;
+
+    /**
+     * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔�
+     */
+    @Autowired
+    private CodeClassifyValueServiceI codeClassifyValueService;
+
+    /**
+     * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
+     */
+    @Autowired
+    private CodeClassifyValueDaoI codeClassifyValueMapper;
+
+    /**
+     * 鍥哄畾鐮佹鐨勭爜鍊肩殑鏈嶅姟
+     */
+    @Autowired
+    private CodeFixedValueServiceI fixedValueService;
+
+    /**
+     * 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹搷浣滃眰
+     */
+    @Autowired
+    private CodeFixedValueDaoI fixedValueMapper;
+    /**
+     * 涓婂眰鍒嗙被鐮佹鐨勫睘鎬у悕绉�
+     */
+    private static  final String PARENT_FIELD_NAME = "parentclassifysecoid";
+
+    /**
+     * 涓婄骇鍒嗙被鐮佸�肩殑灞炴�у悕绉�
+     */
+    private static final String PARENT_CLASSIFY_VALUE_FIELD_NAME = "parentClassifyValueOid";
+
+    /**
+     * 鍙�夊彲杈撴湇鍔�
+     */
+    @Autowired
+    private BdSelectInputCharServiceI charService;
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鐮佹鍩虹淇℃伅
+     *
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeBasicSecVO> gridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultAsc("ordernum");
+        if(!conditionMap.containsKey("pkCodeRule") || StringUtils.isBlank(conditionMap.get("pkCodeRule"))){
+            return new DataGrid<>();
+        }
+        List<CodeBasicSecDO> doList = codeBasicSecMapper.selectByCondition(conditionMap, pageHelper);
+        DataGrid<CodeBasicSecVO> dataGrid = new DataGrid<CodeBasicSecVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeBasicSecDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeBasicSecMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO> codeBasicSecDOs) throws VciBaseException {
+        List<CodeBasicSecVO> voList = new ArrayList<CodeBasicSecVO>();
+        if (!CollectionUtils.isEmpty(codeBasicSecDOs)) {
+            for (CodeBasicSecDO s : codeBasicSecDOs) {
+                CodeBasicSecVO vo = codeBasicSecDO2VO(s);
+                if (vo != null) {
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeBasicSecDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasFixedValue 鏄惁鏈夊浐瀹氬��
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSecDO> codeBasicSecDOs, boolean hasFixedValue) throws VciBaseException {
+        List<CodeBasicSecVO> voList = new ArrayList<CodeBasicSecVO>();
+        if (!CollectionUtils.isEmpty(codeBasicSecDOs)) {
+            for (CodeBasicSecDO s : codeBasicSecDOs) {
+                CodeBasicSecVO vo = codeBasicSecDO2VO(s);
+                if (vo != null) {
+                    voList.add(vo);
+                }
+            }
+        }
+        if(hasFixedValue && !CollectionUtils.isEmpty(voList)){
+            List<CodeBasicSecVO> fixedSecVOList = voList.stream().filter(s -> CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equalsIgnoreCase(s.getSectype())).collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(fixedSecVOList)){
+                //鏌ヨ鍥哄畾鐮佺殑鐮佸��
+                Map<String, List<CodeFixedValueVO>> secValueMap = fixedValueService.listCodeFixedValueBySecOids(fixedSecVOList.stream().map(CodeBasicSecVO::getOid).collect(Collectors.toList()));
+                voList.stream().forEach(vo->{
+                    vo.setFixedValueVOList(secValueMap.getOrDefault(vo.getOid(),null));
+                });
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeBasicSecDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeBasicSecVO codeBasicSecDO2VO(CodeBasicSecDO codeBasicSecDO) throws VciBaseException {
+        CodeBasicSecVO vo = new CodeBasicSecVO();
+        if (codeBasicSecDO != null) {
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDO, vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            if (true) {
+                //vo.setLcStatusText({lcStatusFullClassName}.getTextByValue(vo.getLcStatus()));
+            }
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鐮佹鍩虹淇℃伅
+     *
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeBasicSecVO addSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeBasicSecDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeBasicSecDTO.getPkCodeRule(),"缂栫爜瑙勫垯鐨勪富閿�");
+        CodeRuleVO ruleVO = codeRuleService.getObjectByOid(codeBasicSecDTO.getPkCodeRule());
+        if(!CodeRuleLC.EDITING.getValue().equalsIgnoreCase(ruleVO.getLcStatus())){
+            throw new VciBaseException("缂栫爜瑙勫垯鐨勭姸鎬佷笉鏄��" + CodeRuleLC.EDITING.getText() + "銆戯紒涓嶅厑璁镐慨鏀�");
+        }
+        KeyValue attrKv = checkAttrNullableBySecType(codeBasicSecDTO);
+        if (! "success".equals(attrKv.getKey())){
+            throw new VciBaseException(attrKv.getValue() + "涓嶈兘涓虹┖");
+        }
+
+
+
+        //灏咲TO杞崲涓篋O
+        CodeBasicSecDO codeBasicSecDO = new CodeBasicSecDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDTO, codeBasicSecDO);
+        //鎺掑簭鍙凤紝榛樿绛変簬褰撳墠宸叉湁鐨勬暟閲忓姞1
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("pkCodeRule",ruleVO.getOid());
+        Long total = codeBasicSecMapper.countByCondition(conditionMap);
+        if(total == null){
+            total = 0L;
+        }
+        codeBasicSecDO.setOrderNum(total.intValue() + 1);
+
+        //琛ヤ綅鐨勬椂鍊欙紝瑕佹帶鍒惰ˉ浣嶅瓧绗�
+        if((OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType())
+         || OsCodeFillTypeEnum.RIGHT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType()))
+                && StringUtils.isBlank(codeBasicSecDO.getCodeFillSeparator())){
+            throw new VciBaseException("褰撹ˉ浣嶆柟寮忎负宸﹁ˉ浣嶆垨鑰呭彸琛ヤ綅鐨勬椂鍊欙紝琛ヤ綅瀛楃涓嶈兘涓虹┖");
+        }
+        //寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸垽鏂弬鐓х殑淇℃伅鏄惁姝g‘
+        if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){
+            if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){
+                throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸~鍐� 鍙傜収閰嶇疆 鐨勫唴瀹�");
+            }
+            try{
+                JSONObject.parseObject(codeBasicSecDO.getReferConfig(), UIFormReferVO.class);
+            }catch (Throwable e){
+                throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝鍙傜収閰嶇疆鐨勫唴瀹圭殑鏍煎紡涓嶆纭�,",new String[0],e);
+            }
+        }
+        codeBasicSecMapper.insert(codeBasicSecDO);
+        SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+        if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
+            charService.save(MdmBtmTypeConstant.CODE_BASIC_SEC,"codefileseparator",codeBasicSecDO.getCodeFillSeparator(),sessionInfo);
+        }
+        return codeBasicSecDO2VO(codeBasicSecDO);
+    }
+
+    /**
+     * 淇敼鐮佹鍩虹淇℃伅
+     *
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeBasicSecVO editSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeBasicSecDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        KeyValue attrKv = checkAttrNullableBySecType(codeBasicSecDTO);
+        if (! "success".equals(attrKv.getKey())){
+            throw new VciBaseException(attrKv.getValue() + "涓嶈兘涓虹┖");
+        }
+        //灏咲TO杞崲涓篋O
+        CodeBasicSecDO codeBasicSecDO = selectByOid(codeBasicSecDTO.getOid());
+        boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecDO.getPkCodeRule()).getLcStatus());
+        if (!status){
+            //杩斿洖閿欒淇℃伅
+            throw new VciBaseException("缂栫爜瑙勫垯涓嶅厑璁哥紪杈戞垨鍒犻櫎锛�");
+        } else {
+            //琛ヤ綅鐨勬椂鍊欙紝瑕佹帶鍒惰ˉ浣嶅瓧绗�
+            if((OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType())
+                    || OsCodeFillTypeEnum.RIGHT.getValue().equalsIgnoreCase(codeBasicSecDO.getCodeFillType()))
+                    && StringUtils.isBlank(codeBasicSecDO.getCodeFillSeparator())){
+                throw new VciBaseException("褰撹ˉ浣嶆柟寮忎负宸﹁ˉ浣嶆垨鑰呭彸琛ヤ綅鐨勬椂鍊欙紝琛ヤ綅瀛楃涓嶈兘涓虹┖");
+            }
+            //寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸垽鏂弬鐓х殑淇℃伅鏄惁姝g‘
+            if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){
+                if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){
+                    throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝闇�瑕佸~鍐� 鍙傜収閰嶇疆 鐨勫唴瀹�");
+                }
+                try{
+                    JSONObject.parseObject(codeBasicSecDO.getReferConfig(), UIFormReferVO.class);
+                }catch (Throwable e){
+                    throw new VciBaseException("寮曠敤鐮佹鐨勬椂鍊欙紝鍙傜収閰嶇疆鐨勫唴瀹圭殑鏍煎紡涓嶆纭�,",new String[0],e);
+                }
+            }
+            revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);
+            codeBasicSecMapper.updateByPrimaryKey(codeBasicSecDO);
+            SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+            if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
+                charService.save(MdmBtmTypeConstant.CODE_BASIC_SEC,"codefileseparator",codeBasicSecDO.getCodeFillSeparator(),sessionInfo);
+            }
+        }
+        return codeBasicSecDO2VO(codeBasicSecDO);
+    }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     *
+     * @param codeBasicSecDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeBasicSecDO  鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeBasicSecDTO codeBasicSecDTO, CodeBasicSecDO codeBasicSecDO) {
+        boService.checkTs(codeBasicSecDTO);
+        if (!checkIsLinked(null, codeBasicSecDO.getOid())) {
+            return BaseResult.success();
+        } else {
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE, new String[]{""});
+        }
+    }
+
+    /**
+     * 鏍¢獙鏄惁琚紩鐢�
+     *
+     * @param codeRuleOid     缂栫爜瑙勫垯涓婚敭
+     * @param codeBasicSecOid 缂栫爜鍩虹淇℃伅涓婚敭
+     * @return true琛ㄧず宸茶寮曠敤锛宖alse琛ㄧず鏈寮曠敤
+     * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    private boolean checkIsLinked(String codeRuleOid, String codeBasicSecOid) throws VciBaseException {
+        boolean flag = true;
+        if (StringUtils.isNotBlank(codeRuleOid)) {
+            boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeRuleOid).getLcStatus());
+            if (!status){
+                return true;
+            }
+            boolean alreadyInUse = codeRuleService.isAlreadyInUse(codeRuleOid);
+            if (!alreadyInUse){
+               flag = false;
+            }
+        } else {
+            boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecMapper.selectByPrimaryKey(codeBasicSecOid).getPkCodeRule()).getLcStatus());
+            if (!status){
+                return true;
+            }
+            boolean alreadyInUse = codeRuleService.isAlreadyInUse(codeBasicSecMapper.selectByPrimaryKey(codeBasicSecOid).getPkCodeRule());
+            if (!alreadyInUse){
+                flag = false;
+            }
+        }
+        return flag;
+    }
+
+    /**
+     * 鍒犻櫎鐮佹鍩虹淇℃伅
+     *
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeBasicSec(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeBasicSecDTO, "鐮佹鍩虹淇℃伅鏁版嵁瀵硅薄", codeBasicSecDTO.getOid(), "鐮佹鍩虹淇℃伅鐨勪富閿�");
+        return deleteCodeBasicSecByPrimaryKey(codeBasicSecDTO.getOid());
+    }
+
+    /**
+     * 涓婚敭鍒犻櫎鐮佹鍩虹淇℃伅
+     *
+     * @param oid 鐮佹鍩虹淇℃伅涓婚敭
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeBasicSecByPrimaryKey(String oid) throws VciBaseException {
+        CodeBasicSecDO codeBasicSecDO = selectByOid(oid);
+        boolean isLinked = checkIsLinked(codeBasicSecDO.getPkCodeRule(), oid);
+        if (isLinked) {
+            return BaseResult.fail("缂栫爜瑙勫垯宸茶寮曠敤锛屼笉鍏佽缂栬緫鎴栧垹闄�");
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        //鎵ц鍒犻櫎鎿嶄綔
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = codeBasicSecMapper.deleteByPrimaryKey(oid);
+        Set<ClientBusinessObject> deleteSet = new HashSet<>();
+        deleteSet.addAll(batchCBO.getDeleteCbos());
+        if (CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equals(codeBasicSecDO.getSecType())){
+            conditionMap.put("codefixedsecoid",codeBasicSecDO.getOid());
+            VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeFixedValueDO.class);
+            List<CodeFixedValueDO> fixedValueDOS = fixedValueMapper.selectByWrapper(wrapper);
+            BatchCBO valueCBO = fixedValueMapper.batchDeleteByOids(fixedValueDOS.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toSet()));
+            deleteSet.addAll(valueCBO.getDeleteCbos());
+        }
+        if (CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue().equals(codeBasicSecDO.getSecType())){
+            conditionMap.put("codeclassifysecoid",codeBasicSecDO.getOid());
+            VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap, CodeClassifyValueDO.class);
+            List<CodeClassifyValueDO> classifyValueDOS = codeClassifyValueMapper.selectByWrapper(wrapper);
+            if(!CollectionUtils.isEmpty(classifyValueDOS)) {
+                BatchCBO valueCBO = codeClassifyValueMapper.batchDeleteByOids(classifyValueDOS.stream().map(CodeClassifyValueDO::getOid).collect(Collectors.toSet()));
+                deleteSet.addAll(valueCBO.getDeleteCbos());
+            }
+        }
+        batchCBO.setDeleteCbos(deleteSet);
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+        return (batchCBO != null && batchCBO.getDeleteCbos() != null && batchCBO.getDeleteCbos().size() > 0) ? BaseResult.successMsg(DELETE_SUCCESS) : BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+     * 涓婚敭鑾峰彇鐮佹鍩虹淇℃伅
+     *
+     * @param oid 涓婚敭
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeBasicSecVO getObjectByOid(String oid) throws VciBaseException {
+        return codeBasicSecDO2VO(selectByOid(oid));
+    }
+
+    /**
+     * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+     *
+     * @param oid 涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    private CodeBasicSecDO selectByOid(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid, "涓婚敭");
+        CodeBasicSecDO codeBasicSecDO = codeBasicSecMapper.selectByPrimaryKey(oid.trim());
+        if (codeBasicSecDO == null || StringUtils.isBlank(codeBasicSecDO.getOid())) {
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeBasicSecDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐮佹鍩虹淇℃伅
+     *
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeBasicSecVO> listCodeBasicSecByOids(Collection<String> oidCollections) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oidCollections, "鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeBasicSecDO> codeBasicSecDOList = listCodeBasicSecDOByOidCollections(oidCollections);
+        return codeBasicSecDO2VOs(codeBasicSecDOList);
+    }
+
+    /**
+     * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+     *
+     * @param oidCollections 涓婚敭鐨勯泦鍚�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    private List<CodeBasicSecDO> listCodeBasicSecDOByOidCollections(Collection<String> oidCollections) {
+        List<CodeBasicSecDO> codeBasicSecDOList = new ArrayList<CodeBasicSecDO>();
+        if (!CollectionUtils.isEmpty(oidCollections)) {
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for (Collection<String> oids : oidCollectionsList) {
+                List<CodeBasicSecDO> tempDOList = codeBasicSecMapper.selectByPrimaryKeyCollection(oids);
+                if (!CollectionUtils.isEmpty(tempDOList)) {
+                    codeBasicSecDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return codeBasicSecDOList;
+    }
+
+
+    /**
+     * 鍙傜収鐮佹鍩虹淇℃伅鍒楄〃
+     *
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉鍜屾帓搴�
+     * @return 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeBasicSecVO> refDataGridCodeBasicSec(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (conditionMap == null) {
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeBasicSec(conditionMap, pageHelper);
+    }
+
+    /**
+     * 鍏嬮殕鐮佹淇℃伅
+     *
+     * @param oidList 婧愮爜娈典俊鎭富閿泦鍚�
+     * @param pkCodeRule 鐩爣缂栫爜瑙勫垯
+     * @return 鍏嬮殕缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @Override
+    public BaseResult cloneCodeBasicSec(List<String> oidList, String pkCodeRule) {
+        boolean isLinked = checkIsLinked(pkCodeRule,null);
+        if (isLinked) {
+            return BaseResult.fail("缂栫爜瑙勫垯宸茶寮曠敤锛屼笉鍏佽缂栬緫鎴栧垹闄�");
+        }
+        List<CodeBasicSecDO> createList = new ArrayList<>();
+        List<CodeBasicSecDO> basicSecDOS = codeBasicSecMapper.selectByPrimaryKeyCollection(oidList);
+        basicSecDOS.forEach(sec -> {
+            CodeBasicSecDO newSecDO = new CodeBasicSecDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(sec,newSecDO);
+            newSecDO.setOid("");
+            newSecDO.setNameOid("");
+            newSecDO.setRevisionOid("");
+            newSecDO.setId(newSecDO.getId() + "_copy");
+            newSecDO.setName(newSecDO.getName() + "_copy");
+            newSecDO.setPkCodeRule(pkCodeRule);
+            createList.add(newSecDO);
+        });
+        codeBasicSecMapper.batchInsert(createList);
+        return BaseResult.success();
+    }
+
+    /**
+     * 鏍规嵁鐮佹鍒嗙被鐨勭被鍨嬪垽鏂睘鎬ф槸鍚︽槸绌虹殑
+     *
+     * @param codeBasicSecDTO 鐮佹鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鏈夌┖鐨勫垯浼爇ey-灞炴�у悕 value-瀛楁鍚箟锛屾病鏈夌┖鐨勫垯浼� key-success value-true
+     */
+    @Override
+    public KeyValue checkAttrNullableBySecType(CodeBasicSecDTO codeBasicSecDTO) {
+        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) {
+            throw new VciBaseException("鐮佹鍒嗙被濉啓鍑洪敊锛岃鏌ラ獙鍚庨噸璇�");
+        }
+        for (String key : notNullableAttr.keySet()) {
+            if (StringUtils.isBlank(WebUtil.getStringValueFromObject(attrMap.get(key)))) {
+                KeyValue kv = new KeyValue();
+                kv.setKey(key);
+                kv.setValue(notNullableAttr.get(key));
+                return kv;
+            }
+        }
+        KeyValue kv = new KeyValue();
+        kv.setKey("success");
+        kv.setValue("true");
+        return kv;
+    }
+
+    /**
+     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鍐呭
+     *
+     * @param ruleOid 瑙勫垯鐨勫唴瀹�
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    @Override
+    public List<CodeBasicSecVO> listCodeBasicSecByRuleOid(String ruleOid) {
+        if(StringUtils.isBlank(ruleOid)){
+            return new ArrayList<>();
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("pkCodeRule",ruleOid);
+        PageHelper pageHelper = new PageHelper(-1);
+        pageHelper.addDefaultAsc("ordernum");
+        List<CodeBasicSecDO> secDOList = codeBasicSecMapper.selectByCondition(conditionMap, pageHelper);
+        return codeBasicSecDO2VOs(secDOList,true);
+    }
+
+    /**
+     * 浣跨敤瑙勫垯鐨勪富閿幏鍙栧搴旂殑鐮佹鐨勫唴瀹�
+     *
+     * @param ruleCollection 瑙勫垯涓婚敭闆嗗悎
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    @Override
+    public List<CodeBasicSecVO> listCodeBasicSecByRuleOids(Collection<String> ruleCollection) {
+        if(CollectionUtils.isEmpty(ruleCollection)){
+            return new ArrayList<>();
+        }
+        List<CodeBasicSecDO> secDOList = new CopyOnWriteArrayList<>();
+        SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+        VciBaseUtil.switchCollectionForOracleIn(ruleCollection).parallelStream().forEach(ruleOids->{
+            WebUtil.setCurrentUserSessionInfo(sessionInfo);
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("pkcoderule", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(ruleOids.toArray(new String[0])) + ")");
+            PageHelper pageHelper = new PageHelper(-1);
+            pageHelper.addDefaultAsc("ordernum");
+            List<CodeBasicSecDO> tempSecDOs = codeBasicSecMapper.selectByCondition(conditionMap, pageHelper);
+            if(!CollectionUtils.isEmpty(tempSecDOs)){
+                secDOList.addAll(tempSecDOs);
+            }
+        });
+        return codeBasicSecDO2VOs(secDOList);
+    }
+
+    /**
+     * 鍙傜収鍒嗙被鐨勭爜娈�
+     *
+     * @param conditionMap 鏌ヨ鏉′欢锛屽繀椤昏鏈塸kCodeRule
+     * @param pageHelper   鍒嗛〉鐨勫璞�
+     * @return 鐮佹鐨勫唴瀹�
+     */
+    @Override
+    public DataGrid<CodeBasicSecVO> refDataGridClassifySec(Map<String, String> conditionMap, PageHelper pageHelper) {
+        if(CollectionUtils.isEmpty(conditionMap) || !conditionMap.containsKey("pkCodeRule")){
+            return new DataGrid<>();
+        }
+        conditionMap.put("secType",CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue());
+        return refDataGridCodeBasicSec(conditionMap,pageHelper);
+    }
+
+    /**
+     * 鏍规嵁鐮佹绫诲瀷鑾峰彇涓嶅彲涓虹┖鐨勫瓧娈�
+     *
+     * @param secType 鐮佹绫诲瀷
+     * @return 涓嶅彲涓虹┖鐨勫瓧娈甸泦鍚�
+     */
+    private Map<String, String> getNotNullableAttr(String secType) {
+        Map<String, String> attrMap = new HashMap<>();
+        if (CodeSecTypeEnum.CODE_ATTR_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "灞炴�х爜娈靛悕绉�");
+        } else if (CodeSecTypeEnum.CODE_DATE_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "鏃ユ湡鐮佹鍚嶇О");
+            attrMap.put("codeDateFormatStr", "鏃ユ湡鏍煎紡");
+        } else if (CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "鍥哄畾鐮佹鍚嶇О");
+            attrMap.put("codeSecLengthType", "鐮佹闀垮害绫诲瀷");
+            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
+        } else if (CodeSecTypeEnum.CODE_LEVEL_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "灞傜骇鐮佹鍚嶇О");
+            attrMap.put("codeLevelType", "灞傜骇绫诲瀷");
+            attrMap.put("valueCutType", "瀛楃鎴彇绫诲瀷");
+        } else if (CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "寮曠敤鐮佹鍚嶇О");
+        } else if (CodeSecTypeEnum.CODE_SERIAL_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "娴佹按鐮佹鍚嶇О");
+            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
+            attrMap.put("codeFillType", "缂栫爜琛ヤ綅鏂瑰紡");
+            attrMap.put("codeFillLength", "濉厖闀垮害");
+            attrMap.put("codeFillLimit", "娴佹按涓婇檺");
+            attrMap.put("codeFillFlag", "娴佹按鏄惁琛ョ爜");
+        } else if (CodeSecTypeEnum.CODE_VARIABLE_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "鍙彉鐮佹鍚嶇О");
+            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
+            attrMap.put("codeFillType", "缂栫爜琛ヤ綅鏂瑰紡");
+        } else if (CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue().equalsIgnoreCase(secType)) {
+            attrMap.put("name", "鍒嗙被鐮佹鍚嶇О");
+            attrMap.put("codeSecLengthType", "鐮佹闀垮害绫诲瀷");
+            attrMap.put("codeSecLength", "鐮佹鐨勯暱搴�");
+        } else {
+            attrMap = null;
+        }
+        return attrMap;
+    }
+
+    /**
+     * 鏌ヨ鐩爣鍒嗙被鐮佹鎵�鍦ㄧ殑鏍戠粨鏋�
+     *
+     * @param oid 鐩爣鍒嗙被鐮佹涓婚敭
+     * @return 鍒嗙被鐮佹鏍戠粨鏋�
+     */
+    @Override
+    public List<Tree> gridCodeClassifySecTree(String oid) {
+        VciParentQueryOption queryOption = new VciParentQueryOption(PARENT_FIELD_NAME);
+        queryOption.setfOid(oid);
+        queryOption.setLinkTypeFlag(false);
+        queryOption.setHasSelf(true);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(CodeBasicSecDO.class);
+        wrapper.childQueryParent(queryOption);
+        List<CodeBasicSecDO> doList = codeBasicSecMapper.selectByWrapper(wrapper);
+        List<String> secOid = new ArrayList<>();
+        doList.forEach(o -> secOid.add(o.getOid()));
+        List<CodeClassifyValueVO> valueVOs = (List<CodeClassifyValueVO>) codeClassifyValueService.listCodeClassifyValueByOids(secOid);
+        TreeQueryObject treeQueryObject = new TreeQueryObject();
+        treeQueryObject.setMultipleSelect(false);
+        treeQueryObject.setShowCheckBox(false);
+        treeQueryObject.setQueryAllLevel(false);
+        treeQueryObject.setValueField("oid");
+        treeQueryObject.setTextField("name");
+        treeQueryObject.setQueryAllRev(false);
+        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_CLASSIFY_VALUE_FIELD_NAME);
+        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
+        return revisionModelUtil.doList2Trees(valueVOs,treeWrapperOptions,(CodeClassifyValueVO s) ->{
+            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
+            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
+                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
+        });
+    }
+
+    /**
+     * 鏍规嵁缂栫爜瑙勫垯鎵归噺鍒犻櫎鐮佹鍩烘湰淇℃伅
+     * @param codeRuleOid 缂栫爜瑙勫垯涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BatchCBO batchDeleteSecByCodeRuleOid(String codeRuleOid) {
+        VciBaseUtil.alertNotNull(codeRuleOid,"缂栫爜瑙勫垯涓婚敭");
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("pkcoderule",codeRuleOid);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeBasicSecDO.class);
+        List<CodeBasicSecDO> deleteList = codeBasicSecMapper.selectByWrapper(wrapper);
+        if (CollectionUtils.isEmpty(deleteList)){
+            return new BatchCBO();
+        }
+        BatchCBO batchCBO = codeBasicSecMapper.batchDeleteByOids(deleteList.stream().map(CodeBasicSecDO::getOid).collect(Collectors.toSet()));
+        Set<ClientBusinessObject> deleteSet = new HashSet<>();
+        deleteSet.addAll(batchCBO.getDeleteCbos());
+        List<CodeBasicSecDO> fixedSecList = deleteList.stream().filter(sec -> {
+            return CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equals(sec.getSecType());
+        }).collect(Collectors.toList());
+        List<CodeBasicSecDO> classifySecList = deleteList.stream().filter(sec -> {
+            return CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue().equals(sec.getSecType());
+        }).collect(Collectors.toList());
+        Set<String> fixedSecOidSet = fixedSecList.stream().map(CodeBasicSecDO::getOid).collect(Collectors.toSet());
+        Set<String> classifySecOidSet = classifySecList.stream().map(CodeBasicSecDO::getOid).collect(Collectors.toSet());
+        if (!CollectionUtils.isEmpty(fixedSecOidSet)){
+            StringBuilder sb = new StringBuilder();
+            fixedSecOidSet.stream().forEach(oid -> {
+                sb.append("'").append(oid).append("',");
+            });
+            String inSql = sb.toString().substring(0,sb.toString().length()-1);
+            VciQueryWrapperForDO wrapperForValue = new VciQueryWrapperForDO(null,CodeFixedValueDO.class);
+            PageHelper ph = new PageHelper();
+            ph.setLimit(-1);
+            wrapperForValue.in("codefixedsecoid",inSql);
+            List<CodeFixedValueDO> fixedValueDOS = fixedValueMapper.selectByWrapper(wrapperForValue);
+            BatchCBO fixedCBO = fixedValueMapper.batchDeleteByOids(fixedValueDOS.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toSet()));
+            deleteSet.addAll(fixedCBO.getDeleteCbos());
+        }
+        if (!CollectionUtils.isEmpty(classifySecOidSet)){
+            StringBuilder sb = new StringBuilder();
+            classifySecOidSet.stream().forEach(oid -> {
+                sb.append("'").append(oid).append("',");
+            });
+            String inSql = sb.toString().substring(0,sb.toString().length()-1);
+            VciQueryWrapperForDO wrapperForValue = new VciQueryWrapperForDO(null,CodeClassifyValueDO.class);
+            PageHelper ph = new PageHelper();
+            ph.setLimit(-1);
+            wrapperForValue.in("codeclassifysecoid",inSql);
+            List<CodeClassifyValueDO> classifyValueDOS = codeClassifyValueMapper.selectByWrapper(wrapperForValue);
+            BatchCBO fixedCBO = codeClassifyValueMapper.batchDeleteByOids(classifyValueDOS.stream().map(CodeClassifyValueDO::getOid).collect(Collectors.toSet()));
+            deleteSet.addAll(fixedCBO.getDeleteCbos());
+        }
+        batchCBO.setDeleteCbos(deleteSet);
+        return batchCBO;
+    }
+
+    /**
+     * 涓婄Щ
+     *
+     * @param oid 涓婚敭
+     */
+    @Override
+    public void upOrderNum(String oid) {
+        CodeBasicSecDO secDO = selectByOid(oid);
+        BatchCBO batchCBO = new BatchCBO();
+        WebUtil.setPersistence(false);
+        if(secDO.getOrderNum() >1){
+            //绛変簬1鐨勬椂鍊欎笉鑳戒笂绉讳簡
+            //鎵炬瘮鑷繁灏忕殑
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("pkCodeRule",secDO.getPkCodeRule());
+            conditionMap.put("ordernum",String.valueOf(secDO.getOrderNum()-1));
+            List<CodeBasicSecDO> lastSecDOs = codeBasicSecMapper.selectByCondition(conditionMap,new PageHelper(-1));
+            if(!CollectionUtils.isEmpty(lastSecDOs)){
+                CodeBasicSecDO lastSec = lastSecDOs.get(0);
+                lastSec.setOrderNum(lastSec.getOrderNum()+1);
+                batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(lastSec));
+            }
+            secDO.setOrderNum(secDO.getOrderNum()-1);
+            batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(secDO));
+        }
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+    }
+
+    /**
+     * 涓嬬Щ
+     *
+     * @param oid 涓婚敭
+     */
+    @Override
+    public void downOrderNum(String oid) {
+        CodeBasicSecDO secDO = selectByOid(oid);
+        BatchCBO batchCBO = new BatchCBO();
+        WebUtil.setPersistence(false);
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("pkCodeRule",secDO.getPkCodeRule());
+        Long total = codeBasicSecMapper.countByCondition(conditionMap);
+        if(secDO.getOrderNum()  < total){
+            //灏忎簬鎬绘暟鐨勬椂鍊欐墠涓嬬Щ
+            conditionMap.put("ordernum",String.valueOf(secDO.getOrderNum()+1));
+            List<CodeBasicSecDO> lastSecDOs = codeBasicSecMapper.selectByCondition(conditionMap,new PageHelper(-1));
+            if(!CollectionUtils.isEmpty(lastSecDOs)){
+                CodeBasicSecDO lastSec = lastSecDOs.get(0);
+                lastSec.setOrderNum(lastSec.getOrderNum()-1);
+                batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(lastSec));
+            }
+            secDO.setOrderNum(secDO.getOrderNum()+1);
+            batchCBO.copyFromOther(codeBasicSecMapper.updateByPrimaryKey(secDO));
+        }
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeButtonServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeButtonServiceImpl.java
new file mode 100644
index 0000000..24b92e5
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeButtonServiceImpl.java
@@ -0,0 +1,322 @@
+package org.springblade.code.service.impl;
+
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.mdm.dao.CodeButtonDaoI;
+import com.vci.mdm.dto.CodeButtonDTO;
+import com.vci.mdm.model.CodeButtonDO;
+import com.vci.mdm.pagemodel.CodeButtonVO;
+import com.vci.mdm.service.CodeButtonServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 涓绘暟鎹腑鐨勬寜閽墿灞曟湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeButtonServiceImpl implements CodeButtonServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeButtonDaoI codeButtonMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeButtonVO> gridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeButtonDO> doList = codeButtonMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeButtonVO> dataGrid=new DataGrid<CodeButtonVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeButtonDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeButtonMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeButtonVO> codeButtonDO2VOs(Collection<CodeButtonDO>  codeButtonDOs) throws VciBaseException{
+        List<CodeButtonVO> voList = new ArrayList<CodeButtonVO>();
+        if(!CollectionUtils.isEmpty(codeButtonDOs)){
+           for(CodeButtonDO s: codeButtonDOs){
+                CodeButtonVO vo =  codeButtonDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeButtonDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeButtonVO codeButtonDO2VO(CodeButtonDO codeButtonDO) throws VciBaseException{
+              CodeButtonVO vo = new CodeButtonVO();
+        if(codeButtonDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeButtonDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeButtonVO addSave(CodeButtonDTO codeButtonDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeButtonDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeButtonDO codeButtonDO = new CodeButtonDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeButtonDTO,codeButtonDO);
+        codeButtonMapper.insert(codeButtonDO);
+        return codeButtonDO2VO(codeButtonDO);
+    }
+
+    /**
+     * 淇敼涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeButtonVO editSave(CodeButtonDTO codeButtonDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeButtonDTO,"鏁版嵁瀵硅薄",codeButtonDTO.getOid(),"涓绘暟鎹腑鐨勬寜閽墿灞曚富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeButtonDO codeButtonDO = selectByOid(codeButtonDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeButtonDTO,codeButtonDO);
+         codeButtonMapper.updateByPrimaryKey(codeButtonDO);
+         return codeButtonDO2VO(codeButtonDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeButtonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeButtonDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeButtonDTO codeButtonDTO, CodeButtonDO codeButtonDO) {
+        CodeButtonDO buttonDO = new CodeButtonDO();
+        BeanUtil.convert(codeButtonDTO,buttonDO);
+        boService.checkTs(buttonDO);
+        if(!checkIsLinked(codeButtonDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+
+
+    /**
+     * 鍒犻櫎涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param codeButtonDTO 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeButton(CodeButtonDTO codeButtonDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeButtonDTO,"涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�",codeButtonDTO.getOid(),"涓绘暟鎹腑鐨勬寜閽墿灞曠殑涓婚敭");
+        CodeButtonDO codeButtonDO = selectByOid(codeButtonDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeButtonDTO,codeButtonDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeButtonMapper.deleteByPrimaryKey(codeButtonDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+    * @param oid 涓婚敭
+    * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeButtonVO getObjectByOid(String oid) throws VciBaseException{
+        return codeButtonDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeButtonDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeButtonDO codeButtonDO = codeButtonMapper.selectByPrimaryKey(oid.trim());
+        if(codeButtonDO == null || StringUtils.isBlank(codeButtonDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeButtonDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeButtonVO> listCodeButtonByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeButtonDO> codeButtonDOList = listCodeButtonDOByOidCollections(oidCollections);
+        return codeButtonDO2VOs(codeButtonDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeButtonDO> listCodeButtonDOByOidCollections(Collection<String> oidCollections){
+        List<CodeButtonDO> codeButtonDOList = new ArrayList<CodeButtonDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeButtonDO> tempDOList =  codeButtonMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeButtonDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeButtonDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収涓绘暟鎹腑鐨勬寜閽墿灞曞垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeButtonVO> refDataGridCodeButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeButton(conditionMap,pageHelper);
+    }
+
+    /**
+     * 鍚敤
+     *
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult enableCodeButton(CodeButtonDTO buttonDTO) {
+        return changeLcStatus(buttonDTO,false);
+    }
+
+    /**
+     * 鍋滅敤
+     *
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult disableCodeButton(CodeButtonDTO buttonDTO) {
+        return changeLcStatus(buttonDTO,true);
+    }
+
+    /**
+     * 淇敼鐢熷懡鍛ㄦ湡鐨勭姸鎬侊紝濡傚仠鐢ㄥ拰鍚敤
+     * @param buttonDTO 鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s
+     * @param disable 鏄惁涓哄仠鐢�
+     * @return 鎵ц鐨勭粨鏋�
+     */
+    private BaseResult changeLcStatus(CodeButtonDTO buttonDTO, boolean disable){
+        VciBaseUtil.alertNotNull(buttonDTO,"鏁版嵁瀵硅薄",buttonDTO.getOid(),"涓婚敭");
+        CodeButtonDO buttonDO = selectByOid(buttonDTO.getOid());
+        CodeButtonDO outButtonDO = new CodeButtonDO();
+        BeanUtil.convert(buttonDTO,outButtonDO);
+        boService.checkTs(outButtonDO);
+        if(disable){
+            buttonDO.setLcStatus(FrameworkDataLCStatus.DISABLED.getValue());
+        }else{
+            buttonDO.setLcStatus(FrameworkDataLCStatus.ENABLED.getValue());
+        }
+        return (codeButtonMapper.updateLcStatus(buttonDO.getOid(),buttonDO.getLcStatus()) >0 )?(BaseResult.successMsg((disable?DISABLE_SUCCESS:ENABLE_SUCCESS))):(BaseResult.fail((disable?DISABLE_FAIL:ENABLE_FAIL)));
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyProcessTempServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyProcessTempServiceImpl.java
new file mode 100644
index 0000000..2ceeb4e
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyProcessTempServiceImpl.java
@@ -0,0 +1,356 @@
+package org.springblade.code.service.impl;
+
+import com.vci.mdm.dao.CodeClassifyProcessTempDaoI;
+import com.vci.mdm.dto.CodeClassifyProcessTempDTO;
+import com.vci.mdm.model.CodeClassifyProcessTempDO;
+import com.vci.mdm.pagemodel.CodeClassifyProcessTempVO;
+import com.vci.mdm.service.CodeClassifyProcessTempServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyProcessTempServiceImpl implements CodeClassifyProcessTempServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyProcessTempDaoI codeClassifyProcessTempMapper;
+
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeClassifyProcessTempDO> doList = codeClassifyProcessTempMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeClassifyProcessTempVO> dataGrid=new DataGrid<CodeClassifyProcessTempVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeClassifyProcessTempDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyProcessTempMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyProcessTempDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTempDO>  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(CodeClassifyProcessTempDO codeClassifyProcessTempDO) throws VciBaseException{
+              CodeClassifyProcessTempVO vo = new CodeClassifyProcessTempVO();
+        if(codeClassifyProcessTempDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyProcessTempDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            //澶勭悊鍏宠仈鐨勬ā鏉垮睘鎬�
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    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
+        CodeClassifyProcessTempDO codeClassifyProcessTempDO = new CodeClassifyProcessTempDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+        codeClassifyProcessTempMapper.insert(codeClassifyProcessTempDO);
+        //鍥犱负涓氬姟绫诲瀷鏈韩娌℃湁鎺у埗鐗堟湰锛屾墍鏈夊己鍒剁粰鐗堟湰revisionValue璁剧疆鍊硷紝骞冲彴涔熶細鍙樻垚绌恒�傘�傘�傘��
+        //鐗堟湰鍙蜂笉鑳戒娇鐢ㄩ粯璁ょ殑灞炴��
+        return codeClassifyProcessTempDO2VO(codeClassifyProcessTempDO);
+    }
+
+    /**
+     * 鑾峰彇娴佺▼妯℃澘鏄惁宸茬粡瀛樺湪浜�
+     * @param codeClassifyProcessTempDTO 鏁版嵁浼犺緭瀵硅薄
+     * @return 涓暟
+     */
+    private Long countProcessTemplate(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) {
+        String templateName = codeClassifyProcessTempDTO.getName();
+        if (StringUtils.isBlank(templateName)){
+            throw new VciBaseException("妯℃澘娴佺▼鍚嶇О涓嶈兘涓虹┖");
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeProcessUse",codeClassifyProcessTempDTO.getCodeprocessuse());
+        conditionMap.put("id",codeClassifyProcessTempDTO.getId());
+        conditionMap.put("classifyTemplateOid", codeClassifyProcessTempDTO.getClassifyTemplateOid());
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyProcessTempDO.class);
+        Long count = codeClassifyProcessTempMapper.countByWrapper(wrapper);
+        return count;
+    }
+
+    /**
+     * 淇敼鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeClassifyProcessTempVO editSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"鏁版嵁瀵硅薄",codeClassifyProcessTempDTO.getOid(),"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉夸富閿�",codeClassifyProcessTempDTO.getProcessVersion(),"娴佺▼妯℃澘鐨勭増鏈彿",codeClassifyProcessTempDTO.getName(),"娴佺▼妯℃澘鐨勫悕绉�");
+         //灏咲TO杞崲涓篋O
+         CodeClassifyProcessTempDO codeClassifyProcessTempDO = selectByOid(codeClassifyProcessTempDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+         codeClassifyProcessTempMapper.updateByPrimaryKey(codeClassifyProcessTempDO);
+         return codeClassifyProcessTempDO2VO(codeClassifyProcessTempDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyProcessTempDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyProcessTempDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO, CodeClassifyProcessTempDO codeClassifyProcessTempDO) {
+        CodeClassifyProcessTempDO tempDO = new CodeClassifyProcessTempDO();
+        BeanUtil.convert(codeClassifyProcessTempDTO,tempDO);
+        boService.checkTs(tempDO);
+        if(!checkIsLinked(codeClassifyProcessTempDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyProcessTemp(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�",codeClassifyProcessTempDTO.getOid(),"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉跨殑涓婚敭");
+        CodeClassifyProcessTempDO codeClassifyProcessTempDO = selectByOid(codeClassifyProcessTempDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyProcessTempMapper.deleteByPrimaryKey(codeClassifyProcessTempDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyProcessTempVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyProcessTempDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyProcessTempDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyProcessTempDO codeClassifyProcessTempDO = codeClassifyProcessTempMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyProcessTempDO == null || StringUtils.isBlank(codeClassifyProcessTempDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyProcessTempDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyProcessTempDO> codeClassifyProcessTempDOList = listCodeClassifyProcessTempDOByOidCollections(oidCollections);
+        return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyProcessTempDO> listCodeClassifyProcessTempDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyProcessTempDO> codeClassifyProcessTempDOList = new ArrayList<CodeClassifyProcessTempDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyProcessTempDO> tempDOList =  codeClassifyProcessTempMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyProcessTempDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyProcessTempDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeClassifyProcessTemp(conditionMap,pageHelper);
+    }
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     *
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鍐呭
+     */
+    @Override
+    public BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) {
+        BatchCBO batchCBO = new BatchCBO();
+        if(StringUtils.isBlank(classifyTemplateOid)){
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("classifyTemplateOid",classifyTemplateOid);
+            List<CodeClassifyProcessTempDO> processTempDOS = codeClassifyProcessTempMapper.selectByCondition(conditionMap, new PageHelper(-1));
+            if(!CollectionUtils.isEmpty(processTempDOS)){
+                batchCBO.copyFromOther(codeClassifyProcessTempMapper.batchDeleteByOids(processTempDOS.stream().map(CodeClassifyProcessTempDO::getOid).collect(Collectors.toList())));
+            }
+        }
+        return batchCBO;
+    }
+
+    /**
+     * 鑾峰彇娴佺▼鐨勬ā鏉跨殑淇℃伅
+     *
+     * @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);
+        return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempMapper.selectByCondition(conditionMap,null));
+    }
+
+    @Override
+    public CodeClassifyProcessTempVO getProcessTempVOByName(String codeTemplateOid,String processName) {
+        if (StringUtils.isBlank(processName)){
+            return new CodeClassifyProcessTempVO();
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("classifyTemplateOid",codeTemplateOid);
+        conditionMap.put("name",processName);
+        return codeClassifyProcessTempDO2VO(codeClassifyProcessTempMapper.selectByCondition(conditionMap,null).get(0));
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyServiceImpl.java
new file mode 100644
index 0000000..1945b58
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyServiceImpl.java
@@ -0,0 +1,1019 @@
+package org.springblade.code.service.impl;
+
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.mdm.bo.CodeClassifyFullInfoBO;
+import com.vci.mdm.dao.CodeClassifyDaoI;
+import com.vci.mdm.dao.CodeClassifyTemplateDaoI;
+import com.vci.mdm.dto.CodeClassifyDTO;
+import com.vci.mdm.model.CodeClassifyDO;
+import com.vci.mdm.model.CodeClassifyTemplateDO;
+import com.vci.mdm.pagemodel.CodeClassifyVO;
+import com.vci.mdm.pagemodel.CodeKeyAttrRepeatRuleVO;
+import com.vci.mdm.pagemodel.CodeRuleVO;
+import com.vci.mdm.po.CodeClassifyPO;
+import com.vci.mdm.service.*;
+import com.vci.starter.poi.bo.ReadExcelOption;
+import com.vci.starter.poi.bo.WriteExcelData;
+import com.vci.starter.poi.bo.WriteExcelOption;
+import com.vci.starter.poi.constant.ExcelLangCodeConstant;
+import com.vci.starter.poi.util.ExcelUtil;
+import com.vci.starter.revision.bo.TreeWrapperOptions;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.util.*;
+import com.vci.starter.web.wrapper.VciParentQueryOption;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.pageModel.OsAttributeVO;
+import com.vci.web.pageModel.OsBtmTypeAttributeVO;
+import com.vci.web.pageModel.OsBtmTypeVO;
+import com.vci.web.service.OsAttributeServiceI;
+import com.vci.web.service.OsBtmServiceI;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.*;
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 涓婚搴撳垎绫绘湇鍔�
+ * @author weidy
+ * @date 2022-01-20
+ */
+@Service
+public class CodeClassifyServiceImpl implements CodeClassifyServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyDaoI codeClassifyMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 瑙勫垯鐨勬湇鍔�
+     */
+    @Autowired
+    private CodeRuleServiceI codeRuleService;
+
+    /**
+     * 鍏抽敭灞炴�х殑鏈嶅姟
+     */
+    @Autowired
+    private CodeKeyAttrRepeatRuleServiceI keyAttrRepeatRuleService;
+
+    /**
+     * 鏁版嵁闆嗘垚
+     */
+    @Autowired
+    private CodeDuckingServiceI codeDuckingServiceI;
+
+    /**
+     * 涓氬姟绫诲瀷鐨勬湇鍔�
+     */
+    @Autowired
+    private OsBtmServiceI btmService;
+
+    /**
+     * 灞炴�ф湇鍔�
+     */
+    @Autowired
+    private OsAttributeServiceI attributeService;
+
+    /**
+     * 鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeClassifyTemplateDaoI codeClassifyTemplateMapper;
+
+    /**
+    * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉�
+    */
+    public static  final String PARENT_FIELD_NAME = "parentCodeClassifyOid";
+    /**
+     * 鏌ヨ涓婚搴撳垎绫� 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 涓婚搴撳垎绫� 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject) throws VciBaseException{
+        List<CodeClassifyDO> doList =selectCodeClassifyDOByTree(treeQueryObject);
+        List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
+        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME.toLowerCase(Locale.ROOT));
+        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
+        List<Tree> tree= revisionModelUtil.doList2Trees(voList,treeWrapperOptions,(CodeClassifyVO s) ->{
+            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
+            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
+                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
+        });
+        Iterator var6 =  tree.listIterator();
+        while(var6.hasNext()){
+            Tree trees = (Tree) var6.next();
+            boolean checkHasChild=codeClassifyMapper.checkHasChild(trees.getOid());
+            if(checkHasChild){
+                trees.setLeaf(false);
+            }else{
+                trees.setLeaf(true);
+            }
+        }
+        return tree;
+    }
+
+    /**
+     * 涓婚搴撶殑鏍�
+     *
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撴樉绀烘爲
+     */
+    @Override
+    public List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject) {
+        if(treeQueryObject == null){
+            treeQueryObject = new TreeQueryObject();
+        }
+        if(treeQueryObject.getConditionMap() == null){
+            treeQueryObject.setConditionMap(new HashMap<>());
+        }
+        treeQueryObject.getConditionMap().put(PARENT_FIELD_NAME, QueryOptionConstant.ISNULL);
+        return treeCodeClassify(treeQueryObject);
+    }
+
+    /**
+     * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+     *
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+     */
+    @Override
+    public List<CodeClassifyDO> selectCodeClassifyDOByTree(TreeQueryObject treeQueryObject) {
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(null,CodeClassifyDO.class);
+        VciParentQueryOption parentQueryOption = new VciParentQueryOption();
+        parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
+        queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
+        if(StringUtils.isBlank(treeQueryObject.getSort())) {
+            PageHelper pageHelper = new PageHelper(-1);
+            pageHelper.addDefaultAsc("id");
+            queryWrapperForDO.setPageHelper(pageHelper);
+        }
+        return codeClassifyMapper.selectByWrapper(queryWrapperForDO);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyVO> codeClassifyDO2VOs(Collection<CodeClassifyDO>  codeClassifyDOs) throws VciBaseException{
+        List<CodeClassifyVO> voList = new ArrayList<CodeClassifyVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyDOs)){
+           for(CodeClassifyDO s: codeClassifyDOs){
+                CodeClassifyVO vo =  codeClassifyDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyVO codeClassifyDO2VO(CodeClassifyDO codeClassifyDO) throws VciBaseException{
+              CodeClassifyVO vo = new CodeClassifyVO();
+        if(codeClassifyDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyVO addSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyDO codeClassifyDO = new CodeClassifyDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyDO);
+        if(StringUtils.isNotBlank(codeClassifyDO.getParentCodeClassifyOid()) && StringUtils.isNotBlank(codeClassifyDO.getBtmTypeId())){
+            throw new VciBaseException("鍙湁鍦ㄩ《灞傜殑涓婚搴撳垎绫绘墠鑳借缃笟鍔$被鍨�");
+        }
+        BatchCBO cbo_insert = codeClassifyMapper.insert(codeClassifyDO);
+
+//        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊
+//        ClientBusinessObject[] clientBusinessObjects = cbo_insert.getCreateCboArray();
+//        if(clientBusinessObjects.length!=0);
+//        {
+//            codeDuckingServiceI.insertCache1(CACHE_TYPE_CLASSIFY_ADD,FRAMEWORK_DATA_ENABLED,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, codeClassifyDO.getOid(), DateUtils.addHours(new Date(),1));
+//        }
+
+        return codeClassifyDO2VO(codeClassifyDO);
+    }
+
+    /**
+     * 淇敼涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public BaseResult editSave(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyDTO,"鏁版嵁瀵硅薄",codeClassifyDTO.getOid(),"涓婚搴撳垎绫讳富閿�");
+
+         //妫�鏌s
+         CodeClassifyDO codeClassifyDOCopyFromDTO = new CodeClassifyDO();
+         BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyDOCopyFromDTO);
+         boolean tsBoolean = boService.checkTs(codeClassifyDOCopyFromDTO);
+         if(!tsBoolean){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+             return BaseResult.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
+         }
+
+         //灏咲TO杞崲涓篋O
+         CodeClassifyDO codeClassifyDO = selectByOid(codeClassifyDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyDTO,codeClassifyDO);
+         if(StringUtils.isNotBlank(codeClassifyDO.getParentCodeClassifyOid()) && StringUtils.isNotBlank(codeClassifyDO.getBtmTypeId())){
+             throw new VciBaseException("鍙湁鍦ㄩ《灞傜殑涓婚搴撳垎绫绘墠鑳借缃笟鍔$被鍨�");
+         }
+         codeClassifyMapper.updateByPrimaryKey(codeClassifyDO);
+
+//         //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆傚彧鏈夊惎鐢ㄧ姸鎬佺殑鍒嗙被鎵嶆帹閫�
+//         if(FRAMEWORK_DATA_ENABLED.equals(codeClassifyDO.getLcStatus()));
+//         {
+//             codeDuckingServiceI.insertCache1(CACHE_TYPE_CLASSIFY_EDIT,FRAMEWORK_DATA_ENABLED,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, codeClassifyDO.getOid(), codeClassifyDTO.getTs());
+//         }
+
+         return BaseResult.success(codeClassifyDO2VO(codeClassifyDO));
+     }
+
+/**
+ * 妫�鏌� 涓婚搴撳垎绫绘槸鍚﹀垹闄�
+ * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+ * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+ * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+ */
+@Override
+public BaseResult checkIsCanDelete(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
+    VciBaseUtil.alertNotNull(codeClassifyDTO,"鏁版嵁浼犺緭瀵硅薄",codeClassifyDTO.getOid(),"涓婚敭");
+    CodeClassifyDO codeClassifyDO = selectByOid(codeClassifyDTO.getOid());
+    return checkIsCanDeleteForDO(codeClassifyDTO,codeClassifyDO);
+}
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyDTO codeClassifyDTO, CodeClassifyDO codeClassifyDO) {
+        CodeClassifyDO tsDO = new CodeClassifyDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,tsDO);
+        boService.checkTs(tsDO);
+        //鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
+        if(checkChildIsLinked(codeClassifyDO.getOid())){
+            return BaseResult.fail(DATA_CASCADE_LINKED_NOT_DELETE,new String[]{""});
+        }
+        return BaseResult.success(checkHasChild(codeClassifyDO.getOid()));
+    }
+    /**
+      * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+      *
+      * @param oid 涓婚敭
+      * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+      * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+      */
+    @Override
+    public boolean checkChildIsLinked(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        Map<String,String> childOids = codeClassifyMapper.selectAllLevelChildOid(oid.trim());
+        if(!CollectionUtils.isEmpty(childOids)){
+             for(String childOid: childOids.keySet()){
+                 if(!checkIsLinked(childOid)){
+                     return false;
+                 }
+             }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+    * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+    *
+    * @param oid 涓婚敭
+    * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+    * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    @Override
+    public boolean checkHasChild(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        return codeClassifyMapper.checkHasChild(oid.trim());
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫�
+     * @param codeClassifyDTO 涓婚搴撳垎绫绘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassify(CodeClassifyDTO codeClassifyDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyDTO,"涓婚搴撳垎绫绘暟鎹璞�",codeClassifyDTO.getOid(),"涓婚搴撳垎绫荤殑涓婚敭");
+        CodeClassifyDO codeClassifyDO = selectByOid(codeClassifyDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyDTO,codeClassifyDO);
+
+        //鍏堢畝绉版槸鍚︽湁鍏宠仈妯℃澘锛屾湁妯℃澘瑕佸厛鍒犻櫎
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateDO.class);
+        queryWrapper.addQueryMap("codeClassifyOid",codeClassifyDTO.getOid());
+        List<CodeClassifyTemplateDO> codeClassifyTemplateDOListHaveTemplate =  codeClassifyTemplateMapper.selectByWrapper(queryWrapper);
+        if(codeClassifyTemplateDOListHaveTemplate.size()>0){
+            return BaseResult.fail("鍒嗙被鍏宠仈妯℃澘锛岃鍏堝垹闄�!");
+        }
+
+        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆�
+        //1銆佹煡璇㈣鍒犻櫎鐨勭埗绫绘暟鎹�
+        List<CodeClassifyDO> deletes = new ArrayList<CodeClassifyDO>();
+        deletes.add(codeClassifyDO);
+
+        if(baseResult.isSuccess()) {
+                        //鎵句笅绾х殑锛岃繖涓槸鍙互鍒犻櫎鐨勬椂鍊�
+            Map<String,String> childrenOids = codeClassifyMapper.selectAllLevelChildOid(codeClassifyDO.getOid().trim());
+            if (!CollectionUtils.isEmpty(childrenOids)) {
+                Collection<Collection<String>> childrenCollections = VciBaseUtil.switchCollectionForOracleIn(childrenOids.keySet());
+                for(Collection<String> s : childrenCollections){
+
+                    //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆�
+                    //2銆佹煡璇㈣鍒犻櫎鐨勫瓙绫绘暟鎹�
+                    List<CodeClassifyDO>  codeClassifyDOList = codeClassifyMapper.selectByPrimaryKeyCollection(s);
+                    deletes.addAll(codeClassifyDOList);
+
+                    codeClassifyMapper.batchDeleteByOids(s);
+                }
+
+            }
+                    }else{
+            return baseResult;
+        }
+
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyMapper.deleteByPrimaryKey(codeClassifyDO.getOid());
+
+        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�
+        for (CodeClassifyDO codeClassifyDO1:deletes){
+            //codeDuckingServiceI.insertCache1(CACHE_TYPE_CLASSIFY_DELETE,FRAMEWORK_DATA_DISABLED,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, codeClassifyDO1.getOid(), DateUtils.addHours(new Date(),1));//杩欓噷鏄綋鍓嶆椂闂�
+
+            //瀛樺偍瑕佸垹闄ょ殑鏁版嵁
+            codeDuckingServiceI.cacheDeleteData(codeClassifyDO1.getOid(), codeClassifyDO1);
+        }
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫绘樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyDO codeClassifyDO = codeClassifyMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyDO == null || StringUtils.isBlank(codeClassifyDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫绘樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyVO> listCodeClassifyByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyDO> codeClassifyDOList = listCodeClassifyDOByOidCollections(oidCollections);
+        return codeClassifyDO2VOs(codeClassifyDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyDO> listCodeClassifyDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyDO> codeClassifyDOList = new ArrayList<CodeClassifyDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyDO> tempDOList =  codeClassifyMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鏍� 涓婚搴撳垎绫�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 涓婚搴撳垎绫绘樉绀烘爲
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException{
+        if(treeQueryObject == null){
+            treeQueryObject = new TreeQueryObject();
+        }
+        if(treeQueryObject.getConditionMap() == null){
+            treeQueryObject.setConditionMap(new HashMap<>());
+        }
+        if(treeQueryObject.getConditionMap().containsKey(LC_STATUS)) {
+            treeQueryObject.getConditionMap().remove(LC_STATUS);
+        }
+        if(treeQueryObject.getExtandParamsMap() ==null || !treeQueryObject.getExtandParamsMap().containsKey(REFER_SHOW_DISABLED_QUERY_KEY)) {
+        }
+        treeQueryObject.getConditionMap().put(LC_STATUS, FRAMEWORK_DATA_ENABLED);
+        return treeCodeClassify(treeQueryObject);
+    }
+
+    /**
+     * 鍚敤銆佸仠鐢�
+     * @param oid 涓婚敭
+     * @param lcStatus 鐘舵��
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult updateLcStatus(String oid, String lcStatus){
+
+        //鏌ヨ淇敼鍓峵s
+        CodeClassifyDO codeClassifyDO_old = selectByOid(oid);//涓昏鏄负浜嗘煡璇s
+
+        //鍚敤銆佸仠鐢�
+        int u = codeClassifyMapper.updateLcStatus(oid,lcStatus);
+
+//        //澶勭悊鏁版嵁闆嗘垚閫昏緫,鎴愬姛鍚庢墽琛岄泦鎴愮涓�姝�,鍒嗙被鏁版嵁鐗规畩澶勭悊銆�
+//        if(u!=0) {
+//            codeDuckingServiceI.insertCache1(lcStatus,lcStatus,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, oid, codeClassifyDO_old.getTs());
+//        }
+        BaseResult baseResult = u==0?BaseResult.error("淇敼澶辫触锛�"):BaseResult.success("淇敼鎴愬姛");
+        return baseResult;
+    }
+
+    /**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄
+     */
+    @Override
+    public List<CodeClassifyDO> selectByWrapper(VciQueryWrapperForDO queryWrapper) {
+        return codeClassifyMapper.selectByWrapper(queryWrapper);
+    }
+
+    /**
+     * 浣跨敤鍒嗙被涓婚敭鑾峰彇鍒嗙被鐩稿叧鐨勬墍鏈変俊鎭�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被涓婄骇锛屼笅绾х殑淇℃伅
+     */
+    @Override
+    public CodeClassifyFullInfoBO getClassifyFullInfo(String codeClassifyOid) {
+        VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
+        CodeClassifyFullInfoBO fullInfo = new CodeClassifyFullInfoBO();
+        CodeClassifyDO classifyDO = selectByOid(codeClassifyOid);
+        //鏌ヨ涓婄骇
+        fullInfo.setCurrentClassifyVO(codeClassifyDO2VO(classifyDO));
+        fullInfo.setParentClassifyVOs(codeClassifyDO2VOs(codeClassifyMapper.selectAllLevelParentByOid(codeClassifyOid)));
+        if(!CollectionUtils.isEmpty(fullInfo.getParentClassifyVOs())){
+            fullInfo.setTopClassifyVO(fullInfo.getParentClassifyVOs().stream().filter(s->StringUtils.isBlank(s.getParentcodeclassifyoid())).findFirst().orElseGet(()->null));
+        }
+        return fullInfo;
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鍒嗙被鐨勯《灞傚垎绫�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 椤跺眰鍒嗙被鐨勪俊鎭�
+     */
+    @Override
+    public CodeClassifyVO getTopClassifyVO(String codeClassifyOid) {
+        VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
+        List<CodeClassifyDO> classifyDOS = codeClassifyMapper.selectAllLevelParentByOid(codeClassifyOid);
+        if(!CollectionUtils.isEmpty(classifyDOS)){
+            CodeClassifyDO classifyDO = classifyDOS.stream().filter(s -> StringUtils.isBlank(s.getParentCodeClassifyOid())).findFirst().orElseGet(() -> null);
+            if(classifyDO!=null){
+                return codeClassifyDO2VO(classifyDO);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 缁熻瀛愯妭鐐圭殑涓暟
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 涓暟
+     */
+    @Override
+    public int countChildrenByClassifyOid(String codeClassifyOid) {
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("parentCodeClassifyOid",codeClassifyOid);
+        return codeClassifyMapper.countByCondition(conditionMap).intValue();
+    }
+
+    /**
+     * 鑾峰彇瀛愮骇鐨勪富棰樺簱鍒嗙被
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param allLevel        鏄惁鎵�鏈夌殑灞傜骇
+     * @param fieldInPath 鍦ㄨ矾寰勪腑鐨勫瓧娈�
+     * @param enable 鏄惁鍙樉绀哄惎鐢�
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    @Override
+    public List<CodeClassifyVO> listChildrenClassify(String codeClassifyOid, boolean allLevel, String fieldInPath, boolean enable) {
+        if(allLevel){
+            List<CodeClassifyDO> classifyDOS = codeClassifyMapper.selectAllLevelChildHasPath(codeClassifyOid,fieldInPath,enable);
+            if(!CollectionUtils.isEmpty(classifyDOS)){
+                classifyDOS = classifyDOS.stream().filter(s->FRAMEWORK_DATA_ENABLED.equalsIgnoreCase(s.getLcStatus())).collect(Collectors.toList());
+            }
+            return codeClassifyDO2VOs(classifyDOS);
+        }else{
+            //鍙煡璇竴鏉★紝閭ath灏辨病蹇呰鏌ヨ浜�
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("parentcodeclassifyoid",codeClassifyOid);
+            if (enable){
+                conditionMap.put(VciQueryWrapperForDO.LC_STATUS_FIELD,FRAMEWORK_DATA_ENABLED);
+            }
+            return codeClassifyDO2VOs(codeClassifyMapper.selectByCondition(conditionMap,new PageHelper(-1)));
+        }
+    }
+
+    /**
+     * 鍙嶅悜浠庡瓙绾ц幏鍙栫埗绾х殑涓婚搴撳垎绫�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    @Override
+    public List<CodeClassifyVO> listParentClassify(String codeClassifyOid){
+        List<CodeClassifyDO> classifyDOS = codeClassifyMapper.listParentClassify(codeClassifyOid);
+        return codeClassifyDO2VOs(classifyDOS);
+    }
+
+    /**
+     * 瀵煎嚭鍒嗙被
+     *
+     * @param oid 鍒嗙被涓婚敭
+     * @return excel鏂囦欢璺緞
+     */
+    @Override
+    public String exportClassify(String oid) {
+        VciBaseUtil.alertNotNull(oid,"鍒嗙被鐨勪富閿�");
+        CodeClassifyVO classifyVO = getObjectByOid(oid);
+        classifyVO.setDataLevel(0);
+        classifyVO.setPath(classifyVO.getId());
+        List<CodeClassifyVO> codeClassifyVOS = listChildrenClassify(oid, true, "id", false);
+        if(codeClassifyVOS ==null){
+            codeClassifyVOS = new ArrayList<>();
+        }
+        codeClassifyVOS.add(classifyVO);
+
+        //鏌ヨ涓�涓嬭鍒欑殑缂栧彿锛屽拰鍏抽敭灞炴�ч噸澶嶈鍒�
+        List<String> codeRuleOids = codeClassifyVOS.stream().filter(s -> StringUtils.isNotBlank(s.getCoderuleoid())).map(CodeClassifyVO::getCoderuleoid).collect(Collectors.toList());
+        Map<String, CodeRuleVO> ruleVOMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(codeRuleOids)){
+            VciBaseUtil.switchCollectionForOracleIn(codeRuleOids).stream().forEach(ruleOids->{
+                Collection<CodeRuleVO> ruleVOS = codeRuleService.listCodeRuleByOids(ruleOids);
+                ruleVOMap.putAll( Optional.ofNullable(ruleVOS).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getOid(),t->t)));
+            });
+        }
+        //鎵惧叧閿睘鎬ц鍒�
+        List<String> keyRuleOids = codeClassifyVOS.stream().filter(s -> StringUtils.isNotBlank(s.getCodekeyattrrepeatoid())).map(CodeClassifyVO::getCodekeyattrrepeatoid).collect(Collectors.toList());
+        Map<String, CodeKeyAttrRepeatRuleVO> keyRuleVOMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(keyRuleOids)){
+            VciBaseUtil.switchCollectionForOracleIn(keyRuleOids).stream().forEach(ruleOids->{
+                Collection<CodeKeyAttrRepeatRuleVO> ruleVOS = keyAttrRepeatRuleService.listCodeKeyAttrRepeatRuleByOids(ruleOids);
+                keyRuleVOMap.putAll( Optional.ofNullable(ruleVOS).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getOid(),t->t)));
+            });
+        }
+        //ok,鍐檈xcel
+        String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + "瀵煎嚭鍒嗙被.xls";
+        try {
+            new File(excelName).createNewFile();
+        } catch (Throwable e) {
+            throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e);
+        }
+        List<WriteExcelData> excelDataList = new ArrayList<>();
+        excelDataList.add(new WriteExcelData(0,0,"鍒嗙被缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,1,"鍒嗙被鍚嶇О"));
+        excelDataList.add(new WriteExcelData(0,2,"涓氬姟绫诲瀷缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,3,"涓氬姟绫诲瀷鍚嶇О"));
+        excelDataList.add(new WriteExcelData(0,4,"缂栫爜瑙勫垯缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,5,"缂栫爜瑙勫垯鍚嶇О"));
+        excelDataList.add(new WriteExcelData(0,6,"鏌ラ噸瑙勫垯缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,7,"鏌ラ噸瑙勫垯鍚嶇О"));
+        excelDataList.add(new WriteExcelData(0,8,"鍒嗙被璺緞"));
+        excelDataList.add(new WriteExcelData(0,9,"鐘舵��"));
+        excelDataList.add(new WriteExcelData(0,10,"鍒嗙被灞傜骇"));
+        excelDataList.add(new WriteExcelData(0,11,"鎻忚堪"));
+        for (int i = 0; i < codeClassifyVOS.size(); i++) {
+            CodeClassifyVO vo = codeClassifyVOS.get(i);
+            excelDataList.add(new WriteExcelData(i+1,0,vo.getId()));
+            excelDataList.add(new WriteExcelData(i+1,1,vo.getName()));
+            excelDataList.add(new WriteExcelData(i+1,2,vo.getBtmtypeid()));
+            excelDataList.add(new WriteExcelData(i+1,3,vo.getBtmtypename()));
+            excelDataList.add(new WriteExcelData(i+1,4,StringUtils.isNotBlank(vo.getCoderuleoid())?ruleVOMap.getOrDefault(vo.getCoderuleoid(),new CodeRuleVO()).getId():""));
+            excelDataList.add(new WriteExcelData(i+1,5,StringUtils.isNotBlank(vo.getCoderuleoid())?ruleVOMap.getOrDefault(vo.getCoderuleoid(),new CodeRuleVO()).getName():""));
+            excelDataList.add(new WriteExcelData(i+1,6,StringUtils.isNotBlank(vo.getCodekeyattrrepeatoid())?keyRuleVOMap.getOrDefault(vo.getCodekeyattrrepeatoid(),new CodeKeyAttrRepeatRuleVO()).getId():""));
+            excelDataList.add(new WriteExcelData(i+1,7,StringUtils.isNotBlank(vo.getCodekeyattrrepeatoid())?keyRuleVOMap.getOrDefault(vo.getCodekeyattrrepeatoid(),new CodeKeyAttrRepeatRuleVO()).getName():""));
+            excelDataList.add(new WriteExcelData(i+1,8,vo.getOid().equalsIgnoreCase(classifyVO.getOid())?vo.getPath():classifyVO.getPath() + vo.getPath()));
+            excelDataList.add(new WriteExcelData(i+1,9,FrameworkDataLCStatus.getTextByValue(vo.getLcStatus())));
+            excelDataList.add(new WriteExcelData(i+1,10,vo.getDataLevel()));
+            excelDataList.add(new WriteExcelData(i+1,11,vo.getDescription()));
+        }
+        WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
+        ExcelUtil.writeDataToFile(excelName, excelOption);
+        return excelName;
+    }
+
+    /**
+     * 鍒涘缓瀵煎叆妯℃澘
+     *
+     * @return excel鏂囦欢璺緞
+     */
+    @Override
+    public String createImportExcel() {
+        //ok,鍐檈xcel
+        String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + "鍒嗙被瀵煎叆妯℃澘.xls";
+        try {
+            new File(excelName).createNewFile();
+        } catch (Throwable e) {
+            throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e);
+        }
+        List<WriteExcelData> excelDataList = new ArrayList<>();
+        WriteExcelData excelData = new WriteExcelData(0, 0, "鍒嗙被缂栧彿");
+        excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+        excelDataList.add(excelData);
+        WriteExcelData excelData1 = new WriteExcelData(0, 1, "鍒嗙被鍚嶇О");
+        excelData1.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+        excelDataList.add(excelData1);
+        excelDataList.add(new WriteExcelData(0,2,"涓氬姟绫诲瀷缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,3,"缂栫爜瑙勫垯缂栧彿"));
+        excelDataList.add(new WriteExcelData(0,4,"鏌ラ噸瑙勫垯缂栧彿"));
+        WriteExcelData excelData2 = new WriteExcelData(0, 5, "鍒嗙被璺緞");
+        excelData2.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+        excelDataList.add(excelData2);
+        excelDataList.add(new WriteExcelData(0,6,"鐘舵��"));
+        WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
+        ExcelUtil.writeDataToFile(excelName, excelOption);
+        return excelName;
+    }
+
+    /**
+     * 瀵煎叆鍒嗙被
+     *
+     * @param file1 鏂囦欢鐨勪俊鎭�
+     * @return 閿欒鏂囦欢鐨勫湴鍧�
+     */
+    @Override
+    public void importClassify(File file1) {
+        VciBaseUtil.alertNotNull(file1,"excel鏂囦欢");
+        if(!file1.exists()){
+            throw new VciBaseException("瀵煎叆鐨別xcel鏂囦欢涓嶅瓨鍦�,{0}",new String[]{file1.getPath()});
+        }
+        ReadExcelOption excelOption = new ReadExcelOption();
+        List<CodeClassifyPO> poList = null;
+        try{
+            poList = ExcelUtil.readDataObjectFromExcel(file1,CodeClassifyPO.class,excelOption,(value,po,fieldName)->{
+                po.setLcStatus(FrameworkDataLCStatus.getValueByText(po.getLcStatusText()));
+                if(StringUtils.isBlank(po.getLcStatusText())){
+                    po.setLcStatus(FrameworkDataLCStatus.ENABLED.getValue());
+                }
+            });
+        }catch (Exception e){
+            if(logger.isErrorEnabled()){
+                logger.error("璇诲彇excel鍐呭鐨勬椂鍊欏嚭鐜颁簡閿欒",e);
+            }
+            throw new VciBaseException(LangBaseUtil.getErrorMsg(e),new String[]{},e);
+        }
+        //鍘婚櫎鏁磋閮芥槸绌虹殑鎯呭喌
+
+        if(CollectionUtils.isEmpty(poList)){
+            throw new VciBaseException(ExcelLangCodeConstant.IMPORT_CONTENT_NULL,new String[]{});
+        }
+
+        poList = poList.stream().filter(s->!(StringUtils.isBlank(s.getId()) && StringUtils.isBlank(s.getName()) && StringUtils.isBlank(s.getPath()))).collect(Collectors.toList());
+
+        List<CodeClassifyDO> classifyDOList = new ArrayList<>();
+        //鐪嬬湅璺緞鏄惁鏈夐噸澶�
+        Map<String/**璺緞**/, Long/**涓暟**/> pathCountMap = poList.stream().filter(s->StringUtils.isNotBlank(s.getPath())).collect(Collectors.groupingBy(s -> s.getPath(), Collectors.counting()));
+        List<String> repeatPaths = Optional.ofNullable(pathCountMap).orElse(new HashMap<>()).entrySet().stream().filter(entry -> entry.getValue() > 1).map(entry -> entry.getKey()).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(repeatPaths)){
+            //鏈夐噸澶嶇殑鍐呭
+            List<String> rowIndexList = new ArrayList<>();
+            poList.stream().forEach(po->{
+                if(repeatPaths.contains(po.getPath())){
+                    rowIndexList.add(po.getRowIndex());
+                }
+            });
+            throw new VciBaseException("璺緞鏈夐噸澶�,{0}",new String[]{rowIndexList.stream().collect(Collectors.joining(","))});
+        }
+
+        Map<String, CodeRuleVO> ruleVOMap = Optional.ofNullable(codeRuleService.listCodeRuleByIds(
+                poList.stream().filter(s->StringUtils.isNotBlank(s.getCodeRuleId())).map(CodeClassifyPO::getCodeRuleId).collect(Collectors.toList()))
+        ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
+
+        Map<String,CodeKeyAttrRepeatRuleVO> keyRuleVOMap =Optional.ofNullable(keyAttrRepeatRuleService.listCodeKeyAttrRepeatRuleByIds(
+                poList.stream().filter(s->StringUtils.isNotBlank(s.getKeyRepeatRuleId())).map(CodeClassifyPO::getKeyRepeatRuleId).collect(Collectors.toList()))
+        ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
+
+        Map<String, OsBtmTypeVO> btmVOMap = Optional.ofNullable(btmService.listBtmByIds(
+                poList.stream().filter(s -> StringUtils.isNotBlank(s.getBtmTypeId())).map(CodeClassifyPO::getBtmTypeId).collect(Collectors.toList()))
+        ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
+
+        Map<String/**璺緞**/,String/**涓婚敭**/> oidPathMap = new HashMap<>();
+
+        //鎴戜滑闇�瑕佹煡璇㈡墍鏈夊凡缁忓瓨鍦ㄧ殑鍒嗙被锛屼富瑕佹槸璺緞锛岀敤鏉ュ垽鏂垎绫荤殑鏁版嵁
+        List<CodeClassifyDO> existClassifyDOs = codeClassifyMapper.selectAllLevelChildHasPath("", "id", false);
+        Map<String/**璺緞**/, CodeClassifyDO/**宸茬粡瀛樺湪鐨勬暟鎹�**/> pathDOMap = Optional.ofNullable(existClassifyDOs).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> {
+            String path = s.getPath();
+            if(StringUtils.isNotBlank(path) && path.startsWith("#")){
+                return path.substring(1);
+            }
+            return path;
+        }, t -> t));
+        poList.stream().forEach(po->{
+            CodeClassifyDO classifyDO = new CodeClassifyDO();
+            VciBaseUtil.alertNotNull(po.getId(),"鍒嗙被缂栧彿",po.getName(),"鍒嗙被鍚嶇О",po.getPath(),"鍒嗙被璺緞");
+            if(StringUtils.isNotBlank(po.getBtmTypeId()) && !btmVOMap.containsKey(po.getBtmTypeId().toLowerCase(Locale.ROOT))){
+                throw new VciBaseException("绗瑊0}琛岀殑涓氬姟绫诲瀷{1}鍦ㄧ郴缁熶腑涓嶅瓨鍦�",new String[]{String.valueOf(VciBaseUtil.getInt(po.getRowIndex())+1),po.getBtmTypeId()});
+            }
+            if(StringUtils.isNotBlank(po.getCodeRuleId()) && !ruleVOMap.containsKey(po.getCodeRuleId().toLowerCase(Locale.ROOT))){
+                throw new VciBaseException("绗瑊0}琛岀殑缂栫爜瑙勫垯{1}鍦ㄧ郴缁熶腑涓嶅瓨鍦�",new String[]{String.valueOf(po.getRowIndex()+1),po.getCodeRuleId()});
+            }
+            if(StringUtils.isNotBlank(po.getKeyRepeatRuleId()) && !keyRuleVOMap.containsKey(po.getKeyRepeatRuleId().toLowerCase(Locale.ROOT))){
+                throw new VciBaseException("绗瑊0}琛岀殑鍏抽敭灞炴�ф煡閲嶈鍒檣1}鍦ㄧ郴缁熶腑涓嶅瓨鍦�",new String[]{String.valueOf(po.getRowIndex()+1),po.getKeyRepeatRuleId()});
+            }
+            classifyDO.setOid(VciBaseUtil.getPk());
+            classifyDO.setId(po.getId());
+            classifyDO.setName(po.getName());
+            classifyDO.setDescription(po.getDescription());
+            oidPathMap.put(po.getPath(),classifyDO.getOid());
+            if(StringUtils.isNotBlank(po.getBtmTypeId())){
+                OsBtmTypeVO typeVO = btmVOMap.get(po.getBtmTypeId().toLowerCase(Locale.ROOT));
+                classifyDO.setBtmTypeId(typeVO.getId());
+                classifyDO.setBtmTypeName(typeVO.getName());
+            }
+            if(StringUtils.isNotBlank(po.getCodeRuleId())){
+                CodeRuleVO codeRuleVO = ruleVOMap.get(po.getCodeRuleId().toLowerCase(Locale.ROOT));
+                classifyDO.setCodeRuleOid(codeRuleVO.getOid());
+            }
+            if(StringUtils.isNotBlank(po.getKeyRepeatRuleId())){
+                CodeKeyAttrRepeatRuleVO repeatRuleVO = keyRuleVOMap.get(po.getKeyRepeatRuleId());
+                classifyDO.setCodeKeyAttrRepeatOid(repeatRuleVO.getOid());
+            }
+            classifyDO.setLcStatus(po.getLcStatus());
+            classifyDO.setPath(po.getPath());
+            classifyDOList.add(classifyDO);
+        });
+        //瑕佺湅瀛樺湪鐨勶紝淇敼璺緞瀵瑰簲鐨勪富閿�
+        Map<String/**璺緞**/,String/**涓婚敭**/> catchedOidPathMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(oidPathMap)){
+            oidPathMap.forEach((path,oid)->{
+                if(pathDOMap.containsKey(path)){
+                    //璇存槑瀛樺湪
+                    catchedOidPathMap.put(path,pathDOMap.get(path).getOid());
+                }else{
+                    catchedOidPathMap.put(path,oid);
+                }
+            });
+        }
+        List<CodeClassifyDO> addClassifyDOList = new ArrayList<>();
+        List<CodeClassifyDO> editClassifyDOList = new ArrayList<>();
+        classifyDOList.stream().forEach(classifyDO->{
+
+            //瑕佺湅涓婄骇鏄笉鏄瓨鍦ㄥ摝
+            String parentPath = classifyDO.getPath();
+            if(parentPath.contains("#")) {
+                parentPath = parentPath.substring(0, parentPath.lastIndexOf("#"));
+            }
+            if((!catchedOidPathMap.containsKey(parentPath) && !pathDOMap.containsKey(parentPath) )&& !classifyDO.getPath().equalsIgnoreCase(classifyDO.getId())){
+                throw new VciBaseException("鍒嗙被缂栧彿[{0}],鍒嗙被鍚嶇О[{1}]锛岃矾寰勪负[{2}]鐨勪笂绾у垎绫诲湪绯荤粺涓紝鍦ㄦ湰娆″鍏ョ殑鏁版嵁鍜岀郴缁熶腑鍧囨病鏈夋壘鍒�",new String[]{classifyDO.getId(),classifyDO.getName(),classifyDO.getPath()});
+            }
+            if (!classifyDO.getPath().equalsIgnoreCase(classifyDO.getId())){
+                //涓嶆槸椤剁骇鐨勬椂鍊欙紝瑕佽缃笂绾х殑涓婚敭
+
+                classifyDO.setParentCodeClassifyOid(catchedOidPathMap.containsKey(parentPath)?catchedOidPathMap.get(parentPath):pathDOMap.get(parentPath).getOid());
+            }
+            if(classifyDO.getPath().equalsIgnoreCase(classifyDO.getId()) && StringUtils.isBlank(classifyDO.getBtmTypeId())){
+                throw new VciBaseException("鍒嗙被缂栧彿[{0}],鍒嗙被鍚嶇О[{1}]锛屾槸椤跺眰鍒嗙被锛岄渶瑕佽缃笟鍔$被鍨嬬紪鍙�",new String[]{classifyDO.getId(),classifyDO.getName()});
+            }
+            if(pathDOMap.containsKey(classifyDO.getPath())){
+                //瀛樺湪锛岄渶瑕佷慨鏀瑰璞�
+                classifyDO.setOid(catchedOidPathMap.get(classifyDO.getPath()));
+                CodeClassifyDO classifyDOInDB = pathDOMap.get(classifyDO.getPath());
+                classifyDOInDB.setId(classifyDO.getId());
+                classifyDOInDB.setName(classifyDO.getName());
+                classifyDOInDB.setDescription(classifyDO.getDescription());
+                classifyDOInDB.setBtmTypeId(classifyDO.getBtmTypeId());
+                classifyDOInDB.setBtmTypeName(classifyDO.getBtmTypeName());
+                classifyDOInDB.setCodeRuleOid(classifyDO.getCodeRuleOid());
+                classifyDOInDB.setCodeRuleOidName(classifyDO.getCodeRuleOidName());
+                classifyDOInDB.setParentCodeClassifyOid(classifyDO.getParentCodeClassifyOid());
+                classifyDOInDB.setCodeKeyAttrRepeatOid(classifyDO.getCodeKeyAttrRepeatOid());
+                classifyDOInDB.setCodeKeyAttrRepeatOidName(classifyDO.getCodeKeyAttrRepeatOidName());
+                if(classifyDOInDB.getOrderNum() == null){
+                    classifyDOInDB.setOrderNum(0);
+                }
+                editClassifyDOList.add(classifyDOInDB);
+            }else{
+                //鏄柊鐨勶紝鐩存帴娣诲姞灏辫浜�
+                //鍒ゆ柇鍙锋�庝箞澶勭悊?
+                classifyDO.setOrderNum(0);
+                addClassifyDOList.add(classifyDO);
+            }
+        });
+        if(!CollectionUtils.isEmpty(editClassifyDOList)){
+            VciBaseUtil.switchCollectionForOracleIn(editClassifyDOList).stream().forEach(classifyDOs->{
+                codeClassifyMapper.batchUpdate(classifyDOs.stream().collect(Collectors.toList()));
+            });
+        }
+        if(!CollectionUtils.isEmpty(addClassifyDOList)){
+            revisionModelUtil.wrapperForBatchAdd(addClassifyDOList);
+            VciBaseUtil.switchCollectionForOracleIn(addClassifyDOList).stream().forEach(classifyDOs->{
+                codeClassifyMapper.batchInsert(classifyDOs.stream().collect(Collectors.toList()));
+            });
+        }
+
+    }
+
+    /**
+     * 鑾峰彇鍒嗙被鍏宠仈鐨勫睘鎬�
+     *
+     * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤绘湁codeClassifyOid锛屾敮鎸乮d鍜宯ame涓ょ鏌ヨ鏉′欢
+     * @return 灞炴�х殑淇℃伅锛屽寘鍚粯璁ょ殑灞炴��
+     */
+    @Override
+    public DataGrid<OsAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject) {
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        if(baseQueryObject.getConditionMap() == null){
+            baseQueryObject.setConditionMap(new HashMap<>());
+        }
+        String classifyOid = baseQueryObject.getConditionMap().getOrDefault("codeClassifyOid","");
+        String id = baseQueryObject.getConditionMap().getOrDefault("id","");
+        String name = baseQueryObject.getConditionMap().getOrDefault("name","");
+        if(StringUtils.isBlank(classifyOid)){
+            return new DataGrid<>();
+        }
+        CodeClassifyVO topClassifyVO = getTopClassifyVO(classifyOid);
+        if(topClassifyVO == null || StringUtils.isBlank(topClassifyVO.getBtmtypeid())){
+            return new DataGrid<>();
+        }
+        List<OsBtmTypeAttributeVO> unDefaultAttributes = btmService.listAttributeByBtmId(topClassifyVO.getBtmtypeid());
+        List<OsAttributeVO> attributeVOS = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(unDefaultAttributes)){
+            unDefaultAttributes.stream().forEach(attr->{
+                OsAttributeVO attributeVO = new OsAttributeVO();
+                BeanUtil.convert(attr,attributeVO);
+                attributeVO.setAttributeDataType(attr.getAttrDataType());
+                attributeVO.setAttrLength(attr.getAttributeLength());
+                attributeVO.setBtmTypeId(attr.getReferBtmTypeId());
+                attributeVO.setBtmTypeName(attr.getReferBtmTypeName());
+                boolean add = true;
+                if(StringUtils.isNotBlank(id) && !attributeVO.getId().contains(id.replace("*",""))){
+                    add = false;
+                }
+                if(StringUtils.isNotBlank(name) && !attributeVO.getId().contains(name.replace("*",""))){
+                    add = false;
+                }
+                if(add){
+                    attributeVOS.add(attributeVO);
+                }
+            });
+        }
+        if(!CollectionUtils.isEmpty(attributeService.getDefaultAttributeVOs())){
+            attributeService.getDefaultAttributeVOs().stream().forEach(attr->{
+                boolean add = true;
+                if(StringUtils.isNotBlank(id) && !attr.getId().contains(id.replace("*",""))){
+                    add = false;
+                }
+                if(StringUtils.isNotBlank(name) && !attr.getId().contains(name.replace("*",""))){
+                    add = false;
+                }
+                if(add){
+                    attributeVOS.add(attr);
+                }
+            });
+        }
+        DataGrid<OsAttributeVO> dataGrid = new DataGrid<>();
+        dataGrid.setData(attributeVOS);
+        dataGrid.setTotal(attributeVOS.size());
+        return dataGrid;
+    }
+
+    /**
+     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
+     *
+     * @param idPath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    @Override
+    public CodeClassifyVO getObjectByIdPath(String idPath) {
+        CodeClassifyDO classifyDO = codeClassifyMapper.selectByFieldPath(idPath, VciQueryWrapperForDO.ID_FIELD);
+        return codeClassifyDO2VO(classifyDO);
+    }
+    /**
+     * 浣跨敤缂栧彿鐨勮矾寰勮幏鍙栧璞�
+     *
+     * @param clsfNamePath 缂栧彿鐨勮矾寰勶紝涓�瀹氳浠庢渶椤跺眰鑺傜偣寮�濮嬶紝鏍煎紡涓簒xx/yyy/zz 杩欐牱
+     * @return 鍒嗙被鐨勬樉绀哄璞�
+     */
+    @Override
+    public CodeClassifyVO getObjectByClsfNamePath(String clsfNamePath){
+        CodeClassifyDO classifyDO = codeClassifyMapper.selectByFieldPath(clsfNamePath, "name");
+        return codeClassifyDO2VO(classifyDO);
+    }
+
+    /***
+     * 鏍规嵁涓婄骇鑺傜偣鑾峰彇涓嬬骇鑺傜偣浠e彿璺緞鍜屽悕绉拌矾寰�
+     * @param classifyId
+     * @param enable
+     * @return
+     */
+    @Override
+   public  List<CodeClassifyVO> getIdPathToNamePathByParentId(String codeClassifyId,boolean enable){
+
+        List<CodeClassifyDO> classifyDOs= codeClassifyMapper.getIdPathToNamePathByParentId(codeClassifyId,enable);
+        return codeClassifyDO2VOs(classifyDOs);
+
+   }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTempMapItemServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTempMapItemServiceImpl.java
new file mode 100644
index 0000000..33a6cc0
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTempMapItemServiceImpl.java
@@ -0,0 +1,295 @@
+package org.springblade.code.service.impl;
+
+import com.vci.mdm.dao.CodeClassifyTempMapItemDaoI;
+import com.vci.mdm.dto.CodeClassifyTempMapItemDTO;
+import com.vci.mdm.model.CodeClassifyTempMapItemDO;
+import com.vci.mdm.pagemodel.CodeClassifyTempMapItemVO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.mdm.service.CodeClassifyTempMapItemServiceI;
+import com.vci.mdm.service.CodeClassifyTemplateAttrServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鏄犲皠瑙勫垯鐨勬槑缁嗘湇鍔�
+ * @author weidy
+ * @date 2022-03-10
+ */
+@Service
+public class CodeClassifyTempMapItemServiceImpl implements CodeClassifyTempMapItemServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyTempMapItemDaoI codeClassifyTempMapItemMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 鍒嗙被妯℃澘灞炴�х殑鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyTemplateAttrServiceI attrService;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTempMapItemVO> gridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeClassifyTempMapItemDO> doList = codeClassifyTempMapItemMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeClassifyTempMapItemVO> dataGrid=new DataGrid<CodeClassifyTempMapItemVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            //濉厖鏄犲皠鏄庣粏涓垎绫绘ā鏉垮睘鎬х殑鍊�
+            List<String> attrOidList = doList.stream().map(CodeClassifyTempMapItemDO::getClassifyTemplateAttrOid).collect(Collectors.toList());
+            List<CodeClassifyTemplateAttrVO> attrVOS = (List<CodeClassifyTemplateAttrVO>) attrService.listCodeClassifyTemplateAttrByOids(attrOidList);
+            attrVOS.forEach(attr -> {
+                doList.stream().filter(item -> {
+                    return item.getClassifyTemplateAttrOid().equals(attr.getOid());
+                }).forEach(item -> {
+                    item.setClassifyAttrId(attr.getId());
+                    item.setClassifyAttrName(attr.getName());
+                });
+            });
+            dataGrid.setData(codeClassifyTempMapItemDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTempMapItemMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTempMapItemDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTempMapItemVO> codeClassifyTempMapItemDO2VOs(Collection<CodeClassifyTempMapItemDO>  codeClassifyTempMapItemDOs) throws VciBaseException{
+        List<CodeClassifyTempMapItemVO> voList = new ArrayList<CodeClassifyTempMapItemVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyTempMapItemDOs)){
+           for(CodeClassifyTempMapItemDO s: codeClassifyTempMapItemDOs){
+                CodeClassifyTempMapItemVO vo =  codeClassifyTempMapItemDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTempMapItemDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyTempMapItemVO codeClassifyTempMapItemDO2VO(CodeClassifyTempMapItemDO codeClassifyTempMapItemDO) throws VciBaseException{
+              CodeClassifyTempMapItemVO vo = new CodeClassifyTempMapItemVO();
+        if(codeClassifyTempMapItemDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTempMapItemDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyTempMapItemVO addSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTempMapItemDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = new CodeClassifyTempMapItemDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTempMapItemDTO,codeClassifyTempMapItemDO);
+        codeClassifyTempMapItemMapper.insert(codeClassifyTempMapItemDO);
+        return codeClassifyTempMapItemDO2VO(codeClassifyTempMapItemDO);
+    }
+
+    /**
+     * 淇敼鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeClassifyTempMapItemVO editSave(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyTempMapItemDTO,"鏁版嵁瀵硅薄",codeClassifyTempMapItemDTO.getOid(),"鏄犲皠瑙勫垯鐨勬槑缁嗕富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = selectByOid(codeClassifyTempMapItemDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyTempMapItemDTO,codeClassifyTempMapItemDO);
+         codeClassifyTempMapItemMapper.updateByPrimaryKey(codeClassifyTempMapItemDO);
+         return codeClassifyTempMapItemDO2VO(codeClassifyTempMapItemDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyTempMapItemDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyTempMapItemDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO, CodeClassifyTempMapItemDO codeClassifyTempMapItemDO) {
+            CodeClassifyTempMapItemDO tsDO = new CodeClassifyTempMapItemDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTempMapItemDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codeClassifyTempMapItemDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param codeClassifyTempMapItemDTO 鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyTempMapItem(CodeClassifyTempMapItemDTO codeClassifyTempMapItemDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTempMapItemDTO,"鏄犲皠瑙勫垯鐨勬槑缁嗘暟鎹璞�",codeClassifyTempMapItemDTO.getOid(),"鏄犲皠瑙勫垯鐨勬槑缁嗙殑涓婚敭");
+        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = selectByOid(codeClassifyTempMapItemDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTempMapItemDTO,codeClassifyTempMapItemDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyTempMapItemMapper.deleteByPrimaryKey(codeClassifyTempMapItemDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+    * @param oid 涓婚敭
+    * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyTempMapItemVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyTempMapItemDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyTempMapItemDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTempMapItemDO codeClassifyTempMapItemDO = codeClassifyTempMapItemMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyTempMapItemDO == null || StringUtils.isBlank(codeClassifyTempMapItemDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyTempMapItemDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鏄犲皠瑙勫垯鐨勬槑缁�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyTempMapItemVO> listCodeClassifyTempMapItemByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyTempMapItemDO> codeClassifyTempMapItemDOList = listCodeClassifyTempMapItemDOByOidCollections(oidCollections);
+        return codeClassifyTempMapItemDO2VOs(codeClassifyTempMapItemDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyTempMapItemDO> listCodeClassifyTempMapItemDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyTempMapItemDO> codeClassifyTempMapItemDOList = new ArrayList<CodeClassifyTempMapItemDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyTempMapItemDO> tempDOList =  codeClassifyTempMapItemMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyTempMapItemDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyTempMapItemDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鏄犲皠瑙勫垯鐨勬槑缁嗗垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鏄犲皠瑙勫垯鐨勬槑缁嗘樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTempMapItemVO> refDataGridCodeClassifyTempMapItem(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeClassifyTempMapItem(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
new file mode 100644
index 0000000..03b952c
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
@@ -0,0 +1,726 @@
+package org.springblade.code.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.mdm.constant.MdmBtmTypeConstant;
+import com.vci.mdm.dao.CodeClassifyTemplateAttrDaoI;
+import com.vci.mdm.dao.CodeClassifyTemplateDaoI;
+import com.vci.mdm.dto.CodeClassifyTemplateAttrDTO;
+import com.vci.mdm.enumpack.CodeLevelTypeEnum;
+import com.vci.mdm.model.CodeClassifyTemplateAttrDO;
+import com.vci.mdm.model.CodeClassifyTemplateDO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.mdm.service.CodeClassifyTemplateAttrServiceI;
+import com.vci.mdm.service.CodeTemplatePhaseServiceI;
+import com.vci.mdm.utils.PatternUtil;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.util.VciDateUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.pageModel.OsBtmTypeAttributeVO;
+import com.vci.web.pageModel.UIFormReferVO;
+import com.vci.web.service.BdSelectInputCharServiceI;
+import com.vci.web.service.OsAttributeServiceI;
+import com.vci.web.service.OsBtmServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyTemplateAttrServiceImpl implements CodeClassifyTemplateAttrServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyTemplateAttrDaoI codeClassifyTemplateAttrMapper;
+
+    /**
+     * 妯℃澘鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeClassifyTemplateDaoI codeClassifyTemplateMapper;
+
+    /**
+     * 妯℃澘鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeTemplatePhaseServiceI codeTemplatePhaseServiceI;
+
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 鏌ヨ杩欎釜涓氬姟绫诲瀷鐨勬墍鏈夊睘鎬�
+     */
+    @Autowired
+    private OsBtmServiceI btmService;
+
+    /**
+     * 鍙�夊彲杈撴湇鍔�
+     */
+    @Autowired
+    private BdSelectInputCharServiceI charService;
+
+    /**
+     * 灞炴�х殑鏈嶅姟
+     */
+    @Autowired
+    private OsAttributeServiceI attributeService;
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        DataGrid<CodeClassifyTemplateAttrVO> dataGrid=new DataGrid<CodeClassifyTemplateAttrVO>();
+        //娌℃湁浼犻�掑弬鏁帮紝灏变笉鎵ц鏌ヨ閫昏緫
+        if(conditionMap.size()==0){
+            dataGrid.setData(new ArrayList<>());
+            dataGrid.setTotal(0);
+            return dataGrid;
+        }
+
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultAsc("ordernum");
+        List<CodeClassifyTemplateAttrDO> doList = codeClassifyTemplateAttrMapper.selectByCondition(conditionMap,pageHelper);
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeClassifyTemplateAttrDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateAttrMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClassifyTemplateAttrDO>  codeClassifyTemplateAttrDOs) throws VciBaseException{
+        List<CodeClassifyTemplateAttrVO> voList = new ArrayList<CodeClassifyTemplateAttrVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOs)){
+           for(CodeClassifyTemplateAttrDO s: codeClassifyTemplateAttrDOs){
+                CodeClassifyTemplateAttrVO vo =  codeClassifyTemplateAttrDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyTemplateAttrVO codeClassifyTemplateAttrDO2VO(CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO) throws VciBaseException{
+              CodeClassifyTemplateAttrVO vo = new CodeClassifyTemplateAttrVO();
+        if(codeClassifyTemplateAttrDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setAttributeDataTypeText(VciFieldTypeEnum.getTextByValue(vo.getAttributedatatype()));
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyTemplateAttrVO addSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = new CodeClassifyTemplateAttrDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+        codeClassifyTemplateAttrMapper.insert(codeClassifyTemplateAttrDO);
+        return codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO);
+    }
+
+    /**
+     * 鎵归噺娣诲姞
+     * @param codeClassifyTemplateAttrDTOs 鏁版嵁浼犺緭瀵硅薄
+     * @return 淇濆瓨鍚庣殑鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateAttrVO> batchAddSave(List<CodeClassifyTemplateAttrDTO> codeClassifyTemplateAttrDTOs) throws VciBaseException{
+        if(CollectionUtils.isEmpty(codeClassifyTemplateAttrDTOs)){
+            return new ArrayList<>();
+        }
+
+        //鍙栨墍鏈夊睘鎬х殑鑻辨枃鍚嶇О锛岀涓変釜楠岃瘉闇�瑕佺敤鍒�
+        Map<String,CodeClassifyTemplateAttrDTO> attrDTOMap =codeClassifyTemplateAttrDTOs.stream().collect(Collectors.toMap(s->s.getId().toLowerCase(Locale.ROOT), t->t));
+
+        //鎵惧睘鎬т腑鏂囧悕瀛楅噸澶�
+        Map<String, Long> nameCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getName(), Collectors.counting()));
+        List<String> repeatNameList = nameCountMap.keySet().stream().filter(s -> nameCountMap.get(s) > 1).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(repeatNameList)){
+            throw new VciBaseException("妯℃澘灞炴�т腑鏂囧悕绉般�恵0}銆戦噸澶�",new String[]{ repeatNameList.stream().collect(Collectors.joining(","))});
+        }
+        //鎵惧睘鎬ц嫳鏂囧悕瀛楅噸澶�
+        Map<String, Long> idCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getId().toLowerCase(Locale.ROOT), Collectors.counting()));
+        List<String> repeatIdList = idCountMap.keySet().stream().filter(s -> idCountMap.get(s) > 1).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(repeatIdList)){
+            throw new VciBaseException("妯℃澘灞炴�ц嫳鏂囧悕绉般�恵0}銆戦噸澶�",new String[]{ repeatIdList.stream().collect(Collectors.joining(","))});
+        }
+
+        //妯℃澘oid
+        String CLASSIFYTEMPLATEOID = null;
+        //杞崲
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOInsert = new ArrayList<CodeClassifyTemplateAttrDO>();
+        List<String> prefix = new ArrayList<>();
+        List<String> suffix = new ArrayList<>();
+        List<String> dateFormates = new ArrayList<>();
+        for (CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO:codeClassifyTemplateAttrDTOs){
+            VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+            //灏咲TO杞崲涓篋O
+            CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = new CodeClassifyTemplateAttrDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+            codeClassifyTemplateAttrDOInsert.add(codeClassifyTemplateAttrDO);
+
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getPrefixValue())){
+                prefix.add(codeClassifyTemplateAttrDO.getPrefixValue());
+            }
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getSuffixValue())){
+                suffix.add(codeClassifyTemplateAttrDO.getSuffixValue());
+            }
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodeDateFormat())){
+                dateFormates.add(codeClassifyTemplateAttrDO.getCodeDateFormat());
+            }
+            //鍒ゆ柇浼犺繃鏉ョ殑鏋氫妇娉ㄥ叆鏄惁鏄痡sonArr鏍煎紡
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getEnumString())&&!checkKVArr(codeClassifyTemplateAttrDO.getEnumString())){
+                throw new VciBaseException("{0}{1}灞炴�х殑鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+            }
+            //鍒嗙被娉ㄥ叆
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getClassifyInvokeAttr())
+             && !CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(codeClassifyTemplateAttrDO.getClassifyInvokeLevel())
+            && VciBaseUtil.getInt(codeClassifyTemplateAttrDO.getClassifyInvokeLevel()) < 0){
+                throw new VciBaseException("{0}{1}灞炴�х殑鏄垎绫绘敞鍏ワ紝浣嗘槸娉ㄥ叆灞傜骇涓嶈兘灏忎簬0!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+            }
+
+            //鍒ゆ柇浼犺繃鏉ョ殑鍙傜収閰嶇疆鏄惁鏄痡son鏍煎紡
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getReferConfig())&&!checkKVObj(codeClassifyTemplateAttrDO.getReferConfig())){
+                throw new VciBaseException("{0}{1}灞炴�х殑鍙傜収閰嶇疆鏁版嵁鏍煎紡閿欒!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+            }
+            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodeDateFormat()) && !checkDateFormat(codeClassifyTemplateAttrDO.getCodeDateFormat())){
+                throw new VciBaseException("{0}{1}灞炴�х殑鏃堕棿鏍煎紡涓嶇鍚堣姹�",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+            }
+            //濡傛灉鏄粍鍚堣鍒欙紝閲岄潰浣跨敤鐨勫睘鎬т笉鑳界己澶憋紝涔熼兘寰楁樉绀�
+            String componentrule = codeClassifyTemplateAttrDTO.getComponentrule();
+            boolean isContainsDynamicParameter = PatternUtil.isContainsDynamicParameter(componentrule);
+            if(isContainsDynamicParameter){
+                List<String> userdAttrList =  PatternUtil.getKeyListByContent(componentrule);//鍖呭惈鐨勬墍鏈�${xxx}涓殑xxx
+                if(!CollectionUtils.isEmpty(userdAttrList)){
+                    String unExistAttr = userdAttrList.stream().filter(s -> !attrDTOMap.containsKey(s.toLowerCase(Locale.ROOT))).collect(Collectors.joining(","));
+                    if(StringUtils.isNotBlank(unExistAttr)){
+                          throw new VciBaseException("{0}灞炴�ф槸缁勫悎瑙勫垯锛屼絾鏄鍒欓噷鍖呭惈鐨勫睘鎬{1}]鍦ㄥ綋鍓嶆ā鏉夸腑涓嶅瓨鍦�!",new String[]{codeClassifyTemplateAttrDO.getName(), unExistAttr});
+                    }
+                    //瑕佺湅鐪嬭〃鍗曟槸鍚︽樉绀�
+                    String unFormDisplayAttr = userdAttrList.stream().filter(s -> !VciBaseUtil.getBoolean(attrDTOMap.getOrDefault(s.toLowerCase(Locale.ROOT),
+                            new CodeClassifyTemplateAttrDTO()).getFormdisplayflag())).collect(Collectors.joining(","));
+                    if(StringUtils.isNotBlank(unFormDisplayAttr)){
+                        throw new VciBaseException("{0}灞炴�ф槸缁勫悎瑙勫垯锛屼絾鏄鍒欓噷鍖呭惈鐨勫睘鎬{1}]鍦ㄥ綋鍓嶆ā鏉夸腑娌℃湁璁剧疆 琛ㄥ崟鏄剧ず ",new String[]{codeClassifyTemplateAttrDO.getName(),unFormDisplayAttr});
+                    }
+                }
+            }
+
+            if(CLASSIFYTEMPLATEOID==null){
+                CLASSIFYTEMPLATEOID = codeClassifyTemplateAttrDTO.getClassifytemplateoid();
+            }
+
+        }
+
+        //鎵ц鏁版嵁淇濆瓨鎿嶄綔
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+
+        //鍏堥兘鍒犱簡
+        VciQueryWrapperForDO deleteAttrWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        deleteAttrWrapper.addQueryMap("CLASSIFYTEMPLATEOID",CLASSIFYTEMPLATEOID);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDODelete = codeClassifyTemplateAttrMapper.selectByWrapper(deleteAttrWrapper);
+
+        //oids
+        List<String> oids = new ArrayList<String>();
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDODelete){
+            oids.add(codeClassifyTemplateAttrDO.getOid());
+        }
+        BatchCBO batchCBOTemplateDelete = new BatchCBO();
+        if(!CollectionUtils.isEmpty(oids)){
+            batchCBOTemplateDelete = codeClassifyTemplateAttrMapper.batchDeleteByOids(oids);
+        }
+
+        //鍐嶆柊澧�
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
+            BatchCBO batchCBOTemplateAdd = codeClassifyTemplateAttrMapper.batchInsert(codeClassifyTemplateAttrDOInsert);
+            batchCBOTemplateDelete.copyFromOther(batchCBOTemplateAdd);
+        }
+
+        //璋冪敤闃舵
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
+            BatchCBO batchCBO0 = codeTemplatePhaseServiceI.codeTemplateAttrModifyTrigger(codeClassifyTemplateAttrDOInsert);
+            batchCBOTemplateDelete.copyFromOther(batchCBO0);
+        }
+
+        SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+        //澶勭悊鍙緭鍙�夌殑瀛楃
+        if(!CollectionUtils.isEmpty(prefix)){
+            charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"prefix",prefix,sessionInfo);
+        }
+        if(!CollectionUtils.isEmpty(suffix)){
+            charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"suffix",suffix,sessionInfo);
+        }
+        if(!CollectionUtils.isEmpty(dateFormates)){
+            charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"dateFormates",dateFormates,sessionInfo);
+        }
+
+        WebUtil.setPersistence(true);//鎵ц淇濆瓨
+        boService.persistenceBatch(batchCBOTemplateDelete);//涓�璧锋墽琛屼繚瀛�
+        return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOInsert);
+    }
+
+    /**
+     * 淇敼涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public BaseResult editSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateAttrDTO.getOid(),"涓婚搴撳垎绫荤殑妯℃澘灞炴�т富閿�");
+
+         //鍒ゆ柇浼犺繃鏉ョ殑鏋氫妇娉ㄥ叆鏄惁鏄痡sonArr鏍煎紡
+         if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getEnumString())&&!checkKVArr(codeClassifyTemplateAttrDTO.getEnumString())){
+             throw new VciBaseException("鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!");
+         }
+
+         //鍒ゆ柇浼犺繃鏉ョ殑鍙傜収閰嶇疆鏄惁鏄痡son鏍煎紡
+         if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getReferbtmid())&&!checkKVObj(codeClassifyTemplateAttrDTO.getReferbtmid())){
+             throw new VciBaseException("鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!");
+         }
+
+
+         //妫�鏌s
+         CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDOCopyFromDTO = new CodeClassifyTemplateAttrDO();
+         BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDOCopyFromDTO);
+         boolean tsBoolean = boService.checkTs(codeClassifyTemplateAttrDOCopyFromDTO);
+         if(!tsBoolean){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+             return BaseResult.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
+         }
+
+         //灏咲TO杞崲涓篋O
+         CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByOid(codeClassifyTemplateAttrDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+         codeClassifyTemplateAttrMapper.updateByPrimaryKey(codeClassifyTemplateAttrDO);
+         return BaseResult.success(codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO));
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyTemplateAttrDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyTemplateAttrDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO, CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO) {
+        boService.checkTs(codeClassifyTemplateAttrDO);
+        if(!checkIsLinked(codeClassifyTemplateAttrDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyTemplateAttr(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�",codeClassifyTemplateAttrDTO.getOid(),"涓婚搴撳垎绫荤殑妯℃澘灞炴�х殑涓婚敭");
+        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByOid(codeClassifyTemplateAttrDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyTemplateAttrMapper.deleteByPrimaryKey(codeClassifyTemplateAttrDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+    * @param oid 涓婚敭
+    * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyTemplateAttrVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyTemplateAttrDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyTemplateAttrDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = codeClassifyTemplateAttrMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyTemplateAttrDO == null || StringUtils.isBlank(codeClassifyTemplateAttrDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyTemplateAttrDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = listCodeClassifyTemplateAttrDOByOidCollections(oidCollections);
+        return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyTemplateAttrDO> listCodeClassifyTemplateAttrDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = new ArrayList<CodeClassifyTemplateAttrDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyTemplateAttrDO> tempDOList =  codeClassifyTemplateAttrMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyTemplateAttrDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyTemplateAttrDOList;
+    }
+
+    /**
+     * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
+    }
+
+    /**
+     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅鐨勬墍鏈夋湭閫夋嫨鐨勫睘鎬�
+     * @param baseQueryObject
+     * @return
+     */
+    @Override
+    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
+        if(baseQueryObject.getConditionMap() == null){
+            baseQueryObject.setConditionMap(new HashMap<>());
+        }
+        DataGrid<OsBtmTypeAttributeVO> dataGrid=new DataGrid<OsBtmTypeAttributeVO>();
+        //妯℃澘oid
+        String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
+        String name = baseQueryObject.getConditionMap().getOrDefault("name","");
+        String id = baseQueryObject.getConditionMap().getOrDefault("id","");
+
+        //娌℃湁oid涓嶆墽琛岄�昏緫
+        if(StringUtils.isBlank(templateAttrOid)){
+            dataGrid.setData(new ArrayList<>());
+            dataGrid.setTotal(0);
+            return dataGrid;
+        }
+
+        //鏌ヨ妯℃澘瀵硅薄
+        CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(templateAttrOid);
+
+        //杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
+        List<OsBtmTypeAttributeVO> boAttrs = this.btmService.listAttributeByBtmId(codeClassifyTemplateDO.getBtmTypeId());
+
+        //鎶婇粯璁ょ殑灞炴�т篃娣诲姞鍒癰oAttrs
+        if(boAttrs == null){
+            boAttrs = new ArrayList<>();
+        }
+        if(!CollectionUtils.isEmpty(attributeService.getDefaultAttributeVOs())){
+            List<OsBtmTypeAttributeVO> finalBoAttrs = boAttrs;
+            attributeService.getDefaultAttributeVOs().stream().forEach(attr-> {
+                OsBtmTypeAttributeVO attributeVO = new OsBtmTypeAttributeVO();
+                BeanUtil.convert(attr, attributeVO);
+                if (VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(attributeVO.getId())) {
+                    attributeVO.setName("浼佷笟缂栫爜");
+                }
+                if ("name".equalsIgnoreCase(attributeVO.getId())) {
+                    attributeVO.setName("闆嗗洟鐮�");
+                }
+                attributeVO.setAttrDataType(attr.getAttributeDataType());
+                attributeVO.setAttributeLength(attr.getAttrLength());
+                attributeVO.setReferBtmTypeId(attr.getBtmTypeId());
+                attributeVO.setReferBtmTypeName(attr.getBtmTypeName());
+                finalBoAttrs.add(attributeVO);
+            });
+            boAttrs = finalBoAttrs;
+        }
+
+        //杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrMapper.selectByWrapper(queryWrapper);
+        List<String> btmOids = new ArrayList<String>();
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
+            btmOids.add(codeClassifyTemplateAttrDO.getId());
+        }
+
+        //杩囨护鎺夊凡缁忓瓨鍦ㄧ殑灞炴��
+        List<OsBtmTypeAttributeVO> boAttrss = new ArrayList<OsBtmTypeAttributeVO>();
+        for (OsBtmTypeAttributeVO osBtmTypeAttributeVO:boAttrs){
+            if(!btmOids.contains(osBtmTypeAttributeVO.getId())){
+                //鐪嬬湅鏄笉鏄湁妯$硦鏌ヨ
+                boolean inSearch = true;
+                if(StringUtils.isNotBlank(name) && !osBtmTypeAttributeVO.getName().contains(name.replace("*",""))){
+                    inSearch = false;
+                }
+                if(StringUtils.isNotBlank(id) && !osBtmTypeAttributeVO.getId().contains(id.replace("*",""))){
+                    inSearch = false;
+                }
+                if(inSearch) {
+                    boAttrss.add(osBtmTypeAttributeVO);
+                }
+            }
+        }
+        dataGrid.setData(boAttrss);
+        dataGrid.setTotal(boAttrss.size());
+        return dataGrid;
+    }
+
+    /**
+     * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅宸查�夋嫨鐨勫睘鎬�
+     * @param baseQueryObject
+     * @return
+     */
+    @Override
+    public DataGrid<OsBtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
+        DataGrid<OsBtmTypeAttributeVO> dataGrid=new DataGrid<OsBtmTypeAttributeVO>();
+        //妯℃澘oid
+        String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
+
+        //娌℃湁oid涓嶆墽琛岄�昏緫
+        if(StringUtils.isBlank(templateAttrOid)){
+            dataGrid.setData(new ArrayList<>());
+            dataGrid.setTotal(0);
+            return dataGrid;
+        }
+
+        //鏌ヨ妯℃澘瀵硅薄
+        CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(templateAttrOid);
+
+        //杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
+        List<OsBtmTypeAttributeVO> boAttrs = this.btmService.listAttributeByBtmIdHasDefault(codeClassifyTemplateDO.getBtmTypeId());
+
+        //杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrMapper.selectByWrapper(queryWrapper);
+        List<String> btmOids = new ArrayList<String>();
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
+            btmOids.add(codeClassifyTemplateAttrDO.getId());
+        }
+
+        //杩囨护鎺夐櫎浜嗚嚜韬殑鍒殑灞炴��
+        List<OsBtmTypeAttributeVO> boAttrss = new ArrayList<OsBtmTypeAttributeVO>();
+        for (OsBtmTypeAttributeVO osBtmTypeAttributeVO:boAttrs){
+            if(btmOids.contains(osBtmTypeAttributeVO.getId())){
+                boAttrss.add(osBtmTypeAttributeVO);
+            }
+        }
+        dataGrid.setData(boAttrss);
+        dataGrid.setTotal(boAttrss.size());
+        return dataGrid;
+    }
+    /**
+     * 鍚屾鍒板叾浠栨ā鏉�
+     * @param codeClassifyTemplateAttrDTO oid
+     * @return
+     */
+    @Override
+    public BaseResult copyto(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
+
+        String templateAttrOid = codeClassifyTemplateAttrDTO.getOid();
+
+        //鏌ヨ鍑烘潵瑕佸鍒剁殑瀵硅薄
+        CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO = selectByOid(templateAttrOid);
+        String id = codeClassifyTemplateAttrDO.getId();//鑻辨枃鍚嶇О
+        String classfyTemplateOid = codeClassifyTemplateAttrDO.getClassifyTemplateOid();
+
+        //鏌ヨ鍏朵粬id=id鐨勬ā鏉垮睘鎬�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        queryWrapper.addQueryMap("id",id);
+        //鎵�鏈塱d=id鐨勬ā鏉垮睘鎬�
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrMapper.selectByWrapper(queryWrapper);
+        //瑕佸垹闄ょ殑妯℃澘灞炴�х殑oids
+        List<String> deleteOids = new ArrayList<String>();
+        //瑕佷慨鏀圭殑妯℃澘灞炴�у璞�
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOListInsert = new ArrayList<CodeClassifyTemplateAttrDO>();
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDOi:codeClassifyTemplateAttrDOList){
+            String oid = codeClassifyTemplateAttrDOi.getOid();
+            String templateOldOid = codeClassifyTemplateAttrDOi.getClassifyTemplateOid();
+
+            CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDOInsert = new CodeClassifyTemplateAttrDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,codeClassifyTemplateAttrDOInsert);
+            codeClassifyTemplateAttrDOInsert.setOid(oid);
+            codeClassifyTemplateAttrDOInsert.setClassifyTemplateOid(templateOldOid);
+            codeClassifyTemplateAttrDOListInsert.add(codeClassifyTemplateAttrDOInsert);
+
+            deleteOids.add(codeClassifyTemplateAttrDOi.getOid());
+        }
+
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+
+        //鍒犻櫎
+        BatchCBO batchCBOTemplateAttrDelete = codeClassifyTemplateAttrMapper.batchDeleteByOids(deleteOids);
+
+        //鍐嶆柊澧�
+        BatchCBO batchCBOTemplateAttrInsert = codeClassifyTemplateAttrMapper.batchInsert(codeClassifyTemplateAttrDOListInsert);
+        batchCBOTemplateAttrDelete.copyFromOther(batchCBOTemplateAttrInsert);
+
+        WebUtil.setPersistence(true);//鎵ц淇濆瓨
+        boService.persistenceBatch(batchCBOTemplateAttrDelete);//涓�璧锋墽琛屼繚瀛�
+
+        return BaseResult.success();
+    }
+
+    /**
+     * 浣跨敤妯℃澘鐨勪富閿幏鍙栨ā鏉跨殑灞炴��--鎵归噺
+     *
+     * @param templateOidCollection 妯℃澘鐨勪富閿�
+     * @return 灞炴�х殑淇℃伅
+     */
+    @Override
+    public List<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByTemplateOids(Collection<String> templateOidCollection) {
+        if(CollectionUtils.isEmpty(templateOidCollection)){
+            return new ArrayList<>();
+        }
+        List<CodeClassifyTemplateAttrDO> attrDOList = new ArrayList<>();
+        VciBaseUtil.switchCollectionForOracleIn(templateOidCollection).stream().forEach(templateOids->{
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("classifytemplateoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(templateOids.toArray(new String[0])) + ")");
+            PageHelper pageHelper = new PageHelper(-1);
+            pageHelper.addDefaultAsc("orderNum");
+            List<CodeClassifyTemplateAttrDO> attrDOS = codeClassifyTemplateAttrMapper.selectByCondition(conditionMap, pageHelper);
+            if(!CollectionUtils.isEmpty(attrDOS)){
+                attrDOList.addAll(attrDOS);
+            }
+        });
+        return codeClassifyTemplateAttrDO2VOs(attrDOList);
+    }
+
+    public boolean checkKVArr(String kvString){
+        boolean isKV = true;
+        try {
+            JSONObject.parseArray(kvString, KeyValue.class);
+        }catch (Exception e){
+            isKV=false;
+        }
+        return isKV;
+    }
+    public boolean checkKVObj(String kvString){
+        boolean isKV = true;
+        try {
+            JSONObject.parseObject(kvString, UIFormReferVO.class);
+        }catch (Exception e){
+            isKV=false;
+        }
+        return isKV;
+    }
+
+    /**
+     * 鏍¢獙鏃堕棿鏍煎紡
+     * @param dateFormat 鏃堕棿鏍煎紡
+     * @return true琛ㄧず鏍¢獙閫氳繃
+     */
+    public boolean checkDateFormat(String dateFormat){
+        try{
+            VciDateUtil.date2Str(new Date(),dateFormat);
+            return  true;
+        }catch (Throwable e){
+            return false;
+        }
+    }
+
+
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java
new file mode 100644
index 0000000..baa6098
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java
@@ -0,0 +1,380 @@
+package org.springblade.code.service.impl;
+
+import com.vci.mdm.dao.CodeClassifyTemplateButtonDaoI;
+import com.vci.mdm.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.mdm.model.CodeClassifyTemplateButtonDO;
+import com.vci.mdm.pagemodel.CodeButtonVO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateButtonVO;
+import com.vci.mdm.service.CodeButtonServiceI;
+import com.vci.mdm.service.CodeClassifyTemplateButtonServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+/**
+ * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyTemplateButtonServiceImpl implements CodeClassifyTemplateButtonServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyTemplateButtonDaoI codeClassifyTemplateButtonMapper;
+
+    /**
+     * 鎸夐挳鐨勬湇鍔�
+     */
+    @Autowired
+    private CodeButtonServiceI buttonService;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        final String[] classifyTemplateOid = {""};
+        if(conditionMap!=null){
+            conditionMap.forEach((key,value)->{
+                if("classifytemplateoid".equalsIgnoreCase(key)){
+                    classifyTemplateOid[0] = value;
+                }
+            });
+        }
+        if(StringUtils.isBlank(classifyTemplateOid[0])){
+            return new DataGrid<>();
+        }
+
+        List<CodeClassifyTemplateButtonDO> doList = codeClassifyTemplateButtonMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeClassifyTemplateButtonVO> dataGrid=new DataGrid<CodeClassifyTemplateButtonVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeClassifyTemplateButtonDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateButtonMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO>  codeClassifyTemplateButtonDOs) throws VciBaseException{
+       return codeClassifyTemplateButtonDO2VOs(codeClassifyTemplateButtonDOs,false);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勪俊鎭�
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOs, boolean hasButtonVO) throws VciBaseException{
+        List<CodeClassifyTemplateButtonVO> voList = new ArrayList<CodeClassifyTemplateButtonVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOs)){
+            for(CodeClassifyTemplateButtonDO 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(CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO) throws VciBaseException{
+              CodeClassifyTemplateButtonVO vo = new CodeClassifyTemplateButtonVO();
+        if(codeClassifyTemplateButtonDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateButtonDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyTemplateButtonVO addSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeClassifyTemplateButtonDTO.getClassifytemplateoid(),"妯℃澘鐨勪富閿�");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = new CodeClassifyTemplateButtonDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+        if(codeClassifyTemplateButtonDO.getOrderNum()== null){
+            //鏌ヨ鍏ㄩ儴
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("classifytemplateoid",codeClassifyTemplateButtonDTO.getClassifytemplateoid());
+            Long count = codeClassifyTemplateButtonMapper.countByCondition(conditionMap);
+            if(count == null){
+                count = 0L;
+            }
+            codeClassifyTemplateButtonDO.setOrderNum(Long.valueOf(count + 1L).intValue());
+        }
+        codeClassifyTemplateButtonMapper.insert(codeClassifyTemplateButtonDO);
+        return codeClassifyTemplateButtonDO2VO(codeClassifyTemplateButtonDO);
+    }
+
+    /**
+     * 淇敼涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeClassifyTemplateButtonVO editSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateButtonDTO.getOid(),"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = selectByOid(codeClassifyTemplateButtonDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+         codeClassifyTemplateButtonMapper.updateByPrimaryKey(codeClassifyTemplateButtonDO);
+         return codeClassifyTemplateButtonDO2VO(codeClassifyTemplateButtonDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyTemplateButtonDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyTemplateButtonDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO, CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO) {
+        CodeClassifyTemplateButtonDO tsDO = new CodeClassifyTemplateButtonDO();
+        BeanUtil.convert(codeClassifyTemplateButtonDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codeClassifyTemplateButtonDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyTemplateButton(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�",codeClassifyTemplateButtonDTO.getOid(),"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽殑涓婚敭");
+        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = selectByOid(codeClassifyTemplateButtonDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyTemplateButtonMapper.deleteByPrimaryKey(codeClassifyTemplateButtonDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyTemplateButtonVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyTemplateButtonDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyTemplateButtonDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO = codeClassifyTemplateButtonMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyTemplateButtonDO == null || StringUtils.isBlank(codeClassifyTemplateButtonDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyTemplateButtonDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = listCodeClassifyTemplateButtonDOByOidCollections(oidCollections);
+        return codeClassifyTemplateButtonDO2VOs(codeClassifyTemplateButtonDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyTemplateButtonDO> listCodeClassifyTemplateButtonDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = new ArrayList<CodeClassifyTemplateButtonDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyTemplateButtonDO> tempDOList =  codeClassifyTemplateButtonMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyTemplateButtonDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  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>();
+        }
+        return gridCodeClassifyTemplateButton(conditionMap,pageHelper);
+    }
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     *
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    @Override
+    public BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) {
+        BatchCBO batchCBO = new BatchCBO();
+        if(StringUtils.isNotBlank(classifyTemplateOid)){
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("classifyTemplateOid",classifyTemplateOid);
+            List<CodeClassifyTemplateButtonDO> templateButtonDOS = codeClassifyTemplateButtonMapper.selectByCondition(conditionMap, new PageHelper(-1));
+            if(!CollectionUtils.isEmpty(templateButtonDOS)){
+                batchCBO.copyFromOther(codeClassifyTemplateButtonMapper.batchDeleteByOids(templateButtonDOS.stream().map(CodeClassifyTemplateButtonDO::getOid).collect(Collectors.toList())));
+            }
+        }
+        return batchCBO;
+    }
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
+     *
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
+     */
+    @Override
+    public List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid) {
+       return listButtonByTemplateOid(templateOid,false);
+    }
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇鎵╁睍鐨勬寜閽�
+     *
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勬樉绀轰俊鎭�
+     * @return 鎸夐挳鐨勭浉鍏崇殑淇℃伅
+     */
+    @Override
+    public List<CodeClassifyTemplateButtonVO> listButtonByTemplateOid(String templateOid, boolean hasButtonVO) {
+        if(StringUtils.isBlank(templateOid)){
+            return new ArrayList<>();
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("classifyTemplateOid",templateOid);
+        PageHelper pageHelper = new PageHelper(-1);
+        pageHelper.addDefaultAsc("orderNum");
+        List<CodeClassifyTemplateButtonDO> templateButtonDOS = codeClassifyTemplateButtonMapper.selectByCondition(conditionMap, pageHelper);
+        return codeClassifyTemplateButtonDO2VOs(templateButtonDOS,hasButtonVO);
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateMapServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateMapServiceImpl.java
new file mode 100644
index 0000000..5d88566
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateMapServiceImpl.java
@@ -0,0 +1,275 @@
+package org.springblade.code.service.impl;
+
+import com.vci.mdm.dao.CodeClassifyTemplateMapDaoI;
+import com.vci.mdm.dto.CodeClassifyTemplateMapDTO;
+import com.vci.mdm.model.CodeClassifyTemplateMapDO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateMapVO;
+import com.vci.mdm.service.CodeClassifyTemplateMapServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 涓婚搴撴ā鏉挎槧灏勮鍒欐湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyTemplateMapServiceImpl implements CodeClassifyTemplateMapServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyTemplateMapDaoI codeClassifyTemplateMapMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateMapVO> gridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeClassifyTemplateMapDO> doList = codeClassifyTemplateMapMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeClassifyTemplateMapVO> dataGrid=new DataGrid<CodeClassifyTemplateMapVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeClassifyTemplateMapDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateMapMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateMapDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateMapVO> codeClassifyTemplateMapDO2VOs(Collection<CodeClassifyTemplateMapDO>  codeClassifyTemplateMapDOs) throws VciBaseException{
+        List<CodeClassifyTemplateMapVO> voList = new ArrayList<CodeClassifyTemplateMapVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateMapDOs)){
+           for(CodeClassifyTemplateMapDO s: codeClassifyTemplateMapDOs){
+                CodeClassifyTemplateMapVO vo =  codeClassifyTemplateMapDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateMapDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyTemplateMapVO codeClassifyTemplateMapDO2VO(CodeClassifyTemplateMapDO codeClassifyTemplateMapDO) throws VciBaseException{
+              CodeClassifyTemplateMapVO vo = new CodeClassifyTemplateMapVO();
+        if(codeClassifyTemplateMapDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateMapDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+//            if(true){
+//                vo.setLcStatusText({lcStatusFullClassName}.getTextByValue(vo.getLcStatus()));
+//            }
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyTemplateMapVO addSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateMapDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = new CodeClassifyTemplateMapDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateMapDTO,codeClassifyTemplateMapDO);
+        codeClassifyTemplateMapMapper.insert(codeClassifyTemplateMapDO);
+        return codeClassifyTemplateMapDO2VO(codeClassifyTemplateMapDO);
+    }
+
+    /**
+     * 淇敼涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeClassifyTemplateMapVO editSave(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyTemplateMapDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateMapDTO.getOid(),"涓婚搴撴ā鏉挎槧灏勮鍒欎富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = selectByOid(codeClassifyTemplateMapDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateMapDTO,codeClassifyTemplateMapDO);
+         codeClassifyTemplateMapMapper.updateByPrimaryKey(codeClassifyTemplateMapDO);
+         return codeClassifyTemplateMapDO2VO(codeClassifyTemplateMapDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyTemplateMapDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyTemplateMapDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO, CodeClassifyTemplateMapDO codeClassifyTemplateMapDO) {
+        if(!checkIsLinked(codeClassifyTemplateMapDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param codeClassifyTemplateMapDTO 涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyTemplateMap(CodeClassifyTemplateMapDTO codeClassifyTemplateMapDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateMapDTO,"涓婚搴撴ā鏉挎槧灏勮鍒欐暟鎹璞�",codeClassifyTemplateMapDTO.getOid(),"涓婚搴撴ā鏉挎槧灏勮鍒欑殑涓婚敭");
+        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = selectByOid(codeClassifyTemplateMapDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateMapDTO,codeClassifyTemplateMapDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyTemplateMapMapper.deleteByPrimaryKey(codeClassifyTemplateMapDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+    * @param oid 涓婚敭
+    * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyTemplateMapVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyTemplateMapDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyTemplateMapDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateMapDO codeClassifyTemplateMapDO = codeClassifyTemplateMapMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyTemplateMapDO == null || StringUtils.isBlank(codeClassifyTemplateMapDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyTemplateMapDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓婚搴撴ā鏉挎槧灏勮鍒�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyTemplateMapVO> listCodeClassifyTemplateMapByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOList = listCodeClassifyTemplateMapDOByOidCollections(oidCollections);
+        return codeClassifyTemplateMapDO2VOs(codeClassifyTemplateMapDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyTemplateMapDO> listCodeClassifyTemplateMapDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOList = new ArrayList<CodeClassifyTemplateMapDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyTemplateMapDO> tempDOList =  codeClassifyTemplateMapMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyTemplateMapDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyTemplateMapDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収涓婚搴撴ā鏉挎槧灏勮鍒欏垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 涓婚搴撴ā鏉挎槧灏勮鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateMapVO> refDataGridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeClassifyTemplateMap(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateServiceImpl.java
new file mode 100644
index 0000000..afe04f8
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateServiceImpl.java
@@ -0,0 +1,1084 @@
+package org.springblade.code.service.impl;
+
+import com.vci.corba.common.VCIError;
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.mdm.dao.*;
+import com.vci.mdm.dto.CodeClassifyTemplateDTO;
+import com.vci.mdm.lifecycle.CodeClassifyTemplateLC;
+import com.vci.mdm.model.*;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateVO;
+import com.vci.mdm.service.*;
+import com.vci.starter.revision.bo.TreeWrapperOptions;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.*;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciParentQueryOption;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+import plm.bs.bom.clientobject.ClientBusinessObjectOperation;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.*;
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+/**
+ * 鍒嗙被妯℃澘瀵硅薄鏈嶅姟
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyTemplateServiceImpl implements CodeClassifyTemplateServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyTemplateDaoI codeClassifyTemplateMapper;
+
+    /**
+     * 妯℃澘娴佺▼鎿嶄綔灞�
+     */
+    @Resource
+    private CodeClassifyProcessTempDaoI codeClassifyProcessTempDaoI;
+
+    /**
+     * 妯℃澘娴佺▼鎿嶄綔灞�
+     */
+    @Resource
+    private CodeTemplatePhaseDaoI codeTemplatePhaseDaoI;
+
+    /**
+     * 妯℃澘娴佺▼鎿嶄綔灞�
+     */
+    @Resource
+    private CodeClassifyTemplateButtonDaoI codeClassifyTemplateButtonDaoI;
+
+    /**
+     * 妯℃澘娴佺▼鎿嶄綔灞�
+     */
+    @Resource
+    private CodePhaseAttrDaoI codePhaseAttrDaoI;
+
+    /**
+     * 鍒嗙被
+     */
+    @Resource
+    private CodeClassifyDaoI codeClassifyDaoI;
+
+    /**
+     * 妯℃澘闃舵
+     */
+    @Resource
+    private CodeTemplatePhaseServiceI codeTemplatePhaseServiceI;
+
+    /**
+     * 妯℃澘娴佺▼
+     */
+    @Resource
+    private CodeClassifyProcessTempServiceI codeClassifyProcessTempServiceI;
+
+    /**
+     * 妯℃澘鎸夐挳
+     */
+    @Resource
+    private CodeClassifyTemplateButtonServiceI codeClassifyTemplateButtonServiceI;
+
+
+    /**
+     * 妯℃澘灞炴��
+     */
+    @Resource
+    private CodeClassifyTemplateAttrDaoI codeClassifyTemplateAttrDaoI;
+
+    /**
+     * 妯℃澘灞炴�х殑鏈嶅姟
+     */
+    @Lazy
+    @Autowired(required = false)
+    private CodeClassifyTemplateAttrServiceI templateAttrService;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+    * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉�
+    */
+    private static  final String PARENT_FIELD_NAME = "";
+    /**
+     * 鏌ヨ鍒嗙被妯℃澘瀵硅薄 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 鍒嗙被妯℃澘瀵硅薄 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject) throws VciBaseException{
+        List<CodeClassifyTemplateDO> doList =selectCodeClassifyTemplateDOByTree(treeQueryObject);
+        List<CodeClassifyTemplateVO> voList = codeClassifyTemplateDO2VOs(doList);
+        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME);
+        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
+        return revisionModelUtil.doList2Trees(voList,treeWrapperOptions,(CodeClassifyTemplateVO s) ->{
+            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
+            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
+                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
+        });
+    }
+    /**
+      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+      *
+      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+      */
+    @Override
+    public List<CodeClassifyTemplateDO> selectCodeClassifyTemplateDOByTree(TreeQueryObject treeQueryObject) {
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(null,CodeClassifyTemplateDO.class);
+        VciParentQueryOption parentQueryOption = new VciParentQueryOption();
+        parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
+        queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
+        return codeClassifyTemplateMapper.selectByWrapper(queryWrapperForDO);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO>  codeClassifyTemplateDOs) throws VciBaseException{
+        return codeClassifyTemplateDO2VOs(codeClassifyTemplateDOs,false);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyTemplateDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasAttr 鏄惁鍖呭惈灞炴��
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO>  codeClassifyTemplateDOs,boolean hasAttr) throws VciBaseException{
+        List<CodeClassifyTemplateVO> voList = new ArrayList<CodeClassifyTemplateVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateDOs)){
+            for(CodeClassifyTemplateDO s: codeClassifyTemplateDOs){
+                CodeClassifyTemplateVO vo =  codeClassifyTemplateDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        if(hasAttr){
+            //涓�涓垎绫婚噷闈㈡�讳笉鑳借秴杩�1000涓敓鏁堢殑鐗堟湰鍚э紒锛侊紒
+            VciBaseUtil.switchCollectionForOracleIn(voList.stream().map(CodeClassifyTemplateVO::getOid).collect(Collectors.toList())).forEach(tempOids->{
+                List<CodeClassifyTemplateAttrVO> attrVOList = templateAttrService.listCodeClassifyTemplateAttrByTemplateOids(tempOids);
+                if(!CollectionUtils.isEmpty(attrVOList)){
+                    Map<String, List<CodeClassifyTemplateAttrVO>> attrVOMap = attrVOList.stream().collect(Collectors.groupingBy(s -> s.getClassifytemplateoid()));
+                    voList.stream().forEach(templateVO->{
+                        if(attrVOMap.containsKey(templateVO.getOid())){
+                            templateVO.setAttributes(attrVOMap.get(templateVO.getOid()));
+                        }
+                    });
+                }
+            });
+
+        }
+        return voList;
+    }
+
+
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyTemplateDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyTemplateVO codeClassifyTemplateDO2VO(CodeClassifyTemplateDO codeClassifyTemplateDO) throws VciBaseException{
+              CodeClassifyTemplateVO vo = new CodeClassifyTemplateVO();
+        if(codeClassifyTemplateDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(CodeClassifyTemplateLC.getTextByValue(vo.getLcStatus()));
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public BaseResult<CodeClassifyTemplateVO> addSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeClassifyTemplateDO codeClassifyTemplateDO = new CodeClassifyTemplateDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDO);
+
+        //鏌ヨ鍒嗙被浠ュ強涓婄骇鍒嗙被鐨勪笟鍔$被鍨媌tmtypeid銆乥tmtypename
+        List<CodeClassifyDO> codeClassifyDOList = codeClassifyDaoI.selectAllLevelParents(codeClassifyTemplateDTO.getCodeclassifyoid());
+
+        //鎵�鏈夊垎绫婚兘娌℃湁涓氬姟绫诲瀷锛岃繑鍥炴彁绀�
+        if(codeClassifyDOList.size()==0){
+            return BaseResult.fail("娣诲姞妯℃澘娣诲姞澶辫触,鍒嗙被鍜屼笂绾у垎绫婚兘娌℃湁鍏宠仈涓氬姟绫诲瀷锛�");
+        }
+
+        //璁剧疆btmtypeid鍜宯ame
+        CodeClassifyDO codeClassifyDO = codeClassifyDOList.get(0);
+        codeClassifyTemplateDO.setBtmTypeId(codeClassifyDO.getBtmTypeId());
+        codeClassifyTemplateDO.setBtmTypeName(codeClassifyDO.getBtmTypeName());
+        codeClassifyTemplateDO.setLcStatus(FRAMEWORK_RELEASE_EDITING);
+        codeClassifyTemplateMapper.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 BaseResult.success(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
+    }
+
+    /**
+     * 淇敼鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public BaseResult editSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateDTO.getOid(),"鍒嗙被妯℃澘瀵硅薄涓婚敭");
+         //妫�鏌s
+         CodeClassifyTemplateDO codeClassifyTemplateDOCopyFromDTO = new CodeClassifyTemplateDO();
+         BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDOCopyFromDTO);
+         boolean tsBoolean = boService.checkTs(codeClassifyTemplateDOCopyFromDTO);
+         if(!tsBoolean){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+             return BaseResult.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
+         }
+
+         //灏咲TO杞崲涓篋O
+         CodeClassifyTemplateDO codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
+         String lcstatus = codeClassifyTemplateDO.getLcStatus();
+         String versionvalue = codeClassifyTemplateDO.getVersionValue();
+
+         //鍙湁缂栬緫涓墠鑳戒慨鏀�
+         if(!CodeClassifyTemplateLC.EDITING.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
+             return BaseResult.fail("鍙湁缂栬緫涓殑锛屾ā鏉挎墠鑳戒慨鏀癸紒");
+         }
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateDTO,codeClassifyTemplateDO);
+         //涓嶄慨鏀圭増鏈彿鍜岀姸鎬�
+         codeClassifyTemplateDO.setLcStatus(lcstatus);
+         codeClassifyTemplateDO.setVersionValue(versionvalue);
+         codeClassifyTemplateMapper.updateByPrimaryKey(codeClassifyTemplateDO);
+         return BaseResult.success(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
+     }
+
+    /**
+     * 妫�鏌� 鍒嗙被妯℃澘瀵硅薄鏄惁鍒犻櫎
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛屽繀椤昏鏈塷id鍜宼s灞炴��
+     * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult checkIsCanDelete(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"鏁版嵁浼犺緭瀵硅薄",codeClassifyTemplateDTO.getOid(),"涓婚敭");
+        CodeClassifyTemplateDO codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
+        return checkIsCanDeleteForDO(codeClassifyTemplateDTO,codeClassifyTemplateDO);
+    }
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyTemplateDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyTemplateDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyTemplateDTO codeClassifyTemplateDTO, CodeClassifyTemplateDO codeClassifyTemplateDO) {
+        CodeClassifyTemplateDO codeClassifyTemplateDOCopyFromDTO = new CodeClassifyTemplateDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDOCopyFromDTO);
+        boService.checkTs(codeClassifyTemplateDOCopyFromDTO);
+        //鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
+        if(checkChildIsLinked(codeClassifyTemplateDO.getOid())){
+            return BaseResult.fail(DATA_CASCADE_LINKED_NOT_DELETE,new String[]{""});
+        }
+        return BaseResult.success(checkHasChild(codeClassifyTemplateDO.getOid()));
+    }
+    /**
+      * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+      *
+      * @param oid 涓婚敭
+      * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+      * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+      */
+    @Override
+    public boolean checkChildIsLinked(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        List<String> childOids = codeClassifyTemplateMapper.selectAllLevelChildOid(oid.trim());
+        if(!CollectionUtils.isEmpty(childOids)){
+             for(String childOid: childOids){
+                 if(!checkIsLinked(childOid)){
+                     return false;
+                 }
+             }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+    * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+    *
+    * @param oid 涓婚敭
+    * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+    * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    @Override
+    public boolean checkHasChild(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        return codeClassifyTemplateMapper.countAllLevelChildOid(oid.trim()) > 0;
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被妯℃澘瀵硅薄
+     * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyTemplate(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
+        checkIsCanDelete(codeClassifyTemplateDTO);
+        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"鍒嗙被妯℃澘瀵硅薄鏁版嵁瀵硅薄",codeClassifyTemplateDTO.getOid(),"鍒嗙被妯℃澘瀵硅薄鐨勪富閿�");
+
+        CodeClassifyTemplateDO codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
+
+        //鍙湁缂栬緫涓墠鑳藉垹
+        if(!CodeClassifyTemplateLC.EDITING.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
+            return BaseResult.fail("鍙湁缂栬緫涓殑锛屾ā鏉挎墠鑳藉垹闄わ紒");
+        }
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyTemplateDTO,codeClassifyTemplateDO);
+
+        //妯℃澘oid
+        String templateOid = codeClassifyTemplateDTO.getOid();
+
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+        BatchCBO batchCBO = new BatchCBO();
+
+        if(baseResult.isSuccess()) {
+            //鎵句笅绾х殑锛岃繖涓槸鍙互鍒犻櫎鐨勬椂鍊�
+            List<String> childrenOids = codeClassifyTemplateMapper.selectAllLevelChildOid(codeClassifyTemplateDO.getOid().trim());
+            if (!CollectionUtils.isEmpty(childrenOids)) {
+                Collection<Collection<String>> childrenCollections = VciBaseUtil.switchCollectionForOracleIn(childrenOids);
+                for (Collection<String> s : childrenCollections) {
+                    BatchCBO batchCBOi = codeClassifyTemplateMapper.batchDeleteByOids(s);
+                    batchCBO.copyFromOther(batchCBOi);
+                }
+            }
+        }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO_delete = codeClassifyTemplateMapper.deleteByPrimaryKey(codeClassifyTemplateDO.getOid());
+        batchCBO.copyFromOther(batchCBO_delete);
+
+        //鍒犻櫎妯℃澘灞炴��
+        VciQueryWrapperForDO templateQueryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        templateQueryWrapper.addQueryMap("classifyTemplateOid",templateOid);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(templateQueryWrapper);
+
+        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)) {
+            List<String> templateAttrOids = new ArrayList<String>();
+            for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
+                templateAttrOids.add(codeClassifyTemplateAttrDO.getOid());
+            }
+            BatchCBO batchCBO_templateAttr_delete = codeClassifyTemplateAttrDaoI.batchDeleteByOids(templateAttrOids);
+            batchCBO.copyFromOther(batchCBO_templateAttr_delete);
+        }
+
+        //璋冪敤妯℃澘闃舵鏂规硶
+        BatchCBO batchCBO_phase = codeTemplatePhaseServiceI.codeTemplateDeleteTrigger(templateOid);
+        batchCBO.copyFromOther(batchCBO_phase);
+
+
+
+        //璋冪敤妯℃澘鎸夐挳鏂规硶
+        BatchCBO batchCBO_button = codeClassifyTemplateButtonServiceI.codeTemplateDeleteTrigger(templateOid);
+        batchCBO.copyFromOther(batchCBO_button);
+
+        //璋冪敤妯℃澘娴佺▼鏂规硶
+        BatchCBO batchCBO_process = codeClassifyProcessTempServiceI.codeTemplateDeleteTrigger(templateOid);
+        batchCBO.copyFromOther(batchCBO_process);
+
+        WebUtil.setPersistence(true);//鎵ц淇濆瓨
+        boService.persistenceBatch(batchCBO);//涓�璧锋墽琛屼繚瀛�
+
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄
+    * @param oid 涓婚敭
+    * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyTemplateVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyTemplateDO2VO(selectByOid(oid));
+    }
+
+    /**
+     * 涓婚敭鑾峰彇鍒嗙被妯℃澘瀵硅薄(鍖呭惈灞炴�э級
+     *
+     * @param oid 涓婚敭
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyTemplateVO getObjectHasAttrByOid(String oid) throws VciBaseException {
+        List<CodeClassifyTemplateDO> doList = new ArrayList<>();
+        doList.add(selectByOid(oid));
+        List<CodeClassifyTemplateVO> templateVOS = codeClassifyTemplateDO2VOs(doList, true);
+        return CollectionUtils.isEmpty(templateVOS)?null:templateVOS.get(0);
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyTemplateDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyTemplateDO == null || StringUtils.isBlank(codeClassifyTemplateDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyTemplateDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被妯℃澘瀵硅薄
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyTemplateVO> listCodeClassifyTemplateByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyTemplateDO> codeClassifyTemplateDOList = listCodeClassifyTemplateDOByOidCollections(oidCollections);
+        return codeClassifyTemplateDO2VOs(codeClassifyTemplateDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyTemplateDO> listCodeClassifyTemplateDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyTemplateDO> codeClassifyTemplateDOList = new ArrayList<CodeClassifyTemplateDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyTemplateDO> tempDOList =  codeClassifyTemplateMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyTemplateDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyTemplateDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException{
+        if(treeQueryObject == null){
+            treeQueryObject = new TreeQueryObject();
+        }
+        if(treeQueryObject.getConditionMap() == null){
+            treeQueryObject.setConditionMap(new HashMap<>());
+        }
+        if(treeQueryObject.getConditionMap().containsKey(LC_STATUS)) {
+            treeQueryObject.getConditionMap().remove(LC_STATUS);
+        }
+        treeQueryObject.getConditionMap().put(LC_STATUS,CodeClassifyTemplateLC.RELEASED.getValue());
+        return treeCodeClassifyTemplate(treeQueryObject);
+    }
+
+    /**
+     * 鍒嗙被妯℃澘鍒楄〃
+     *
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateVO> gridCodeClassifyTemplate(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        DataGrid<CodeClassifyTemplateVO> dataGrid=new DataGrid<CodeClassifyTemplateVO>();
+        //娌℃湁浼犲垎绫籭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<CodeClassifyTemplateDO> doList = codeClassifyTemplateMapper.selectByCondition(conditionMap,pageHelper);
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeClassifyTemplateDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鍚敤銆佸仠鐢�
+     * @param oid
+     * @param lcStatus
+     * @return
+     */
+    @Override
+    public BaseResult updateLcStatus( String oid, String lcStatus){
+
+        //鍋滅敤鐨勬椂鍊欙紝楠岃瘉妯℃澘鏄惁涓哄凡鍙戝竷
+        if(CodeClassifyTemplateLC.DISABLED.getValue().equals(lcStatus)){
+            CodeClassifyTemplateDO codeClassifyTemplateDO = codeClassifyTemplateMapper.selectByPrimaryKey(oid);
+            if(!CodeClassifyTemplateLC.RELEASED.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
+                return BaseResult.fail("妯℃澘鏈惎鐢紝涓嶈兘鍋滅敤锛�");
+            }
+        }
+        //鍚敤銆佸仠鐢�
+        int u = codeClassifyTemplateMapper.updateLcStatus(oid,lcStatus);
+
+        return u==0?BaseResult.error("淇敼澶辫触锛�"):BaseResult.success("淇敼鎴愬姛");
+    }
+
+    /**
+     * 鍗囩増
+     * @param codeClassifyDTO
+     */
+    @Override
+    public BaseResult Upgrade(CodeClassifyTemplateDTO codeClassifyDTO){
+
+        //鏃х殑妯℃澘oid
+        String templateOldOid = codeClassifyDTO.getOid();
+        //鍙湁宸插彂甯冪殑鎵嶈兘鍗囩増
+        CodeClassifyTemplateDO codeClassifyTemplateDOOld =  codeClassifyTemplateMapper.selectByPrimaryKey(templateOldOid);
+        if(!FRAMEWORK_RELEASE_RELEASED.equals(codeClassifyTemplateDOOld.getLcStatus())){
+            return BaseResult.fail("璇ユā鏉挎湭鍙戝竷锛屼笉鑳藉崌鐗堬紒");
+        }
+
+        ClientBusinessObjectOperation clientBusinessObjectOperation = new ClientBusinessObjectOperation();
+
+        //闇�瑕佹柊澧炵殑鍗囩骇妯℃澘
+        ClientBusinessObject clientBusinessObject_template = boService.selectCBOByOid(codeClassifyDTO.getOid(), "codeclstemplate");
+        ClientBusinessObject clientBusinessObject_template_insert = null;
+        try {
+            clientBusinessObject_template_insert = clientBusinessObjectOperation.reviseBusinessObject(clientBusinessObject_template, "");
+        }catch (VCIError e){
+            e.printStackTrace();
+            logger.error("===============>鍒嗙被妯℃澘-鍗囩増澶嶅埗鍑洪敊oid锛� "+templateOldOid+",mes"+e.error_message);
+            return BaseResult.error("鍗囩増鍑洪敊");
+        }
+
+
+        CodeClassifyTemplateDO codeClassifyTemplateDO = new CodeClassifyTemplateDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyTemplateDO);
+        WebUtil.copyValueToObjectFromCbos(clientBusinessObject_template_insert,codeClassifyTemplateDO);
+        //modify by weidy@2022-2-27
+        //鍗囩増鍚庝笉鑳戒娇鐢╥nsert鏂规硶锛屽洜涓洪偅涓案杩滄槸鏂板涓�鏉℃暟鎹紝
+        //涓婃柟鍏堜粠dto杞粰do锛岀劧鍚庢妸鍗囩増鐨勫垵濮嬪寲鐨勫睘鎬ф嫹璐濈粰do锛屾渶鍚庡啀浠巇o鎷疯礉鍒癱bo涓�
+        WebUtil.copyValueToCboFromObj(clientBusinessObject_template_insert,codeClassifyTemplateDO);
+        //鍗囩増杩囧悗鐨勬ā鏉縪id
+        String templateNewOid = codeClassifyTemplateDO.getOid();
+
+        //闇�瑕佸鍒剁殑妯℃澘灞炴��
+        //鏌ヨ鑰佹ā鏉夸笅杈圭殑鎵�鏈夊睘鎬э紝璧嬪�兼柊妯℃澘oid
+        VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO :codeClassifyTemplateAttrDOList){
+            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);
+
+        //涓�璧蜂繚瀛樻暟鎹�
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+        //淇濆瓨妯℃澘
+        BatchCBO batchCBOTemplate = new BatchCBO();
+        //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);
+        //淇濆瓨妯℃澘灞炴��
+        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 BaseResult.success("鍗囩増鎴愬姛锛�");
+    }
+
+    @Override
+    public BaseResult copyTemplate(CodeClassifyTemplateDTO codeClassifyDTO){
+
+        //鏃х殑妯℃澘oid
+        String oldOid = codeClassifyDTO.getOid();
+        //鏂扮殑妯℃澘oid
+        String newOid = VciBaseUtil.getPk();
+        //鍒嗙被oid,澶嶅埗杩囨潵鐨勬柊鐨勫垎绫籵id
+        String codeClassifyOid = codeClassifyDTO.getCodeclassifyoid();
+
+        //澶嶅埗妯℃澘
+        CodeClassifyTemplateDO codeClassifyTemplateDO_old =  codeClassifyTemplateMapper.selectByPrimaryKey(oldOid);//鏃фā鏉�
+
+        //楠岃瘉锛屼笟鍔$被鍨嬫槸涓嶆槸涓�鑷�
+        CodeClassifyDO codeClassifyDO_old = codeClassifyDaoI.selectBtmOrParentBtm(codeClassifyTemplateDO_old.getCodeClassifyOid());
+        if(codeClassifyDO_old==null){
+            return BaseResult.fail("澶嶅埗鐨勬ā鏉挎墍灞炲垎绫讳互鍙婁笂绾ф病鏈変笟鍔$被鍨嬶紝璇烽噸鏂伴�夋嫨!");
+        }
+
+        //鎵惧綋鍓嶅垎绫讳笅鐨勪笟鍔$被鍨�
+        CodeClassifyDO codeClassifyDO_new = codeClassifyDaoI.selectBtmOrParentBtm(codeClassifyOid);
+        if(codeClassifyDO_new==null){
+            return BaseResult.fail("褰撳墠鍒嗙被娌℃湁涓氬姟绫诲瀷锛岃閲嶆柊閫夋嫨!");
+        }
+
+        if(!codeClassifyDO_old.getBtmTypeId().equals(codeClassifyDO_new.getBtmTypeId())){
+            return BaseResult.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<CodeClassifyTemplateDO> codeClassifyTemplateDOList = new ArrayList<CodeClassifyTemplateDO>();
+        codeClassifyTemplateDOList.add(codeClassifyTemplateDO_old);
+
+        //澶嶅埗妯℃澘灞炴��
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = copyTemplateAttr(oldOid,newOid);
+
+        //澶嶅埗妯℃澘娴佺▼
+        List<CodeClassifyProcessTempDO> codeClassifyProcessTempDOList = copyTemplateProcess(oldOid,newOid);
+
+        //澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
+        Map  phase_attrMap = copyTemplatePhase_attr(oldOid,newOid);
+
+        List<CodeTemplatePhaseDO> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhaseDO>)phase_attrMap.get("phase");//妯℃澘闃舵
+        List<CodePhaseAttrDO> codePhaseAttrDOList = (ArrayList<CodePhaseAttrDO>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
+
+        //澶嶅埗妯℃澘鎸夐挳
+        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = copyTemplateButton(oldOid,newOid);
+
+        //涓�璧蜂繚瀛樻暟鎹�
+        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 BaseResult.success("澶嶅埗鎴愬姛锛�");
+
+    }
+
+    /**
+     * 浣跨敤涓婚搴撶殑鍒嗙被涓婚敭锛岃幏鍙栫敓鏁堢殑妯℃澘
+     *
+     * @param codeClassifyOid 涓婚搴撳垎绫讳富閿�
+     * @param hasAttribute    鏄惁鍖呭惈灞炴��
+     * @return 妯℃澘鐨勪俊鎭�
+     */
+    @Override
+    public List<CodeClassifyTemplateVO> listReleaseTemplateByClassifyOid(String codeClassifyOid, boolean hasAttribute) {
+        VciBaseUtil.alertNotNull(codeClassifyOid,"涓婚搴撳垎绫讳富閿�");
+        List<CodeClassifyTemplateDO> templateDOS = selectOnlyTemplateByClassifyOid(codeClassifyOid);
+        if(CollectionUtils.isEmpty(templateDOS)){
+            throw new VciBaseException("褰撳墠鍒嗙被锛屼互鍙婂叾涓婄骇鍒嗙被閮芥病鏈夎缃ā鏉�");
+        }
+        List<CodeClassifyTemplateVO> templateVOList = codeClassifyTemplateDO2VOs(templateDOS, true);
+        return sortTemplateByRevision(templateVOList);
+    }
+
+    /**
+     * 鐢ㄦā鏉跨殑鐗堟湰鏉ユ帓搴�
+     * @param templateVOList 妯℃澘鐨勬樉绀哄璞�
+     * @return 鎺掑簭鍚庣殑鍒楄〃
+     */
+    @Override
+    public List<CodeClassifyTemplateVO> sortTemplateByRevision(List<CodeClassifyTemplateVO> templateVOList){
+        if(!CollectionUtils.isEmpty(templateVOList) && templateVOList.size() >1){
+            //鑾峰彇鐗堟湰鍙锋渶澶х殑閭d釜
+            templateVOList = templateVOList.stream().sorted((o1,o2)->
+                Integer.valueOf(o1.getRevisionSeq()).compareTo(Integer.valueOf(o2.getRevisionValue()))
+            ).collect(Collectors.toList());
+        }
+        return templateVOList;
+    }
+
+    /**
+     * 鏍¢獙瀛愬垎绫绘槸鍚︾浉鍚岀殑妯℃澘
+     *
+     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
+     * @return true琛ㄧず鐩稿悓
+     */
+    @Override
+    public boolean checkChildHasSameTemplate(String codeClassifyOid) {
+        Map<String/**妯℃澘鐨勪富閿�**/,String/**鍒嗙被鐨勪富閿�**/> childHasTemplateMap =codeClassifyTemplateMapper.selectChildHasReleaseTemplate(codeClassifyOid);
+        if(!CollectionUtils.isEmpty(childHasTemplateMap) && childHasTemplateMap.values().stream().collect(Collectors.toSet()).size()>1){
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     *鏍规嵁鐖跺垎绫籭d鍘绘煡鎵惧彾瀛愯妭鐐圭殑妯℃澘锛屽鏋滄病鏌ュ埌鍒欒涓烘ā鏉垮湪涓婂眰寤虹珛锛屽垯鏍规嵁鍒嗙被鍘绘煡褰撳墠妯℃澘
+     * @param codeClassifyOid 鐖跺垎绫荤殑涓婚敭
+     * @return
+     */
+    @Override
+    public List<CodeClassifyTemplateVO> childTemplates(String codeClassifyOid){
+        List<CodeClassifyTemplateVO> codeClassifyTemplateVOList=new ArrayList<>();
+        Map<String/**妯℃澘鐨勪富閿�**/,String/**鍒嗙被鐨勪富閿�**/> childHasTemplateMap =codeClassifyTemplateMapper.selectChildHasReleaseTemplate(codeClassifyOid);
+        Set<String> templateOid = childHasTemplateMap.keySet();
+        List<CodeClassifyTemplateDO>  classifyTemplateDOS=new ArrayList<>();
+        if(!CollectionUtils.isEmpty(templateOid)) {
+            classifyTemplateDOS= this.listCodeClassifyTemplateDOByOidCollections(templateOid);
+        }else{
+            classifyTemplateDOS=selectOnlyTemplateByClassifyOid(codeClassifyOid);
+        }
+        List<CodeClassifyTemplateVO> templateVOList = codeClassifyTemplateDO2VOs(classifyTemplateDOS, true);
+        if(!CollectionUtils.isEmpty(templateVOList)){
+            codeClassifyTemplateVOList.addAll(templateVOList);
+        }
+        return codeClassifyTemplateVOList;
+    }
+    /**
+     * 浣跨敤鍒嗙被涓婚敭閫掑綊鏌ヨ
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 妯℃澘鐨勬暟鎹璞�
+     */
+    private List<CodeClassifyTemplateDO> selectOnlyTemplateByClassifyOid(String codeClassifyOid){
+        //1.鐩存帴鏌ヨ锛岀湅鐪嬭繖涓垎绫讳笅闈㈡湁娌℃湁鍙戝竷鐘舵�佺殑妯℃澘
+        //2.濡傛灉娌℃湁锛屽垯寰�涓婃壘鍒嗙被鐨勫唴瀹癸紝杩欎釜鍒嗙被灞傜骇涓嶄細澶锛屾墍浠ョ洿鎺ラ�掑綊鍗冲彲
+        //3.濡傛灉鍒嗙被涓嬮潰娣诲姞浜嗘ā鏉匡紝浣嗘槸娌℃湁鍙戝竷锛屽垯璇存槑妯℃澘鍙兘杩樺湪缂栬緫鐨勭姸鎬侊紝渚濈劧浣跨敤涓婄骇鍒嗙被
+
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeClassifyOid",codeClassifyOid);
+        conditionMap.put("lcstatus",CodeClassifyTemplateLC.RELEASED.getValue());
+        List<CodeClassifyTemplateDO> templateDOS = codeClassifyTemplateMapper.selectByCondition(conditionMap, new PageHelper(-1));
+        if(CollectionUtils.isEmpty(templateDOS)){
+            //閫掑綊鎵句笂绾х殑妯℃澘
+            CodeClassifyDO classifyDO = codeClassifyDaoI.selectByPrimaryKey(codeClassifyOid);
+            if(StringUtils.isBlank(classifyDO.getParentCodeClassifyOid())){
+                //璇存槑宸茬粡鏄《浜嗭紝涔熸病鎵惧埌鐨勮瘽锛岄偅灏辫繑鍥炰簡
+                return null;
+            }
+            return selectOnlyTemplateByClassifyOid(classifyDO.getParentCodeClassifyOid());
+        }else{
+            return templateDOS;
+        }
+    }
+
+    /**
+     * 澶嶅埗妯℃澘锛屾ā鏉垮睘鎬�
+     * @param templateOldOid
+     * @param templateNewOid
+     * @param codeClassifyDTO 妯℃澘鍚嶇О锛屾ā鏉跨紪鍙凤紝鎻忚堪
+     * @return map tamplate:(List<CodeClassifyTemplateDO>) templateAttr:(List<CodeClassifyTemplateAttrDO>)
+     */
+    public Map copyTemplate_attr(String templateOldOid,String templateNewOid,String codeckassfyOid,CodeClassifyTemplateDTO codeClassifyDTO){
+        templateNewOid = templateNewOid==null?VciBaseUtil.getPk():VciBaseUtil.getPk();
+        VciQueryWrapperForDO codeClassifyTemplateQuery = new VciQueryWrapperForDO(CodeClassifyTemplateDO.class);
+        codeClassifyTemplateQuery.addQueryMap("oid",templateOldOid);
+        List<CodeClassifyTemplateDO> codeClassifyTemplateDOList = codeClassifyTemplateMapper.selectByWrapper(codeClassifyTemplateQuery);
+        for (CodeClassifyTemplateDO codeClassifyTemplateDO:codeClassifyTemplateDOList){
+            codeClassifyTemplateDO.setOid(templateNewOid);
+            codeClassifyTemplateDO.setCodeClassifyOid(codeckassfyOid);
+            codeClassifyTemplateDO.setId(codeClassifyDTO.getId());
+            codeClassifyTemplateDO.setName(codeClassifyDTO.getName());
+            codeClassifyTemplateDO.setDescription(codeClassifyDTO.getDescription());
+
+        }
+
+        //澶嶅埗妯℃澘灞炴��
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = copyTemplateAttr(templateOldOid,templateNewOid);
+        Map template_attrMap = new HashMap();
+        template_attrMap.put("tamplate",codeClassifyTemplateDOList);
+        template_attrMap.put("templateAttr",codeClassifyTemplateAttrDOList);
+        return template_attrMap;
+    }
+
+    /**
+     * 澶嶅埗妯℃澘灞炴��
+     */
+    public List<CodeClassifyTemplateAttrDO> copyTemplateAttr(String templateOldOid,String templateNewOid){
+        VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+        codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
+        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
+        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO :codeClassifyTemplateAttrDOList){
+            String attrOid = VciBaseUtil.getPk();
+            codeClassifyTemplateAttrDO.setOid(attrOid);
+            codeClassifyTemplateAttrDO.setClassifyTemplateOid(templateNewOid);
+        }
+        return codeClassifyTemplateAttrDOList;
+    }
+
+    /**
+     * 澶嶅埗妯℃澘娴佺▼
+     */
+    public List<CodeClassifyProcessTempDO> copyTemplateProcess(String templateOldOid,String templateNewOid){
+        VciQueryWrapperForDO processWrapper = new VciQueryWrapperForDO(CodeClassifyProcessTempDO.class);
+        processWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
+        List<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOList = codeClassifyProcessTempDaoI.selectByWrapper(processWrapper);//瑕佷繚瀛樼殑鏂扮殑妯℃澘娴佺▼
+        for (CodeClassifyProcessTempDO codeClassifyProcessTempDO:codeClassifyProcessTempDOList){
+            String newOid = VciBaseUtil.getPk();
+            codeClassifyProcessTempDO.setOid(newOid);
+            //codeClassifyProcessTempDO.setCodeClassifyOid(templateNewOid);
+            codeClassifyProcessTempDO.setClassifyTemplateOid(templateNewOid);
+            //modify by lihang - @20220406 璁剧疆妯℃澘涓婚敭浣嶇疆鍑洪敊锛屽鑷村崌鐗堢殑妯℃澘涓殑娴佺▼鏄┖鐨勩��
+        }
+        return codeClassifyProcessTempDOList;
+    }
+
+    /**
+     * 澶嶅埗妯℃澘闃舵锛屾ā鏉垮睘鎬�
+     * @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);
+        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 (CodeTemplatePhaseDO codeTemplatePhaseDO:codeClassifyPhaseDOList){
+            String oldoid = codeTemplatePhaseDO.getOid();
+            String newOid = VciBaseUtil.getPk();
+            codeTemplatePhaseDO.setOid(newOid);
+            codeTemplatePhaseDO.setCodeClassifyTemplateOid(templateNewOid);
+            phaseKeyMap.put(oldoid,newOid);
+            phaseOidList.add(oldoid);
+        }
+
+        //妯℃澘闃舵鐨勫睘鎬�
+        List<CodePhaseAttrDO> codePhaseAttrDOList = new ArrayList<CodePhaseAttrDO>();
+        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));
+        }
+        for (CodePhaseAttrDO codePhaseAttrDO:codePhaseAttrDOList){
+            String oldPhaseoid = codePhaseAttrDO.getCodePhaseOid();
+            String newOid = VciBaseUtil.getPk();
+            codePhaseAttrDO.setOid(newOid);
+            codePhaseAttrDO.setCodePhaseOid(phaseKeyMap.get(oldPhaseoid));
+        }
+        Map phaseMap = new HashMap();
+        phaseMap.put("phase",codeClassifyPhaseDOList);
+        phaseMap.put("phaseAttr",codePhaseAttrDOList);
+        return phaseMap;
+    }
+
+    /**
+     * 澶嶅埗妯℃澘鎸夐挳
+     */
+    public List<CodeClassifyTemplateButtonDO> copyTemplateButton(String templateOldOid,String templateNewOid){
+        VciQueryWrapperForDO buttonWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateButtonDO.class);
+        buttonWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
+        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = codeClassifyTemplateButtonDaoI.selectByWrapper(buttonWrapper);
+        for (CodeClassifyTemplateButtonDO codeClassifyTemplateButtonDO:codeClassifyTemplateButtonDOList){
+            String newOid = VciBaseUtil.getPk();
+            codeClassifyTemplateButtonDO.setOid(newOid);
+            codeClassifyTemplateButtonDO.setClassifyTemplateOid(templateNewOid);
+        }
+        return codeClassifyTemplateButtonDOList;
+    }
+
+
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyValueServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyValueServiceImpl.java
new file mode 100644
index 0000000..17b2161
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyValueServiceImpl.java
@@ -0,0 +1,479 @@
+package org.springblade.code.service.impl;
+
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.mdm.dao.CodeBasicSecDaoI;
+import com.vci.mdm.dao.CodeClassifyValueDaoI;
+import com.vci.mdm.dto.CodeClassifyValueDTO;
+import com.vci.mdm.model.CodeBasicSecDO;
+import com.vci.mdm.model.CodeClassifyValueDO;
+import com.vci.mdm.pagemodel.CodeClassifyValueVO;
+import com.vci.mdm.service.CodeClassifyValueServiceI;
+import com.vci.starter.revision.bo.TreeWrapperOptions;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.pagemodel.Tree;
+import com.vci.starter.web.pagemodel.TreeQueryObject;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciParentQueryOption;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.LC_STATUS;
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+/**
+ * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeClassifyValueServiceImpl implements CodeClassifyValueServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeClassifyValueDaoI codeClassifyValueMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 鐮佹鐨勪俊鎭�
+     */
+    @Autowired
+    private CodeBasicSecDaoI basicSecMapper;
+
+    /**
+    * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉�
+    */
+    private static  final String PARENT_FIELD_NAME = "parentClassifyValueOid";
+    /**
+     * 鏌ヨ鍒嗙被鐮佹鐨勭爜鍊� 鏍�
+     * @param treeQueryObject 鏍戞煡璇㈠璞�
+     * @return 鍒嗙被鐮佹鐨勭爜鍊� 鏄剧ず鏍�
+     * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject) throws VciBaseException{
+       // List<CodeClassifyValueDO> doList =selectCodeClassifyValueDOByTree(treeQueryObject);
+        List<CodeClassifyValueDO> doList =selectCodeClassifyValueDO4Tree(treeQueryObject);
+        List<CodeClassifyValueVO> voList = codeClassifyValueDO2VOs(doList);
+        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME);
+        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
+        return revisionModelUtil.doList2Trees(voList,treeWrapperOptions,(CodeClassifyValueVO s) ->{
+            //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀�
+            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
+                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
+        });
+    }
+    /**
+      * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
+      *
+      * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+      * @return 鏌ヨ缁撴灉,鏁版嵁瀵硅薄
+      */
+    @Override
+    public List<CodeClassifyValueDO> selectCodeClassifyValueDOByTree(TreeQueryObject treeQueryObject) {
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(treeQueryObject.getConditionMap(),CodeClassifyValueDO.class);
+        PageHelper ph = new PageHelper();
+        ph.addDefaultAsc("ordernum");
+        queryWrapperForDO.setPageHelper(ph);
+        VciParentQueryOption parentQueryOption = new VciParentQueryOption();
+        parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
+        //queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
+        parentQueryOption.setHasSelf(true);
+        queryWrapperForDO.childQueryParent(parentQueryOption);
+        return codeClassifyValueMapper.selectByWrapper(queryWrapperForDO);
+    }
+
+    private List<CodeClassifyValueDO> selectCodeClassifyValueDO4Tree(TreeQueryObject treeQueryObject){
+        Map<String, String> conditionMap = treeQueryObject.getConditionMap();
+        String currentSecOid = conditionMap.get("codeclassifysecoid");
+        String sql = "select oid from PLATFORMBTM_CODEBASICSEC start with  oid = '"+currentSecOid+"' connect by prior PARENTCLASSIFYSECOID = OID";
+        List<ClientBusinessObject> targetParentList = boService.queryBySql(sql, new HashMap<>());
+        Set<String> secOidList = targetParentList.stream().map(ClientBusinessObject::getOid).collect(Collectors.toSet());
+        conditionMap.clear();
+        StringBuilder oidStrBuilder = new StringBuilder();
+        secOidList.forEach(oid -> oidStrBuilder.append("'").append(oid).append("',"));
+        String oidStr = oidStrBuilder.toString().substring(0,oidStrBuilder.toString().length() -1);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(null,CodeClassifyValueDO.class);
+        PageHelper ph = new PageHelper();
+        ph.addDefaultAsc("ordernum");
+        ph.setLimit(-1);
+        wrapper.setPageHelper(ph);
+        wrapper.in("codeclassifysecoid",oidStr);
+        return codeClassifyValueMapper.selectByWrapper(wrapper);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeClassifyValueDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeClassifyValueVO> codeClassifyValueDO2VOs(Collection<CodeClassifyValueDO>  codeClassifyValueDOs) throws VciBaseException{
+        List<CodeClassifyValueVO> voList = new ArrayList<CodeClassifyValueVO>();
+        if(!CollectionUtils.isEmpty(codeClassifyValueDOs)){
+           for(CodeClassifyValueDO s: codeClassifyValueDOs){
+                CodeClassifyValueVO vo =  codeClassifyValueDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeClassifyValueDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeClassifyValueVO codeClassifyValueDO2VO(CodeClassifyValueDO codeClassifyValueDO) throws VciBaseException{
+              CodeClassifyValueVO vo = new CodeClassifyValueVO();
+        if(codeClassifyValueDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyValueDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeClassifyValueVO addSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyValueDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //娣诲姞瀵圭爜鍊煎瓙鐖剁骇鐨勫垽鏂�
+        if(StringUtils.isNotBlank(codeClassifyValueDTO.getParentclassifyvalueoid())){
+            String parentclassifyvalueoid = codeClassifyValueDTO.getParentclassifyvalueoid();
+            String codeclassifysecoid = codeClassifyValueDTO.getCodeclassifysecoid();
+            CodeClassifyValueDO parentDO = codeClassifyValueMapper.selectByPrimaryKey(parentclassifyvalueoid);
+            if (parentDO.getCodeClassifySecOid().equalsIgnoreCase(codeclassifysecoid)){
+                throw new VciBaseException("涓嶅厑璁稿湪鐖剁爜鍊间腑鐩存帴娣诲姞瀛愮爜鍊�");
+            }
+        }
+        //灏咲TO杞崲涓篋O
+        CodeClassifyValueDO codeClassifyValueDO = new CodeClassifyValueDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyValueDTO,codeClassifyValueDO);
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeclassifysecoid", codeClassifyValueDO.getCodeClassifySecOid());
+        conditionMap.put("parentclassifyvalueoid",codeClassifyValueDO.getParentClassifyValueOid());
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyValueDO.class);
+        List<CodeClassifyValueDO> existList = codeClassifyValueMapper.selectByWrapper(wrapper);
+        codeClassifyValueDO.setOrderNum(existList.size() + 1);
+        codeClassifyValueMapper.insert(codeClassifyValueDO);
+        return codeClassifyValueDO2VO(codeClassifyValueDO);
+    }
+
+    /**
+     * 淇敼鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeClassifyValueVO editSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鏁版嵁瀵硅薄",codeClassifyValueDTO.getOid(),"鍒嗙被鐮佹鐨勭爜鍊间富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeClassifyValueDO codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeClassifyValueDTO,codeClassifyValueDO);
+         codeClassifyValueMapper.updateByPrimaryKey(codeClassifyValueDO);
+         return codeClassifyValueDO2VO(codeClassifyValueDO);
+     }
+
+/**
+ * 妫�鏌� 鍒嗙被鐮佹鐨勭爜鍊兼槸鍚﹀垹闄�
+ * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝蹇呴』瑕佹湁oid鍜宼s灞炴��
+ * @return 鎵ц缁撴灉 success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+ * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+ */
+@Override
+public BaseResult checkIsCanDelete(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
+    VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鏁版嵁浼犺緭瀵硅薄",codeClassifyValueDTO.getOid(),"涓婚敭");
+    CodeClassifyValueDO codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
+    return checkIsCanDeleteForDO(codeClassifyValueDTO,codeClassifyValueDO);
+}
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeClassifyValueDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeClassifyValueDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeClassifyValueDTO codeClassifyValueDTO, CodeClassifyValueDO codeClassifyValueDO) {
+        //boService.checkTs(codeClassifyValueDTO);
+        //鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
+        if(checkChildIsLinked(codeClassifyValueDO.getOid())){
+            return BaseResult.fail(DATA_CASCADE_LINKED_NOT_DELETE,new String[]{""});
+        }
+        return BaseResult.success(checkHasChild(codeClassifyValueDO.getOid()));
+    }
+    /**
+      * 妫�鏌ユ槸鍚︽湁涓嬬骇鏄惁鍏宠仈浜嗘暟鎹�
+      *
+      * @param oid 涓婚敭
+      * @return true 琛ㄧず鏈夊紩鐢紝false琛ㄧず娌℃湁寮曠敤
+      * @throws VciBaseException 鍙傛暟涓虹┖鍜屾湁寮曠敤鐨勬椂鍊欎細鎶涘嚭寮傚父
+      */
+    @Override
+    public boolean checkChildIsLinked(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        List<String> childOids = codeClassifyValueMapper.selectAllLevelChildOid(oid.trim());
+        if(!CollectionUtils.isEmpty(childOids)){
+             for(String childOid: childOids){
+                 if(!checkIsLinked(childOid)){
+                     return false;
+                 }
+             }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+    * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
+    *
+    * @param oid 涓婚敭
+    * @return true琛ㄧず鏈変笅绾э紝false琛ㄧず娌℃湁涓嬬骇
+    * @throws VciBaseException 鍙傛暟閿欒锛屾垨鑰呮暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    @Override
+    public boolean checkHasChild(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        return codeClassifyValueMapper.countAllLevelChildOid(oid.trim()) > 0;
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被鐮佹鐨勭爜鍊�
+     * @param codeClassifyValueDTO 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeClassifyValue(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�",codeClassifyValueDTO.getOid(),"鍒嗙被鐮佹鐨勭爜鍊肩殑涓婚敭");
+        CodeClassifyValueDO codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeClassifyValueDTO,codeClassifyValueDO);
+        if(baseResult.isSuccess()) {
+                        //鎵句笅绾х殑锛岃繖涓槸鍙互鍒犻櫎鐨勬椂鍊�
+            List<String> childrenOids = codeClassifyValueMapper.selectAllLevelChildOid(codeClassifyValueDO.getOid().trim());
+            if (!CollectionUtils.isEmpty(childrenOids)) {
+                Collection<Collection<String>> childrenCollections = VciBaseUtil.switchCollectionForOracleIn(childrenOids);
+                for(Collection<String> s : childrenCollections){
+                    codeClassifyValueMapper.batchDeleteByOids(s);
+                }
+            }
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeClassifyValueMapper.deleteByPrimaryKey(codeClassifyValueDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeClassifyValueVO getObjectByOid(String oid) throws VciBaseException{
+        return codeClassifyValueDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeClassifyValueDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeClassifyValueDO codeClassifyValueDO = codeClassifyValueMapper.selectByPrimaryKey(oid.trim());
+        if(codeClassifyValueDO == null || StringUtils.isBlank(codeClassifyValueDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeClassifyValueDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被鐮佹鐨勭爜鍊�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeClassifyValueVO> listCodeClassifyValueByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeClassifyValueDO> codeClassifyValueDOList = listCodeClassifyValueDOByOidCollections(oidCollections);
+        return codeClassifyValueDO2VOs(codeClassifyValueDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeClassifyValueDO> listCodeClassifyValueDOByOidCollections(Collection<String> oidCollections){
+        List<CodeClassifyValueDO> codeClassifyValueDOList = new ArrayList<CodeClassifyValueDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeClassifyValueDO> tempDOList =  codeClassifyValueMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeClassifyValueDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeClassifyValueDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鏍� 鍒嗙被鐮佹鐨勭爜鍊�
+     * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
+     * @return 鍒嗙被鐮佹鐨勭爜鍊兼樉绀烘爲
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<Tree> referTree(TreeQueryObject treeQueryObject)  throws VciBaseException{
+        if(treeQueryObject == null){
+            treeQueryObject = new TreeQueryObject();
+        }
+        if(treeQueryObject.getConditionMap() == null){
+            treeQueryObject.setConditionMap(new HashMap<>());
+        }
+        if(treeQueryObject.getConditionMap().containsKey(LC_STATUS)) {
+            treeQueryObject.getConditionMap().remove(LC_STATUS);
+        }
+                return treeCodeClassifyValue(treeQueryObject);
+    }
+
+    /**
+     * 浣跨敤鐮佹鐨勪富閿幏鍙栧垎绫荤殑鐮佸�煎唴瀹�
+     *
+     * @param classifySecOid         鐮佹鐨勪富閿�
+     * @param parentClassifyValueOid 涓婄骇鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鐮佸�肩殑鍐呭
+     */
+    @Override
+    public List<CodeClassifyValueVO> listCodeClassifyValueBySecOid(String classifySecOid, String parentClassifyValueOid) {
+        if(StringUtils.isBlank(classifySecOid)){
+            return new ArrayList<>();
+        }
+        CodeBasicSecDO secDO = basicSecMapper.selectByPrimaryKey(classifySecOid);
+        if(secDO == null || StringUtils.isBlank(secDO.getOid())){
+            throw new VciBaseException("鐮佹鐨勫唴瀹瑰湪绯荤粺涓笉瀛樺湪");
+        }
+        if(StringUtils.isNotBlank(secDO.getParentClassifySecOid()) && StringUtils.isBlank(parentClassifyValueOid)){
+            return new ArrayList<>();
+            //鍥犱负鏈変笂绾у垎绫荤殑鏃跺�欙紝蹇呴』鍏堥�夋嫨涓婄骇鍒嗙被鐨勫唴瀹�
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeClassifySecOid",classifySecOid);
+        if(StringUtils.isNotBlank(parentClassifyValueOid)){
+            conditionMap.put("parentClassifyValueOid",parentClassifyValueOid);
+        }
+        PageHelper pageHelper = new PageHelper(-1);
+        pageHelper.addDefaultAsc("ordernum");
+        List<CodeClassifyValueDO> valueDOList = codeClassifyValueMapper.selectByCondition(conditionMap, pageHelper);
+        return codeClassifyValueDO2VOs(valueDOList);
+    }
+
+    /**
+     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
+     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult batchDeleteBySecOid(String codeclassifysecoid) {
+        VciBaseUtil.alertNotNull(codeclassifysecoid,"鍒嗙被鐮佹鐨勪富閿�");
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeClassifySecOid",codeclassifysecoid);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyValueDO.class);
+        List<CodeClassifyValueDO> valueDOList = codeClassifyValueMapper.selectByWrapper(wrapper);
+        codeClassifyValueMapper.batchDeleteByOids(valueDOList.stream().map(CodeClassifyValueDO::getOid).collect(Collectors.toList()));
+        return BaseResult.success();
+    }
+
+    /**
+     * 鎵归噺娣诲姞鍒嗙被鐮佹鐨勭爜鍊笺�備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+     * @param dtoList 鍒嗙被鐮佹鐨勭爜鍊煎垪琛�
+     * @param codeclassifysecoid 鍒嗙被鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult batchSave4Order(List<CodeClassifyValueDTO> dtoList, String codeclassifysecoid) {
+        VciBaseUtil.alertNotNull(codeclassifysecoid,"鍒嗙被鐮佹涓婚敭");
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeClassifySecOid",codeclassifysecoid);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeClassifyValueDO.class);
+        List<CodeClassifyValueDO> valueDOList = codeClassifyValueMapper.selectByWrapper(wrapper);
+        List<CodeClassifyValueDO> updateList = new ArrayList<>();
+        dtoList.forEach(dto -> {
+            if( StringUtils.isNotBlank( dto.getOid() )){
+                List<CodeClassifyValueDO> collect = valueDOList.stream().filter(value -> {
+                    return dto.getOid().equals(value.getOid());
+                }).collect(Collectors.toList());
+                collect.forEach(ccv -> {
+                    ccv.setOrderNum(dto.getOrdernum());
+                    ccv.setId(dto.getId());
+                    ccv.setName(dto.getName());
+                    updateList.add(ccv);
+                });
+            }
+        });
+        codeClassifyValueMapper.batchUpdate(updateList);
+        return BaseResult.success();
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingServiceImpl.java
new file mode 100644
index 0000000..4154597
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingServiceImpl.java
@@ -0,0 +1,1103 @@
+package org.springblade.code.service.impl;
+
+
+import cn.hutool.json.XML;
+import com.alibaba.fastjson.JSONObject;
+import com.vci.mdm.constant.MdmDuckingConstant;
+import com.vci.mdm.dao.*;
+import com.vci.mdm.dto.DockingPreApplyDataDTO;
+import com.vci.mdm.dto.DockingPreApplyDataInfoDTO;
+import com.vci.mdm.model.*;
+import com.vci.mdm.pagemodel.*;
+import com.vci.mdm.service.*;
+import com.vci.mdm.utils.*;
+import com.vci.starter.web.enumpck.UserSecretEnum;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.pagemodel.SessionInfo;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.redis.RedisService;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.PlatformClientUtil;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.*;
+import static com.vci.mdm.constant.MdmDuckingConstant.*;
+import static com.vci.mdm.utils.DateUtils.DATE_TO_STRING_DETAIAL_PATTERN;
+
+
+/**
+ * 涓婚搴撻泦鎴愭湇鍔�
+ * @author wangyi
+ * @date 2022-03-20
+ */
+@Service
+public class CodeDuckingServiceImpl implements CodeDuckingServiceI {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
+     */
+    @Resource
+    private DockingTaskDaoI dockingTaskDaoI;
+
+    /**
+     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
+     */
+    @Resource
+    private DockingDataDaoI dockingDataDaoI;
+
+    /**
+     * 闆嗘垚鏃ュ織鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private DockingLogeDaoI dockingLogeDaoI;
+
+    /**
+     * 闆嗘垚鎺ュ彛head鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private SysIntHeaderDaoI sysIntHeaderDaoI;
+
+    /**
+     * 妯℃澘灞炴�ф暟鎹搷浣滃眰
+     */
+    @Resource
+    private CodeClassifyDaoI codeClassifyDaoI;
+
+
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+     * 缂撳瓨鏈嶅姟
+     */
+    @Autowired
+    private RedisService redisService;
+
+    /**
+     * 鏁版嵁鏈嶅姟
+     */
+    @Autowired(required = false)
+    @Lazy
+    private MdmEngineServiceI mdmEngineServiceI;
+
+    /**
+     * 缂栫爜棰勭敵璇锋湇鍔�
+     */
+    @Autowired(required = false)
+    @Lazy
+    private DockingPreApplyDataServiceI dockingPreApplyDataServiceI;
+
+    /**
+     * 瑕佹帹閫佺郴缁熺殑鏈嶅姟
+     */
+    @Autowired
+    private SysIntInfoServiceI sysIntInfoServiceI;
+
+    /**
+     * 鍒嗙被鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyServiceI codeClassifyServiceI;
+
+
+    @Value("${docking.tuhao:tuhao}")
+    public String tuhao;
+
+    @Value("${docking.tranTemp:D:\\PLT-2022\\web\\tranTemp}")
+    public String tranTemp;
+
+    @Value("${docking.preXmlTemp:D:\\PLT-2022\\web\\preXmlTemp}")
+    public String preXmlTemp;
+
+    /**
+     * 浜屻��1銆�2銆�3銆�4銆�
+     * 澶勭悊棰勭敵璇锋暟鎹�
+     * @param xmlDatas
+     * @return 鎺ユ敹鐨剎mlDate
+     */
+    @Override
+    public String applicateCode(String xmlDatas){
+
+        long start = System.currentTimeMillis();
+
+        Map<String,Object> datasMap = null;
+
+        //瑙f瀽xmlData
+        try {
+            datasMap = XmlUtil.readPreXmlData(xmlDatas);
+        }catch (Exception e){
+            logger.info("鎺ユ敹棰勭敵璇锋暟鎹紝瑙f瀽xmlData澶辫触锛寈mlDatas: "+xmlDatas+",e: "+e.getMessage());
+            e.printStackTrace();
+            //杩斿洖鎻愮ず
+            return XmlUtil.writePreBackXmlData(XML_CODE_FAIL,"瑙f瀽xmlData澶辫触,e: "+e.getMessage(),null);
+        }
+
+        List<XmlData> xmlDataList = Collections.synchronizedList(new ArrayList<XmlData>());
+        String systemid = datasMap.getOrDefault(XML_SYSTEMID,"").toString();
+        List<Map<String,Object>> dataMapList = (ArrayList<Map<String,Object>>)datasMap.get(XML_DATAS);
+
+        //璁板綍杩欐鏁版嵁淇℃伅,骞朵笖鎶妜mldata鍐欏叆鏂囦欢
+        String currentDate = DateUtils.getCurrentDate(DATE_TO_STRING_DETAIAL_PATTERN);
+        File preXmlFile = new File(preXmlTemp+File.separator+systemid+"-"+currentDate+".xml");
+
+        try {
+            FileUtils.write(preXmlFile, xmlDatas);
+        }catch (Exception e){
+            logger.error(currentDate+" 鎺ユ敹"+systemid+"绯荤粺棰勭敵璇锋暟鎹紝鍐欏叆鏂囦欢澶辫触锛乪:"+e.getMessage()+",xmlDatas: "+xmlDatas);
+            e.printStackTrace();
+        }
+
+        //澶勭悊姣忎竴鏉$敵璇风殑鏁版嵁
+        ExecutorService pool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()+1);
+
+        SessionInfo sessionInfo = WebUtil.getSessionInfo();
+        CountDownLatch countDownLatch = new CountDownLatch(dataMapList.size());
+        for (int i =0;i<dataMapList.size();i++){
+            Map<String,Object> dataMap = dataMapList.get(i);
+            pool.execute(()-> {
+                String unique = dataMap.getOrDefault(XML_UNIQUE,"").toString();
+                String type = dataMap.getOrDefault(XML_TYPE,"").toString();
+
+                //瑕佹彃鍏ョ殑data
+                DockingPreApplyDataDTO dockingPreApplyDataDO = new DockingPreApplyDataDTO();
+                //瑕佹彃鍏ョ殑datainfo
+                List<DockingPreApplyDataInfoDTO> dockingPreApplyDataInfoDOList = new ArrayList<DockingPreApplyDataInfoDTO>();
+                XmlData xmlData_ = new XmlData();
+
+                try {
+                    WebUtil.setSessionInfo(sessionInfo);
+
+                    String num = "";
+                    String datacode = "";
+                    String datamsg = "";
+                    String datamsglog = "";
+
+                    //state=400锛屽鐞嗘垚鍔燂紝娌℃湁鎵惧埌缂栫爜
+                    datamsg = "鎺ユ敹棰勭敵璇锋暟鎹紝鏈煡璇㈠埌瀵瑰簲缂栫爜锛岃祴鐮佸悗鎺ㄩ�佺紪鐮佷俊鎭�";
+                    datacode = XML_STATE_400;
+                    XmlData xmlData = new XmlData();
+                    xmlData.setState(XML_STATE_400);
+                    xmlData.setMsg(datamsg);
+                    xmlData.setUnique(unique);
+                    xmlData.setNum(null);
+                    logger.info(datamsg+"锛宒ata: "+dataMap.get(unique)+",num: ");
+                    xmlData_ = xmlData;
+
+                    //濡傛灉鏄疢PM闆嗘垚杩囨潵鐨勬暟鎹紝unique浣滀负鍥惧彿鏌ヨ
+                    if(XML_SYSTEMID_MPM.equals(systemid)&& StringUtils.isNotEmpty(unique)) {
+
+                        //1銆佸厛鏌ヨ杩欎釜unique鏍规嵁鍥惧彿鏌ヨ锛屾湁鏁版嵁灏卞氨杩斿洖
+                        Map conditonMap = new HashMap();
+                        conditonMap.put("tuhao",unique);
+//                        conditonMap.put("lcstatus",FRAMEWORK_RELEASE_RELEASED);
+                        List<ClientBusinessObject> clientBusinessObjectList = boService.queryCBO(type,conditonMap);
+
+                        if(clientBusinessObjectList.size()>0) {
+                            num = clientBusinessObjectList.get(0).getId();
+                            String lcstatus = clientBusinessObjectList.get(0).getLcStatus();
+                            datamsg = "鎺ユ敹棰勭敵璇锋暟鎹紝鏈煡璇㈠埌瀵瑰簲缂栫爜锛岃祴鐮佸悗鎺ㄩ�佺紪鐮佷俊鎭�";
+                            if(FRAMEWORK_RELEASE_RELEASED.equals(lcstatus)) {
+                                datamsg = "鎺ユ敹棰勭敵璇锋暟鎹紝鏌ヨ缂栫爜鎴愬姛";
+                                datamsglog = datamsg+"锛宒ata: " + dataMap.get(unique) + ",num: " + num;
+                                datacode = XML_STATE_200;
+
+                            }else if(FRAMEWORK_RELEASE_SUBMIT.equals(lcstatus)){
+                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:宸叉彁浜わ紝data: " + dataMap.get(unique) + ",num: " + num;
+                                datacode = XML_STATE_400;
+
+                            }else if(FRAMEWORK_RELEASE_AUDITING.equals(lcstatus)){
+                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:瀹℃牳涓紝data: " + dataMap.get(unique) + ",num: " + num;
+                                datacode = XML_STATE_400;
+
+                            }else if(FRAMEWORK_RELEASE_EDITING.equals(lcstatus)){
+                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:缂栬緫涓紝data: " + dataMap.get(unique) + ",num: " + num;
+                                datacode = XML_STATE_400;
+
+                            }else if(FRAMEWORK_DATA_DISABLED.equals(lcstatus)){
+                                datamsglog = datamsg+"锛岀紪鐮佹暟鎹姸鎬�:鍋滅敤锛宒ata: " + dataMap.get(unique) + ",num: " + num;
+                                datacode = XML_STATE_400;
+                            }
+                            xmlData.setState(datacode);
+                            xmlData.setMsg(datamsg);
+                            xmlData.setUnique(unique);
+                            xmlData.setNum(num);
+                            logger.info(datamsglog);
+                            xmlData_ = xmlData;
+                        }
+                    }
+                    dockingPreApplyDataDO.setNum(num);
+                    dockingPreApplyDataDO.setDatacode(datacode);
+                    dockingPreApplyDataDO.setDatamsg(datamsg);
+
+                    //2銆佹牴鎹畊nique鏌ヨDockingPreApplyDataDO锛屾湁鏁版嵁灏变慨鏀瑰埆鐨勬墍鏈夌殑usedflag=false,璁剧疆杩欎釜涓簍rue
+                    //3銆佸啀鎻掑叆DockingPreApplyDataDO鍜孌ockingPreApplyDataInfoDO
+                    //鍏跺疄锛�2銆佸拰3銆佽繖涓ゆ鍦╠ockingPreApplyDataServiceI.addSaveDataAndInfo锛堬級杩欎釜鏂规硶涓竴璧峰仛浜�
+
+                    String dataoid = redisService.getUUIDEveryDay();
+//                    String dataoid = "1";
+                    dockingPreApplyDataDO.setOid(dataoid);
+                    dockingPreApplyDataDO.setPreapplyoid("1");
+                    dockingPreApplyDataDO.setUniquecode(unique);
+                    dockingPreApplyDataDO.setType(type);
+                    dockingPreApplyDataDO.setSystemid(systemid);
+
+                    Object attro = dataMap.get(XML_PROS);
+
+                    //瑕佹彃鍏ョ殑datainfo
+                    List<Map<String,String>> attrList = null;
+                    if (attro == null) {
+                        attrList = new ArrayList<Map<String,String>>();
+                    }else {
+                        attrList = (ArrayList<Map<String,String>>)attro;
+                    }
+
+                    String mpm_model = null;
+                    String mpm_parttype = null;
+                    String mpm_unit = null;
+                    for (Map<String, String> attrMap : attrList) {
+                        String datainfooid = redisService.getUUIDEveryDay();
+//                      datainfooid = "1";
+                        String key = attrMap.getOrDefault(XML_KEY,"");
+                        String mean = attrMap.getOrDefault(XML_MEAN,"");
+                        String text = attrMap.getOrDefault(XML_TEXT,"");
+
+                        DockingPreApplyDataInfoDTO dockingPreApplyDataInfoDO = new DockingPreApplyDataInfoDTO();
+                        dockingPreApplyDataInfoDO.setDataoid(dataoid);
+                        dockingPreApplyDataInfoDO.setOid(datainfooid);
+                        dockingPreApplyDataInfoDO.setKey(key);
+                        dockingPreApplyDataInfoDO.setValue(text);
+                        dockingPreApplyDataInfoDO.setMean(mean);
+                        dockingPreApplyDataInfoDOList.add(dockingPreApplyDataInfoDO);
+
+                        //鍙栦笁涓��
+                        if(XML_MPM_MODEL.equals(key)){//鍙朚PM瑙勬牸
+                            mpm_model = text;
+                            dockingPreApplyDataDO.setModel(mpm_model);
+                        }
+                        if(XML_MPM_PARTTYPE.equals(key)){//鍙朚PM闆朵欢鍨嬪彿
+                            mpm_parttype = text;
+                            dockingPreApplyDataDO.setParttype(mpm_parttype);
+                        }
+                        if(XML_MPM_UNIT.equals(key)){//鍗曚綅
+                            mpm_unit = text;
+                            dockingPreApplyDataDO.setUnit(mpm_unit);
+                        }
+                    }
+
+                    dockingPreApplyDataServiceI.addSaveDataAndInfo(dockingPreApplyDataDO, dockingPreApplyDataInfoDOList);
+
+                } catch (Exception e) {
+                    String datamsg = "鎺ユ敹棰勭敵璇锋暟鎹け璐ワ紒锛宒ata: "+dataMap.get(unique)+",e: "+e.getMessage();
+                    XmlData xmlData = new XmlData();
+                    xmlData.setState(XML_STATE_500);
+                    xmlData.setMsg(datamsg);
+                    xmlData.setUnique(unique);
+                    xmlData.setNum(null);
+                    logger.error(datamsg+".dockingPreApplyDataDO锛� "+dockingPreApplyDataDO+",dockingPreApplyDataInfoDOList: "+dockingPreApplyDataInfoDOList);
+                    xmlData_ = xmlData;
+
+                    e.printStackTrace();
+                }finally {
+                    xmlDataList.add(xmlData_);
+                    countDownLatch.countDown();
+                }
+            });
+        }
+
+        //绛夊緟鎵�鏈夌嚎绋嬫墽琛屽畬鎴�
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+
+        String backXmlData = XmlUtil.writePreBackXmlData(XML_CODE_SUCCESS,"鎺ユ敹棰勭敵璇锋暟鎹垚鍔燂紒",xmlDataList);
+
+
+        long end = System.currentTimeMillis();
+
+        //鎷兼帴杩斿洖鐨剎mlData
+        int dataMapSise = dataMapList.size();
+        int xmlDataSise = xmlDataList.size();
+        System.out.println("========================dataMapSise锛� "+dataMapSise+",xmlDataSise:"+xmlDataSise);
+
+        System.out.println("========================澶勭悊棰勭敵璇锋暟鎹竴鍏辫�楁椂 "+(end-start)/1000+"绉�");
+        return backXmlData;
+    }
+
+    /**
+     * 鍥涖��1銆�2銆�3
+     * 鏌ヨredis涓暟鎹紝瀵规瘮鍚庢彃鍏ockingtask
+     */
+    @Override
+    public void insertCache2(){
+
+        initSysadmin();
+
+        //sysintinfo鏌ヨ瑕佹帹閫佺殑涓婚搴撳拰鐩稿叧绯荤粺淇℃伅
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("usedflag","true");
+        List<SysIntInfoDO> sysIntInfoVOList = sysIntInfoServiceI.selectAll(conditionMap);
+
+        //distinct鍑轰富棰樺簱btmname,瀛樺偍key-value缁撴瀯鐨勫垎绫绘暟鎹紝杩欓噷鐨勫垎绫绘槸涓婚搴搑oot鑺傜偣
+        Set<String> btmtypeidSet = new HashSet<>();
+        Map<String ,List<SysIntInfoDO>> sysIntInfoDOMap = new HashMap<String ,List<SysIntInfoDO>>();//key=classifyoid,value=list<map>
+        for (SysIntInfoDO sysIntInfoVOi:sysIntInfoVOList){
+            btmtypeidSet.add(sysIntInfoVOi.getBtmTypeId());
+            List<SysIntInfoDO> SysIntInfoVOListi = sysIntInfoDOMap.get(sysIntInfoVOi.getClassifyoid());
+            if(SysIntInfoVOListi==null){
+                SysIntInfoVOListi = new ArrayList<SysIntInfoDO>();
+            }
+            SysIntInfoVOListi.add(sysIntInfoVOi);
+            sysIntInfoDOMap.put(sysIntInfoVOi.getClassifyoid(),SysIntInfoVOListi);
+        }
+
+        //鏌ヨdockingdata:oid,classifyoid,btmid,btmoid,sendtype,classifyid,classifyname
+//        List<Map> dataList = getDockingDatas();
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(DockingDataDO.class);
+        queryWrapperForDO.addQueryMap("sendflag","false");
+        List<DockingDataDO> dataList = dockingDataDaoI.selectByWrapper(queryWrapperForDO);
+
+        for (DockingDataDO mapi:dataList){
+
+            WebUtil.setPersistence(false);
+            BatchCBO batchCBO = new BatchCBO();
+
+            String dataoid = mapi.getOid();//data瀵硅薄鐨刼id
+            String classifyoid = mapi.getClassifyoid();
+            String id = mapi.getId();
+            String uniquecode = mapi.getUniquecode();
+            String btmid = mapi.getBtmid();
+            String btmoid = mapi.getBtmoid();
+            String sendtype = mapi.getSendtype();
+            String classifyid = mapi.getClassifyid();
+            String classifyname = mapi.getClassifyname();
+
+            //璁剧疆uniquecode
+            if(StringUtils.isEmpty(uniquecode)){
+                uniquecode = getTuhao(btmoid);//鏌ヨ鍥惧彿
+                if(StringUtils.isNotEmpty(uniquecode)) {
+                    updateDockingDatasUniqueCode(dataoid, uniquecode);
+                }
+            }
+            List<SysIntInfoDO> effectiveSysIntInfoVOs=new ArrayList<>();
+            String rootClassifyoid = "";
+            String pushType="1";
+            if(DOCKING_DEFAULT_CLASSIFY.equalsIgnoreCase(classifyoid)){//杩欎釜瀵瑰簲sysintinfo涓殑涓婚搴搃d锛屽鏋滄槸鍒嗙被鏁版嵁锛屽氨鏄疍OCKING_DEFAULT_CLASSIFY=CODECLASSIFY
+                rootClassifyoid = DOCKING_DEFAULT_CLASSIFY;
+                //鍒ゆ柇鏄惁灞炰簬鍒嗙被鏍�,濡傛灉鏄粍缁囥�佷汉鍛樸�侀檮褰曚箣绫荤殑涓嶇敓鎴愪换鍔�,骞朵笖鑷姩娓呴櫎杩欎釜data
+                boolean iswupin = codeClassifyDaoI.isWupin(btmoid);
+                if(!"TakeBack".equals(sendtype)&&!iswupin){
+                    boolean u = delteDockingData(dataoid);
+                    logger.error("闆嗘垚data鍒犻櫎闈炲垎绫籨ata澶辫触锛乨ataoid:"+dataoid);
+                    continue;
+                }
+                pushType="2";
+                rootClassifyoid=btmoid;
+            }else {
+               /* CodeClassifyDO rootClassify = codeClassifyDaoI.getRootClassify(classifyoid);//root鍒嗙被
+                if(rootClassify==null){
+                    continue;//璇存槑杩欎釜鍒嗙被琚垹鎺変簡锛屼笉鍋氬鐞�
+                }
+                rootClassifyoid = rootClassify.getOid();*/
+                rootClassifyoid=classifyoid;
+            }
+
+            List<CodeClassifyDO> parentLeveDO= codeClassifyDaoI.selectAllLevelParentByOid(rootClassifyoid);
+            if(CollectionUtils.isEmpty(parentLeveDO)){
+                continue;//璇存槑杩欎釜鍒嗙被琚垹鎺変簡锛屼笉鍋氬鐞�
+            }
+            Map<String, CodeClassifyDO> oidCodeclassifyDOMap = parentLeveDO.stream().filter(codeClassifyDO -> codeClassifyDO != null && StringUtils.isNotBlank(codeClassifyDO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+            String finalPushType = pushType;
+            oidCodeclassifyDOMap.keySet().forEach(oid->{
+                if(sysIntInfoDOMap.containsKey(oid)){
+                    List<SysIntInfoDO> sysIntInfoDOS= sysIntInfoDOMap.get(oid);
+                    sysIntInfoDOS.stream().forEach(sysIntInfoDO -> {
+                        String sysPushType= sysIntInfoDO.getPushType();
+                        if(sysPushType.equalsIgnoreCase(finalPushType)){
+                            effectiveSysIntInfoVOs.add(sysIntInfoDO);
+                        }
+                    });
+
+
+                }
+            });
+            if(CollectionUtils.isEmpty(effectiveSysIntInfoVOs)){
+                continue;
+            }
+            List<DockingTaskDO> dockingTaskDO_insert = new ArrayList<DockingTaskDO>();
+            for (SysIntInfoDO sysIntInfoVOi:effectiveSysIntInfoVOs){
+               // String sysinfoclassifyoid = sysIntInfoVOi.getClassifyoid();//intinfo鐨刢lassifyoid
+               // if(!rootClassifyoid.equals(sysinfoclassifyoid)){
+               //     continue;
+              //  }
+                DockingTaskDO dockingTaskDO = new DockingTaskDO();
+                String oid=redisService.getUUIDEveryDay();
+               // logger.error("===================================================oid: "+redisService.getUUIDEveryDay());
+                dockingTaskDO.setOid(oid);
+                dockingTaskDO.setSendflag(SEND_FLAG_FALSE);
+                dockingTaskDO.setId(id);//缂栫爜
+                dockingTaskDO.setUniquecode(uniquecode);
+                dockingTaskDO.setBtmoid(btmoid);//鏁版嵁oid
+                dockingTaskDO.setBtmid(btmid);//鏁版嵁涓氬姟绫诲瀷id
+                dockingTaskDO.setClassifyid(classifyid);//鏁版嵁鍦ㄥ垎绫籭d
+                dockingTaskDO.setClassifyoid(classifyoid);//鏁版嵁鎵�鍦ㄥ垎绫籵id
+                dockingTaskDO.setClassifyname(classifyname);//鏁版嵁鎵�鍦ㄥ垎绫诲悕绉�
+                dockingTaskDO.setSendtype(sendtype);//鏁版嵁鎺ㄩ�佺被鍨�
+                dockingTaskDO.setDataoid(dataoid);
+
+                //intinfo
+                dockingTaskDO.setSysinfooid(sysIntInfoVOi.getOid());//intinfo鐨刼id
+                dockingTaskDO.setSystemoid(sysIntInfoVOi.getSysbaseoid());//绯荤粺oid
+                dockingTaskDO.setSystemcode(sysIntInfoVOi.getSysbaseid());//绯荤粺缂栫爜
+                dockingTaskDO.setSystemname(sysIntInfoVOi.getSysbasename());//绯荤粺name
+
+                dockingTaskDO_insert.add(dockingTaskDO);
+            }
+
+            BatchCBO bi = null;
+            if(dockingTaskDO_insert.size()!=0) {
+                bi = dockingTaskDaoI.batchInsert(dockingTaskDO_insert);
+                batchCBO.copyFromOther(bi);
+            }
+
+            WebUtil.setPersistence(true);
+            boService.persistenceBatch(batchCBO);
+
+            //dockingTaskDaoI.updateByPrimaryKey鏂规硶鎶ラ敊浜嗭紝鎵�浠ユ墜鍐欎簡杩欎釜
+            boolean u = updateDockingDatasSendFlag(dataoid,SEND_FLAG_TRUE);
+            if(!u){
+                logger.error("闆嗘垚data鍒嗚В浠诲姟澶辫触锛乨ataoid:"+dataoid);
+                continue;
+            }
+
+        }
+    }
+
+    /**
+     * 鍥涖��3銆�
+     * 1銆�
+     */
+    @Override
+    public void sendData3(){
+
+        initSysadmin();
+
+        //鏌ヨ鍝簺浠诲姟杩樻病鏈夋墽琛屽畬鎴�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
+        queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
+        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
+
+        //姣忎釜task渚濇鎵ц鎺ㄩ��
+        for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
+
+            //姣忎釜task涓�涓簨鍔★紝寮�鍚�
+            WebUtil.setPersistence(false);
+            BatchCBO batchCBO = new BatchCBO();
+
+            String paramString = null;
+
+            //鏌ヨ绯荤粺鎺ュ彛淇℃伅,ip method,dataType
+            String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 鐨刼id
+            String systemcode = dockingTaskDO.getSystemcode();
+            String systemname = dockingTaskDO.getSystemname();
+            String systemoid = dockingTaskDO.getSystemoid();
+            String dataid = dockingTaskDO.getId();//缂栫爜
+            String uniquecode = dockingTaskDO.getUniquecode();//uniquecode
+
+            //鏌ヨ鎺ㄩ�佹帴鍙e弬鏁�
+            SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
+            String url = sysIntInfoVO.getRequesturl();//url
+            String type = sysIntInfoVO.getInterfacetype().toLowerCase(Locale.ROOT);//get/post/webserver/corba
+            String paramType = sysIntInfoVO.getParamtype();//xml/json
+            String returnType = sysIntInfoVO.getReturntype();//xml/json
+            String interfaceFunction = sysIntInfoVO.getInterfaceFunction();//涓昏鏄痺ebservice鐨勬柟娉曞悕
+            String namespace = sysIntInfoVO.getNamespace();//namespace
+            String soapaction = sysIntInfoVO.getSoapaction();//soapaction
+            String targName = sysIntInfoVO.getTargName();//targName
+            String cxfaxis = sysIntInfoVO.getCxfaxis();//webservice鏄痗xf/axis
+
+            //鏌ヨparam
+            List<SysIntParamDO> sysIntParamDOList = sysIntInfoServiceI.getParamsBySystemInfoOid(systeminfooid);
+            //鏌ヨheader
+            List<SysIntHeaderDO> sysIntHeaderDOList = sysIntInfoServiceI.getHeadersBySystemInfoOid(systeminfooid);
+
+            //鏌ヨ瑕佹帹閫佺殑鏁版嵁
+            String btmoid = dockingTaskDO.getBtmoid();//鏁版嵁oid
+            String btmid = dockingTaskDO.getBtmid();//鏁版嵁btmid
+            String classifyoid = dockingTaskDO.getClassifyoid();
+            String classifyid = dockingTaskDO.getClassifyid();
+            String classifyname= dockingTaskDO.getClassifyname();
+            String sendtype = dockingTaskDO.getSendtype();
+
+            //缁勮鏁版嵁
+            XmlData xmlData = new XmlData();
+            xmlData.setSendtype(sendtype);
+
+            if(!DOCKING_DEFAULT_CLASSIFY.equals(btmid)) {
+                xmlData.setType(btmid);
+            }
+
+            String ret_xml = null;
+            String id = null;
+            String name = null;
+            String idpath = null;
+            String namepath = null;
+            //琛ㄧず鏄垎绫讳俊鎭暟鎹�
+            if(DOCKING_DEFAULT_CLASSIFY.equals(btmid)){
+                xmlData.setNamepath("");
+                xmlData.setIdpath("");
+                xmlData.setNum("");
+
+                CodeClassifyDO codeClassifyDO = null;
+                try {
+                    codeClassifyDO = codeClassifyDaoI.selectByPrimaryKey(btmoid);
+                }catch (Exception e){
+
+                }
+
+                String classifyoid_parent = "";
+                int orderNum = 0;
+                if(codeClassifyDO==null){//鏌ヤ笉鍒版暟鎹紝璇存槑琚垹闄や簡锛屼粠DOCKING_CACHE2_DELETE鍙�
+                    CodeClassifyDO codeClassifyDOJson = (CodeClassifyDO)redisService.getCacheObject(DOCKING_CACHE2_DELETE+btmoid);
+
+                    if(codeClassifyDOJson==null){
+                        BatchCBO insertLoge = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,"",url,"涓绘暟鎹郴缁熸湭鏌ヨ鍒板垹闄ょ殑鏁版嵁锛屾湭鎵ц鎺ㄩ�併��");
+                        batchCBO.copyFromOther(insertLoge);
+                        WebUtil.setPersistence(true);
+                        boService.persistenceBatch(batchCBO);
+                    }
+                    id = codeClassifyDOJson.getId();
+                    name = codeClassifyDOJson.getName();
+                    orderNum = codeClassifyDOJson.getOrderNum();
+                    classifyoid_parent = codeClassifyDOJson.getParentCodeClassifyOid();
+                }else {
+                    id = codeClassifyDO.getId();
+                    name = codeClassifyDO.getName();
+                    orderNum = codeClassifyDO.getOrderNum();
+                    classifyoid_parent = codeClassifyDO.getParentCodeClassifyOid();
+                }
+
+                //鐖剁骇,idpath,namepath,鍒嗙被鏁版嵁瑙嗗浘涓病鏈夋煡璇㈠嚭璺緞锛岄渶瑕佹墜鍔ㄥ幓鏌ヨ
+                CodeClassifyDO codeClassifyDO_parent = null;
+                try {
+                    codeClassifyDO_parent = codeClassifyDaoI.selectByPrimaryKey(classifyoid_parent);
+                    xmlData.setParentId(codeClassifyDO_parent.getId());
+
+                    //idpath,namepath
+
+                    List<CodeClassifyDO> codeClassifyDOList = codeClassifyDaoI.listParentClassify(codeClassifyDO_parent.getOid());
+                    for (int i=codeClassifyDOList.size()-1;i>=0;i--){
+                        CodeClassifyDO codeClassifyDOi=codeClassifyDOList.get(i);
+                        String idi = codeClassifyDOi.getId();
+                        String namei = codeClassifyDOi.getName();
+                        idpath = idpath==null?idi:idpath+"#"+idi;
+                        namepath = namepath==null?namei:namepath+"#"+namei;
+                    }
+                }catch (Exception e){
+
+                }
+
+                idpath = idpath==null?id:idpath+"#"+id;
+                namepath = namepath==null?name:namepath+"#"+name;
+
+                //鏌ヨ鍒嗙被璺緞
+                xmlData.setName(name);
+                xmlData.setNamepath(namepath);
+                xmlData.setIdpath(idpath);
+                xmlData.setId(id);
+                xmlData.setOrderNum(orderNum);
+
+                List<XmlData> xmlDataList = new ArrayList<XmlData>();
+                xmlDataList.add(xmlData);
+                ret_xml = XmlUtil.writeSendXmlData_classify(xmlDataList);//xml鏍煎紡鏁版嵁
+            }else {
+                Map<String, String> data = null;
+                try {
+                    //琛ㄧず鏄富鏁版嵁
+                    CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid);
+                    BaseResult<Map<String, String>> baseResult = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid());
+
+                    if (baseResult == null) {
+                        JSONObject josni = redisService.getCacheObject(DOCKING_CACHE2_DELETE + btmoid);
+                        data = (Map) josni;
+                    } else {
+                        data = baseResult.getObj();
+                    }
+                }catch (Throwable e){
+                    BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"鏈煡璇㈠埌鐩稿簲鏁版嵁锛�");
+                    batchCBO.copyFromOther(failCbo);
+                    continue;
+                }
+
+                //澶勭悊璁¢噺鍗曚綅绛夎浆鎹�
+//                data = tran(data);
+
+                //濡傛灉鏄泦鎴恊rp閮ㄩ棬鏁版嵁闆嗘垚锛宲arentcode=null寤虹珛涓�绾ч儴闂�,鏃犱汉鏈烘瘮杈冨彧鏈夐儴闂紝娌℃湁绉戝,鎵�浠ョ郴缁熺殑绉戝鍏跺疄灏辨槸浠栦滑鐨勯儴闂�
+                if("organization".equals(btmid.toLowerCase())){
+                    String materialclassify = data.get("materialclassify");
+                    if("绉戝".equals(materialclassify)){
+                        data.put("parentcode","");
+                    }
+                }
+                //鏁版嵁杞崲d
+                String tran_xml = null;
+                try {
+                    //D:\MDM_important\PLT-2022\web\tranTemp\+绯荤粺鍚嶇О,浼氬幓鎵捐繖涓枃浠惰鍙栨暟鎹浆鎹俊鎭�
+                    tran_xml = FileUtils.readFileToString(new File(tranTemp+File.separator+systemcode+".xml"),"utf-8");
+                }catch (IOException e){
+                    e.printStackTrace();
+                }
+                if(StringUtils.isNotEmpty(tran_xml)){
+                    //閫氳繃tran_xml瀵筪ata鏁版嵁杞崲
+                    Map<String,Object> tran_map = null;
+                    try {
+                        tran_map = XmlUtil.readTranXml(tran_xml,btmid);
+                    }catch (Exception e){
+                        e.printStackTrace();
+                    }
+                    if(tran_map!=null){//璇诲彇鍒拌繖涓猙tmid璁剧疆鐨勮浆鎹㈠叧绯讳簡鎵嶅仛澶勭悊
+                        for (String key:tran_map.keySet()){//key=materialtype
+                            Object data_pro_mapo = tran_map.get(key);//data_pro_map
+                            if(data_pro_mapo!=null){//杩欎釜鍊艰缃浆鎹簡鎵嶅鐞�
+                                Map<String,String> data_pro_map = (Map<String,String>)data_pro_mapo;
+                                String mdm_value = data.get(key);
+                                String system_value = data_pro_map.get(mdm_value);
+                                if(StringUtils.isNotEmpty(mdm_value)){
+                                    data.put(key,system_value);
+                                }
+                            }
+                        }
+                    }
+                }
+
+                String unique = null;
+                List<Pro> pros = new ArrayList<Pro>();
+                String codeclassifyoid = null;
+                for (String key:data.keySet()){
+                    Pro pro = new Pro();
+                    pro.setKey(key);
+                    pro.setMean("");
+                    pro.setValue(data.getOrDefault(key,""));
+                    pros.add(pro);
+                    if(tuhao.equals(key)){
+                        unique = data.getOrDefault(key,"");
+                    }
+                    if("oid".equals(key)){
+                        codeclassifyoid = data.getOrDefault(key,"");
+                    }
+                }
+                xmlData.setNum(data.getOrDefault("id",""));
+                xmlData.setPros(pros);
+                xmlData.setUnique(unique);
+
+                //鏌ヨ鍒嗙被璺緞,涓绘暟鎹湪瑙嗗浘涓凡缁忔煡璇㈠嚭浜嗚矾寰勶紝鍙笉杩囨槸,闂撮殧鐨�
+                namepath = classifyname.replaceAll(",","#");
+                idpath = classifyid.replaceAll(",","#");
+
+                xmlData.setNamepath(namepath);
+                xmlData.setIdpath(idpath);
+
+                List<XmlData> xmlDataList = new ArrayList<XmlData>();
+                xmlDataList.add(xmlData);
+                ret_xml = XmlUtil.writeSendXmlData(xmlDataList);//xml鏍煎紡鏁版嵁
+            }
+
+            //鍒囨崲xml/json
+            String sendString = null;
+            String backString = null;
+            if(paramType.equals(DATATYPE_JSON)){
+                sendString = XML.toJSONObject(ret_xml).toString();
+            }else {
+                sendString = ret_xml;
+            }
+            logger.info("绯荤粺锛�"+systemcode);
+            logger.info("鎺ュ彛鍦板潃:"+url);
+            logger.info("鎺ュ彛鍑芥暟:"+interfaceFunction);
+            logger.info("鎺ュ彛浼犻�掑弬鏁�:"+sendString);
+            //鎺ㄩ�佹暟鎹�
+            try {
+                if (type.equals(URLTYPE_GET)) {//GET璇锋眰
+                    String sendurl = url + "?" + PARAM_XMLDATA + "=" + sendString;
+                    //鎷兼帴param
+                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                        sendurl = sendurl + "&" + sysIntParamDO.getParamkey() + "=" + sysIntParamDO.getParamvalue();
+                    }
+                    paramString=sendurl;
+                    backString = HttpUtils.get(sendurl);
+                } else if (type.equals(URLTYPE_POST)) {//POST璇锋眰
+                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                        params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
+                    }
+                    paramString=params.toString();
+                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+                    for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
+                        headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
+                    }
+                    backString = HttpUtils.post(url, params, headers);
+                } else if (type.equals(URLTYPE_WEBSERVICE)) {//webserver璇锋眰
+                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                        params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
+                    }
+                    paramString=sendString;
+                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+                    for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
+                        headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
+                    }
+                    backString = WsErpClientUtil.sendMsg(url, namespace, soapaction,interfaceFunction,targName, paramString, 10000);
+                } else {//corba鎺ュ彛
+
+                }
+                paramString=sendString;
+            }catch (Exception e){
+                e.printStackTrace();
+                BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"鎺ㄩ�佹暟鎹け璐ワ紒");
+                batchCBO.copyFromOther(failCbo);
+            }
+            logger.info("鎺ュ彛杩斿洖鍙傛暟:"+backString);
+            //瑙f瀽杩旇繕鍙傛暟
+            try {
+                BackXml backXml = null;
+                if(returnType.equals(DATATYPE_JSON)){
+                    backXml = XmlUtil.readSendJsonData(backString);//鐩墠鍙鍙栦富鏁版嵁json杩斿洖淇℃伅
+                }else {
+                    if(DOCKING_DEFAULT_CLASSIFY.equals(btmid)){
+                        backXml = XmlUtil.readSendXmlData_classify(backString);//鍒嗙被xml杩斿洖淇℃伅
+                    }else {
+                        backXml = XmlUtil.readSendXmlData(backString);//涓绘暟鎹畑ml杩斿洖淇℃伅
+                    }
+                }
+                List<XmlData> datas = backXml.getDatas();
+                boolean isSend = false;
+                for (XmlData xmlDatai:datas){
+                    String xml_datacode = xmlDatai.getState();
+                    String xml_datamsg = xmlDatai.getMsg();
+                    if(XML_DATACODE_200.equals(xml_datacode)){
+                        BatchCBO insertLoge = taskSuccess(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
+                        batchCBO.copyFromOther(insertLoge);
+                        isSend = true;
+                    }else if(XML_DATACODE_500.equals(xml_datacode)){
+                        BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
+                        batchCBO.copyFromOther(failCbo);
+                    }else if("true".equals(xml_datacode.toLowerCase())){
+                        BatchCBO insertLoge = taskSuccess(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
+                        batchCBO.copyFromOther(insertLoge);
+                        isSend = true;
+                    }else if("false".equals(xml_datacode)){
+                        BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,xml_datamsg);
+                        batchCBO.copyFromOther(failCbo);
+                    }else{
+                        BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"杩旇繕xml鏍煎紡涓嶆纭紝缂哄皯code!");
+                        batchCBO.copyFromOther(failCbo);
+                    }
+                }
+
+                //鍏ㄩ兘鎺ユ敹鎴愬姛鐨勬儏鍐典笅,淇敼dockingtask sendflag涓哄凡鍙戦��
+                if(isSend) {
+                    dockingTaskDO.setSendflag(MdmDuckingConstant.SEND_FLAG_TRUE);
+                    BatchCBO updateTask = dockingTaskDaoI.updateByPrimaryKey(dockingTaskDO);
+                    batchCBO.copyFromOther(updateTask);
+                }
+
+            }catch (Exception e){
+                e.printStackTrace();
+                BatchCBO failCbo = taskFail(systemcode,systemname,systemoid,classifyoid,classifyid,classifyname,dataid,uniquecode,paramString,url,"瑙f瀽杩旇繕鏁版嵁澶辫触锛�");
+                batchCBO.copyFromOther(failCbo);
+            }
+
+            //姣忎竴涓猼ask涓�涓簨鐗�
+            WebUtil.setPersistence(true);
+            boService.persistenceBatch(batchCBO);
+
+        }
+    }
+
+    public static Map<String,String> tranMap = new HashMap<String,String>();
+    public Map<String,String> tran(Map<String,String> data){
+        if(tranMap.isEmpty()){
+//            tranMap.put("jiliangdw","jiliangdwname");
+        }
+
+        for (String key:tranMap.keySet()){
+            String tran_key = tranMap.get(key);
+            String tran_key_value = data.get(tran_key);
+            if(StringUtils.isNotEmpty(tran_key_value)){
+                data.put(key,tran_key_value);
+            }
+        }
+        data.put("shifoupihaoguanli","0");
+        return data;
+    }
+
+    /**
+     * 瀹氭椂浠诲姟鎺ㄩ��
+     */
+    @Override
+    public void DockingScheduing(){
+        //data 2 task
+        insertCache2();
+
+        //鎺ㄩ�佹暟鎹�
+        sendData3();
+    }
+
+    /**
+     * 鏁版嵁鍒犻櫎鐨勬椂鍊欙紝缂撳瓨鍒皉edis
+     * @param oid
+     */
+    @Override
+    public void cacheDeleteData(String oid,Object obj){
+        logger.info("鍒犻櫎鏁版嵁鎻掑叆redis,key: "+DOCKING_CACHE2_DELETE+",oid: "+oid+",obj: "+obj);
+        redisService.setCacheObject(DOCKING_CACHE2_DELETE + oid, obj);
+    }
+
+    @Override
+    public DataGrid<DockingDataDO> gridData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        pageHelper.addDefaultAsc("sendflag");
+        List<DockingDataDO> doList = dockingDataDaoI.selectByCondition(conditionMap,pageHelper);
+
+        DataGrid<DockingDataDO> dataGrid=new DataGrid<DockingDataDO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(doList);
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingDataDaoI.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    @Override
+    public DataGrid<DockingTaskDO> gridTask(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        pageHelper.addDefaultAsc("sendflag");
+        List<DockingTaskDO> doList = dockingTaskDaoI.selectByCondition(conditionMap,pageHelper);
+
+        DataGrid<DockingTaskDO> dataGrid=new DataGrid<DockingTaskDO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(doList);
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingTaskDaoI.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    @Override
+    public DataGrid<DockingLogeDO> gridLoge(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<DockingLogeDO> doList = dockingLogeDaoI.selectByCondition(conditionMap,pageHelper);
+
+        DataGrid<DockingLogeDO> dataGrid=new DataGrid<DockingLogeDO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(doList);
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingLogeDaoI.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    @Override
+    public DataGrid<SysIntHeaderDO> gridHeader(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<SysIntHeaderDO> doList = sysIntHeaderDaoI.selectByCondition(conditionMap,pageHelper);
+
+        DataGrid<SysIntHeaderDO> dataGrid=new DataGrid<SysIntHeaderDO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(doList);
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(sysIntHeaderDaoI.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+    /**
+     * 鎺ㄩ�佹垚鍔�,鎻掑叆dockingtask锛屽悓鏃惰褰昹oge
+     * @param systemcode
+     * @param systemname
+     * @param systemoid
+     * @param paramString
+     * @param url
+     */
+    public BatchCBO taskSuccess(String systemcode,String systemname,String systemoid,String classifyoid,String classifyid,String classifyname,String id,String uniquecode,String paramString,String url,String msg){
+        String oid=redisService.getUUIDEveryDay();
+        DockingLogeDO dockingLogeDO = new DockingLogeDO();
+        dockingLogeDO.setOid(oid);
+        dockingLogeDO.setSystemcode(systemcode);
+        dockingLogeDO.setSystemname(systemname);
+        dockingLogeDO.setSystemoid(systemoid);
+        dockingLogeDO.setClassifyoid(classifyoid);
+        dockingLogeDO.setClassifyid(classifyid);
+        dockingLogeDO.setClassifyname(classifyname);
+        dockingLogeDO.setId(id);
+        dockingLogeDO.setUniquecode(uniquecode);
+       /** if(paramString.length()>100){
+            paramString = paramString.substring(0,100);
+        }***/
+        dockingLogeDO.setParamstring(paramString);
+        dockingLogeDO.setType(DATA_LOGE_OUT);
+
+//        dockingLogeDO.setReturnstring(retString);
+        dockingLogeDO.setMsg(msg);
+        dockingLogeDO.setInterfacestatus(MdmDuckingConstant.INTERFACE_STATUS_TRUE);
+        BatchCBO insert = dockingLogeDaoI.insert(dockingLogeDO);
+        logger.info("闆嗘垚鎺ㄩ�佹暟鎹垚鍔�,systemcode:"+systemcode+",systemname:"+systemcode+",url:"+url+",param:"+paramString);
+        return insert;
+    }
+
+    /**
+     * 鎺ㄩ�佸け璐�,鎻掑叆dockingtask锛屽悓鏃惰褰昹oge
+     * @param systemcode
+     * @param systemname
+     * @param systemoid
+     * @param paramString
+     * @param url
+     */
+    public BatchCBO taskFail(String systemcode,String systemname,String systemoid,String classifyoid,String classifyid,String classifyname,String id,String uniquecode,String paramString,String url,String msg){
+        String oid=redisService.getUUIDEveryDay();
+        DockingLogeDO dockingLogeDO = new DockingLogeDO();
+        dockingLogeDO.setOid(oid);
+        dockingLogeDO.setSystemcode(systemcode);
+        dockingLogeDO.setSystemname(systemname);
+        dockingLogeDO.setSystemoid(systemoid);
+        dockingLogeDO.setClassifyoid(classifyoid);
+        dockingLogeDO.setClassifyid(classifyid);
+        dockingLogeDO.setClassifyname(classifyname);
+        dockingLogeDO.setId(id);
+        dockingLogeDO.setUniquecode(uniquecode);
+       /** if(StringUtils.isNotEmpty(paramString)&&paramString.length()>100){
+            paramString = paramString.substring(0,100);
+        }***/
+        dockingLogeDO.setParamstring(paramString);
+        dockingLogeDO.setType(DATA_LOGE_OUT);
+
+        dockingLogeDO.setMsg(msg);
+        dockingLogeDO.setInterfacestatus(MdmDuckingConstant.INTERFACE_STATUS_FALSE);
+        BatchCBO insert = dockingLogeDaoI.insert(dockingLogeDO);
+
+        logger.error("闆嗘垚鎺ㄩ�佹暟鎹け璐�,systemcode:"+systemcode+",systemname:"+systemcode+",url:"+url+",param:"+paramString+",e:"+msg);
+        return insert;
+    }
+    public void initSysadmin(){
+        SessionInfo sessionInfo = new SessionInfo();
+        sessionInfo.setUserId("sysAdmin");
+        sessionInfo.setUserName("绯荤粺绠$悊鍛�");
+        sessionInfo.setIp(WebUtil.getLocalIp());
+        sessionInfo.setUserOid("193C026F-7DB8-27B4-F383-4E8BE083FB07");
+        sessionInfo.setUserSecret(UserSecretEnum.PRIVACY.getValue()+"");
+        WebUtil.setSessionInfo(sessionInfo);
+    }
+
+    /**
+     * dockingdata鏌ヨ闇�瑕佹帹閫佺殑鏁版嵁
+     * @return
+     */
+    public List<Map> getDockingDatas(){
+        String sql = "select oid,id,classifyoid,btmid,btmoid,sendtype,classifyid,classifyname from PLATFORMBTM_codedockingDATA where sendflag = 'false'";
+        List<Map> datas = boService.queryBySqlForMap(sql,null);
+        return datas;
+    }
+
+    /**
+     * dockingdata鍒犻櫎
+     * @return
+     */
+    public boolean delteDockingData(String oid){
+        boolean u = false;
+        String sql = "delete from PLATFORMBTM_codedockingDATA where oid = '"+oid+"'";
+        try {
+            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
+        }catch (Exception e){
+
+        }
+        return u;
+    }
+
+    /**
+     * 鏌ヨ鍥惧彿
+     * @return
+     */
+    public String getTuhao(String oid){
+        String tuhao = "";
+        String sql = "select tuhao from PLATFORMBTM_wupin where oid = '"+oid+"'";
+        List<Map> datas = boService.queryBySqlForMap(sql,null);
+        if(datas!=null&&datas.size()!=0){
+            tuhao = datas.get(0).getOrDefault("tuhao","").toString();
+        }
+        return tuhao;
+    }
+
+    @Autowired
+    private PlatformClientUtil platformClientUtil;
+    /**
+     * dockingdata鏍规嵁oid淇敼sendflag
+     * @param oid
+     * @param sendflag
+     * @return
+     */
+    public boolean updateDockingDatasSendFlag(String oid,String sendflag){
+        boolean u=false;
+        String sql = "update PLATFORMBTM_codedockingdata set sendFlag = '"+sendflag+"' where oid='"+oid+"'";
+        try {
+            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
+        }catch (Exception e){
+
+        }
+        return u;
+    }
+
+    public boolean updateDockingDatasUniqueCode(String oid,String uniquecode){
+        boolean u=false;
+        String sql = "update PLATFORMBTM_codedockingdata set uniquecode = '"+uniquecode+"' where oid='"+oid+"'";
+        try {
+            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
+        }catch (Exception e){
+
+        }
+        return u;
+    }
+
+
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingSyncServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingSyncServiceImpl.java
new file mode 100644
index 0000000..4c75416
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -0,0 +1,630 @@
+package org.springblade.code.service.impl;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.vci.mdm.constant.MdmDuckingConstant;
+import com.vci.mdm.dao.*;
+import com.vci.mdm.dto.datapush.classify.JsonRootDataDTO;
+import com.vci.mdm.dto.datapush.classify.NodeClassifyDTO;
+import com.vci.mdm.dto.datapush.classify.NodeDataDTO;
+import com.vci.mdm.dto.datapush.classify.NodeLibraryDTO;
+import com.vci.mdm.dto.datapush.data.NodeJosnDTO;
+import com.vci.mdm.dto.datapush.data.NodeObjectDTO;
+import com.vci.mdm.dto.datapush.data.NodeProDTO;
+import com.vci.mdm.dto.datapush.data.NodedataDTO;
+import com.vci.mdm.dto.datapush.result.ResultJsonDTO;
+import com.vci.mdm.dto.datapush.result.ResultNodeDataDTO;
+import com.vci.mdm.dto.datapush.result.ResultNodeObjectDTO;
+import com.vci.mdm.model.*;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateVO;
+import com.vci.mdm.pagemodel.SysIntInfoVO;
+import com.vci.mdm.service.*;
+import com.vci.mdm.utils.*;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.enumpck.UserSecretEnum;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.SessionInfo;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.redis.RedisService;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.PlatformClientUtil;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.mdm.constant.MdmDuckingConstant.*;
+
+
+/**
+ * 涓婚搴撻泦鎴愭湇鍔�
+ * @author wangyi
+ * @date 2022-03-20
+ */
+@Service
+public class CodeDuckingSyncServiceImpl implements CodeDuckingSyncServiceI {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
+     */
+    @Resource
+    private DockingTaskDaoI dockingTaskDaoI;
+
+    /**
+     * 闆嗘垚鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
+     */
+    @Resource
+    private DockingDataDaoI dockingDataDaoI;
+
+    /**
+     * 闆嗘垚鏃ュ織鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private DockingLogeDaoI dockingLogeDaoI;
+
+    /**
+     * 妯℃澘灞炴�ф暟鎹搷浣滃眰
+     */
+    @Resource
+    private CodeClassifyDaoI codeClassifyDaoI;
+
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+     * 缂撳瓨鏈嶅姟
+     */
+    @Autowired
+    private RedisService redisService;
+
+    /**
+     * 鏁版嵁鏈嶅姟
+     */
+    @Autowired(required = false)
+    @Lazy
+    private MdmEngineServiceI mdmEngineServiceI;
+
+
+    /**
+     * 瑕佹帹閫佺郴缁熺殑鏈嶅姟
+     */
+    @Autowired
+    private SysIntInfoServiceI sysIntInfoServiceI;
+
+    @Value("${dataSyncPush.dataParamName:xmlData}")
+    public String DATA_PARAM_NAME;
+
+    /**
+     * 瀹氭椂浠诲姟鎺ㄩ��
+     */
+    @Override
+    public void DockingDataSyncScheduing(){
+       // insertCache2();
+        initPushDataTaks(1);
+        sendpushDataForService();
+    }
+
+    /**
+     * 鍒嗙被瀹氭椂浠诲姟鎺ㄩ��
+     */
+    @Override
+    public void DockingClassSyncScheduing(){
+        initPushDataTaks(2);//鍒嗙被鎺ㄩ��
+        sendpushClsfForService();
+    }
+
+    /**
+     * 鎵嬪姩鎺ㄩ�佷负瀹屾垚鐨勬暟鎹�
+     * @param oids
+     * @return
+     */
+    @Override
+    public BaseResult sendData(String oids) {
+        VciBaseUtil.alertNotNull(oids,"绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄",oids,"绯荤粺闆嗘垚鍩虹淇℃伅鐨勪富閿�");
+        List<String> dockingTaskOidList=new ArrayList<>();
+        dockingTaskOidList= VciBaseUtil.str2List(oids);
+        List<DockingTaskDO> newDockingTaskDOs= this.dockingTaskDaoI.selectByPrimaryKeyCollection(dockingTaskOidList);
+        Map<String,List<DockingTaskDO>> typeDockingTaskDOMap=new HashMap<>();
+        newDockingTaskDOs.stream().forEach(newDockingTaskDO->{
+           String btmId=newDockingTaskDO.getBtmid();
+           if(btmId.equalsIgnoreCase(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
+               List<DockingTaskDO> dockingTaskDOList= typeDockingTaskDOMap.get(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
+               if(CollectionUtils.isEmpty(dockingTaskDOList)){
+                   dockingTaskDOList=new ArrayList<>();
+               }
+               dockingTaskDOList.add(newDockingTaskDO);
+               typeDockingTaskDOMap.put(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT),dockingTaskDOList);
+           }else{
+               List<DockingTaskDO> dockingTaskDOList= typeDockingTaskDOMap.get("data");
+               if(CollectionUtils.isEmpty(dockingTaskDOList)){
+                   dockingTaskDOList=new ArrayList<>();
+               }
+               dockingTaskDOList.add(newDockingTaskDO);
+               typeDockingTaskDOMap.put("data",dockingTaskDOList);
+           }
+        });
+        typeDockingTaskDOMap.keySet().forEach(type->{
+           List<DockingTaskDO> DockingTaskDO=typeDockingTaskDOMap.get(type);
+           if(!CollectionUtils.isEmpty(DockingTaskDO)){
+               if(type.equalsIgnoreCase(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
+                   this.sendpushClsfForService(DockingTaskDO);
+               }else{
+                   this.sendpushDataForService(DockingTaskDO);
+               }
+           }
+        });
+       return  BaseResult.successMsg("鎵嬪姩鎺ㄩ�佸畬鎴�,璇锋牳瀵规槸鍚︽帹閫佹垚鍔�");
+    }
+    /***
+     * 鏌ヨredis涓暟鎹紝瀵规瘮鍚庢彃鍏ockingtask
+     * @param type
+     */
+    private void initPushDataTaks(int type){
+        initSysadmin();
+        //sysintinfo鏌ヨ瑕佹帹閫佺殑涓婚搴撳拰鐩稿叧绯荤粺淇℃伅
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("usedflag","true");
+        conditionMap.put("pushType",type==2?"2":"1") ;//2鏄唬琛ㄥ垎绫绘帹閫侊紝1鏄唬琛ㄦ暟鎹帹閫�
+
+        List<SysIntInfoDO> sysIntInfoVOList = sysIntInfoServiceI.selectAll(conditionMap);
+        if(CollectionUtils.isEmpty(sysIntInfoVOList)){
+            String title=type==2?"鍒嗙被鎺ㄩ��":"鏁版嵁鎺ㄩ��";
+            logger.info("info->鎵�鏈夐泦鎴愮郴缁燂紝鏈煡璇㈠埌鐩稿叧鐨勩��"+title+"銆戠殑鎺ュ彛閰嶇疆淇℃伅锛岄厤缃�");
+            return;
+        }
+        Map<String ,List<SysIntInfoDO>> sysIntInfoDOMap = new HashMap<String ,List<SysIntInfoDO>>();//key=classifyoid,value=list<map>
+        for (SysIntInfoDO sysIntInfoVOi:sysIntInfoVOList){
+            List<SysIntInfoDO> SysIntInfoVOListi = sysIntInfoDOMap.get(sysIntInfoVOi.getClassifyoid());
+            if(SysIntInfoVOListi==null){
+                SysIntInfoVOListi = new ArrayList<SysIntInfoDO>();
+            }
+            SysIntInfoVOListi.add(sysIntInfoVOi);
+            sysIntInfoDOMap.put(sysIntInfoVOi.getClassifyoid(),SysIntInfoVOListi);
+        }
+        //鏍规嵁绫诲瀷鍘绘煡璇㈤渶瑕侀泦鎴愮殑鍒嗙被鎴栬�呮暟鎹�
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(DockingDataDO.class);
+        queryWrapperForDO.addQueryMap("sendflag","false");
+        if(type==2){
+            queryWrapperForDO.addQueryMap("btmTypeId",DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
+        }else {
+            queryWrapperForDO.addQueryMap("btmTypeId", QueryOptionConstant.NOTIN + "(" + VciBaseUtil.toInSql(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT)) + ")");
+        }
+        List<DockingDataDO> dataList = dockingDataDaoI.selectByWrapper(queryWrapperForDO);
+
+        for (DockingDataDO mapi:dataList){
+            WebUtil.setPersistence(false);
+            BatchCBO batchCBO = new BatchCBO();
+            String dataoid = mapi.getOid();//data瀵硅薄鐨刼id
+            String classifyoid = mapi.getClassifyoid();
+            String id = mapi.getId();
+            String uniquecode = mapi.getUniquecode();
+            String btmid = mapi.getBtmid();
+            String btmoid = mapi.getBtmoid();
+            String sendtype = mapi.getSendtype();
+            String classifyid = mapi.getClassifyid();
+            String classifyname = mapi.getClassifyname();
+            String curentClassOid=null;
+            if(type==2){
+                curentClassOid=btmoid;
+            }else{
+                curentClassOid=classifyoid;
+            }
+            List<SysIntInfoDO> effectiveSysIntInfoVOs=new ArrayList<>();
+           //鏍规嵁褰撳墠鏁版嵁鐨刬d锛屾煡璇㈣幏鍙栧摢浜涚郴缁熼渶瑕佸仛闆嗘垚
+            List<CodeClassifyDO> parentLeveDO= codeClassifyDaoI.selectAllLevelParentByOid(curentClassOid);
+            if(CollectionUtils.isEmpty(parentLeveDO)){
+                continue;//璇存槑杩欎釜鍒嗙被琚垹鎺変簡锛屼笉鍋氬鐞�
+            }
+            Map<String, CodeClassifyDO> oidCodeclassifyDOMap = parentLeveDO.stream().filter(codeClassifyDO -> codeClassifyDO != null && StringUtils.isNotBlank(codeClassifyDO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+
+            oidCodeclassifyDOMap.keySet().forEach(oid->{
+                if(sysIntInfoDOMap.containsKey(oid)){
+                    List<SysIntInfoDO> sysIntInfoDOS= sysIntInfoDOMap.get(oid);
+                    effectiveSysIntInfoVOs.addAll(sysIntInfoDOS);
+                }
+            });
+            //濡傛灉鏍¢獙鐨勭郴缁熸帴鍙d俊鎭笉瀛樺湪锛屽垯鏁版嵁涓嶄笉寰�淇℃伅閲屾帹閫�
+            if(CollectionUtils.isEmpty(effectiveSysIntInfoVOs)){
+                continue;
+            }
+            List<DockingTaskDO> dockingTaskDO_insert = new ArrayList<DockingTaskDO>();
+            for (SysIntInfoDO sysIntInfoVOi:effectiveSysIntInfoVOs){
+                DockingTaskDO dockingTaskDO = new DockingTaskDO();
+                dockingTaskDO.setOid(redisService.getUUIDEveryDay());
+                dockingTaskDO.setSendflag(SEND_FLAG_FALSE);
+                dockingTaskDO.setId(id);//缂栫爜
+                dockingTaskDO.setUniquecode(uniquecode);
+                dockingTaskDO.setBtmoid(btmoid);//鏁版嵁oid
+                dockingTaskDO.setBtmid(btmid);//鏁版嵁涓氬姟绫诲瀷id
+                dockingTaskDO.setClassifyid(classifyid);//鏁版嵁鍦ㄥ垎绫籭d
+                dockingTaskDO.setClassifyoid(classifyoid);//鏁版嵁鎵�鍦ㄥ垎绫籵id
+                dockingTaskDO.setClassifyname(classifyname);//鏁版嵁鎵�鍦ㄥ垎绫诲悕绉�
+                dockingTaskDO.setSendtype(sendtype);//鏁版嵁鎺ㄩ�佺被鍨�
+                dockingTaskDO.setDataoid(dataoid);
+
+                //intinfo
+                dockingTaskDO.setSysinfooid(sysIntInfoVOi.getOid());//intinfo鐨刼id
+                dockingTaskDO.setSystemoid(sysIntInfoVOi.getSysbaseoid());//绯荤粺oid
+                dockingTaskDO.setSystemcode(sysIntInfoVOi.getSysbaseid());//绯荤粺缂栫爜
+                dockingTaskDO.setSystemname(sysIntInfoVOi.getSysbasename());//绯荤粺name
+                dockingTaskDO_insert.add(dockingTaskDO);
+            }
+
+            BatchCBO bi = null;
+            if(dockingTaskDO_insert.size()!=0) {
+                bi = dockingTaskDaoI.batchInsert(dockingTaskDO_insert);
+                batchCBO.copyFromOther(bi);
+            }
+            WebUtil.setPersistence(true);
+            boService.persistenceBatch(batchCBO);
+            //dockingTaskDaoI.updateByPrimaryKey鏂规硶鎶ラ敊浜嗭紝鎵�浠ユ墜鍐欎簡杩欎釜
+            boolean u = updateDockingDatasSendFlag(dataoid,SEND_FLAG_TRUE);
+            if(!u){
+                logger.error("闆嗘垚data鍒嗚В浠诲姟澶辫触锛乨ataoid:"+dataoid);
+                continue;
+            }
+
+        }
+    }
+    private void sendpushDataForService (){
+        initSysadmin();
+        //鏌ヨ鍝簺浠诲姟杩樻病鏈夋墽琛屽畬鎴�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
+        queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
+        queryWrapper.addQueryMap("btmId", QueryOptionConstant.NOTIN + "(" + VciBaseUtil.toInSql(DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT)) + ")");
+        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
+        sendpushDataForService(dockingTaskDOS);
+    }
+    /***
+     * 鍙戦�佺紪鐮佷富鏁版嵁
+     */
+    private void sendpushDataForService (List<DockingTaskDO> dockingTaskDOS){
+
+        //姣忎釜task渚濇鎵ц鎺ㄩ��
+        for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
+            //姣忎釜task涓�涓簨鍔★紝寮�鍚�
+            WebUtil.setPersistence(false);
+            BatchCBO batchCBO = new BatchCBO();
+            String paramString="";
+            String sendString="";
+            String backString="";
+            try {
+                //鏌ヨ绯荤粺鎺ュ彛淇℃伅,ip method,dataType
+                String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 鐨刼id
+                String classifyoid = dockingTaskDO.getClassifyoid();
+                //鏌ヨ瑕佹帹閫佺殑鏁版嵁
+                String btmoid = dockingTaskDO.getBtmoid();//鏁版嵁btmid
+                //琛ㄧず鏄富鏁版嵁
+                CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid);
+                BaseResult<Map<String, String>> baseResult = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid());
+                List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes();
+                Map<String/**鑻辨枃鍚嶇О**/, String/**涓枃鍚嶇О**/> attrIdNameMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t.getName(), (o1, o2) -> o2));
+                Map<String, String> data = new HashMap<>();
+                if (baseResult == null) {
+                    JSONObject josni = redisService.getCacheObject(DOCKING_CACHE2_DELETE + btmoid);
+                    data = (Map) josni;
+                } else {
+                    data = baseResult.getObj();
+                }
+                List<NodeProDTO> nodeProDTOS = new ArrayList<>();
+                Map<String, String> finalData = data;
+                attrIdNameMap.keySet().forEach(field -> {
+                    String outName = attrIdNameMap.get(field);
+                    if (finalData.containsKey(field)) {
+                        String Value = finalData.get(field);
+                        NodeProDTO nodeProDTO = new NodeProDTO();
+                        nodeProDTO.setFiledName(field);
+                        nodeProDTO.setOutname(outName);
+                        nodeProDTO.setFiledValue(Value);
+                        nodeProDTOS.add(nodeProDTO);
+                    }
+                });
+
+                String[] classCodeLeves = dockingTaskDO.getClassifyid().split(",");
+                NodeJosnDTO nodeJosnDTO = new NodeJosnDTO();
+                NodedataDTO nodeDataDTO = new NodedataDTO();
+                NodeObjectDTO nodeObjectDTO = new NodeObjectDTO();
+                nodeObjectDTO.setCode(dockingTaskDO.getId());//璁剧疆缂栫爜
+                nodeObjectDTO.setClassCode(classCodeLeves[0]);
+                nodeObjectDTO.setStatus(data.get("lcstatus"));
+                nodeObjectDTO.setLibrary(classCodeLeves[classCodeLeves.length - 1]);
+                nodeObjectDTO.setPro(nodeProDTOS);
+                List<NodeObjectDTO> nodeObjectDTOS = new ArrayList<>();
+                nodeObjectDTOS.add(nodeObjectDTO);
+                nodeDataDTO.setObject(nodeObjectDTOS);
+                nodeJosnDTO.setData(nodeDataDTO);
+                //鏌ヨ鎺ㄩ�佹帴鍙e弬鏁�
+                SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
+                String paramType = sysIntInfoVO.getParamtype();//xml/json
+                if (paramType.equals(DATATYPE_JSON)) {
+                    Object object = JSONObject.toJSON(nodeJosnDTO);
+                    sendString = object.toString();
+                } else {
+                    //缁勭粐杩斿洖鎺ュ彛淇℃伅
+                    XStream xStream = new XStream(new DomDriver());
+                    xStream.processAnnotations(NodedataDTO.class);
+                    xStream.autodetectAnnotations(true);
+                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
+                }
+                //璋冪敤鎺ュ彛
+                callInterface(sendString,sysIntInfoVO, dockingTaskDO, batchCBO);
+            }catch (Throwable e){
+                e.printStackTrace();
+            }finally {
+                //姣忎竴涓猼ask涓�涓簨鐗�
+                WebUtil.setPersistence(true);
+                boService.persistenceBatch(batchCBO);
+            }
+        }
+    }
+    public void sendpushClsfForService(){
+        initSysadmin();
+        //鏌ヨ鍝簺浠诲姟杩樻病鏈夋墽琛屽畬鎴�
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
+        queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
+        queryWrapper.addQueryMap("btmId",DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT));
+        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
+        sendpushClsfForService(dockingTaskDOS);
+    }
+    /***
+     * 鍙戦�佸垎绫绘暟鎹�
+     */
+    private void sendpushClsfForService(List<DockingTaskDO> dockingTaskDOS){
+        //姣忎釜task渚濇鎵ц鎺ㄩ��
+        for (DockingTaskDO dockingTaskDO:dockingTaskDOS){
+            //姣忎釜task涓�涓簨鍔★紝寮�鍚�
+            WebUtil.setPersistence(false);
+            BatchCBO batchCBO = new BatchCBO();
+            String paramString="";
+            String sendString="";
+            String backString="";
+            //鏌ヨ绯荤粺鎺ュ彛淇℃伅,ip method,dataType
+            String systeminfooid = dockingTaskDO.getSysinfooid();//sysininfo 鐨刼id
+            try {
+                //鏌ヨ瑕佹帹閫佺殑鏁版嵁
+                String btmoid = dockingTaskDO.getBtmoid();//鏁版嵁btmid
+                JsonRootDataDTO jsonRootDataDTO=new JsonRootDataDTO();
+                CodeClassifyDO codeClassifyDO=codeClassifyDaoI.selectByPrimaryKey(btmoid);
+                List<NodeClassifyDTO>nodeClassifyDTOList=new ArrayList<>();
+                NodeClassifyDTO nodeClassifyDTO=new NodeClassifyDTO();
+                nodeClassifyDTO.setClassCode(codeClassifyDO.getId());//鍒嗙被浠e彿
+                nodeClassifyDTO.setDescription(codeClassifyDO.getDescription());//鍒嗙被鎻忚堪
+                nodeClassifyDTO.setFullPathName(codeClassifyDO.getPath());//鍏ㄨ矾寰�
+                nodeClassifyDTO.setLcStatus(codeClassifyDO.getLcStatus());//鐘舵��
+              //  CodeClassifyDO parentClassDo=codeClassifyDaoI.selectByPrimaryKey(codeClassifyDO.getParentCodeClassifyOid());
+                nodeClassifyDTO.setPid(codeClassifyDO.getId());//鐖秈d鑺傜偣
+                nodeClassifyDTO.setId(codeClassifyDO.getOid());//鍒嗙被oid
+                nodeClassifyDTO.setName(codeClassifyDO.getName());//鍒嗙被鍚嶇О
+                nodeClassifyDTOList.add(nodeClassifyDTO);
+                NodeLibraryDTO nodeLibraryDTO=new NodeLibraryDTO();
+                nodeLibraryDTO.setClassify(nodeClassifyDTOList);
+                CodeClassifyDO rootClassify=codeClassifyDaoI.getRootClassify(btmoid);
+                nodeLibraryDTO.setId(rootClassify.getOid());
+                nodeLibraryDTO.setName(rootClassify.getName());
+                NodeDataDTO nodeDataDTO=new NodeDataDTO();
+                nodeDataDTO.setLibrary(nodeLibraryDTO);
+                jsonRootDataDTO.setData(nodeDataDTO);
+
+                //鏌ヨ鎺ㄩ�佹帴鍙e弬鏁�
+                SysIntInfoVO sysIntInfoVO = sysIntInfoServiceI.getObjectByOid(systeminfooid);
+                String paramType = sysIntInfoVO.getParamtype();//xml/json
+                if(paramType.equals(DATATYPE_JSON)){
+                    Object object = JSONObject.toJSON(jsonRootDataDTO);
+                    sendString = object.toString();
+                }else{
+                    //缁勭粐杩斿洖鎺ュ彛淇℃伅
+                    XStream xStream = new XStream(new DomDriver());
+                    xStream.processAnnotations(NodeDataDTO.class);
+                    xStream.autodetectAnnotations(true);
+                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
+                }
+                //璋冪敤鎺ュ彛
+                callInterface(sendString,sysIntInfoVO,dockingTaskDO,batchCBO);
+            }catch (Throwable e){
+                e.printStackTrace();
+            }finally {
+                //姣忎竴涓猼ask涓�涓簨鐗�
+                WebUtil.setPersistence(true);
+                boService.persistenceBatch(batchCBO);
+            }
+        }
+    }
+
+    /***
+     * 璋冪敤鎺ュ彛
+     * @param sysIntInfoVO
+     * @throws Throwable
+     */
+    private void callInterface(String  sendString , SysIntInfoVO sysIntInfoVO,DockingTaskDO dockingTaskDO,BatchCBO batchCBO) throws  Throwable{
+        String paramString = "";
+
+        String backString = "";
+        String msg="";
+        String url = sysIntInfoVO.getRequesturl();//url
+        List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>();
+        try {
+
+            String type = sysIntInfoVO.getInterfacetype().toLowerCase(Locale.ROOT);//get/post/webserver/corba
+            String paramType = sysIntInfoVO.getParamtype();//xml/json
+            String returnType = sysIntInfoVO.getReturntype();//xml/json
+            String requestmethod= sysIntInfoVO.getRequestmethod();
+            String interfaceFunction = sysIntInfoVO.getInterfaceFunction();//涓昏鏄痺ebservice鐨勬柟娉曞悕
+            String namespace = sysIntInfoVO.getNamespace();//namespace
+            String soapaction = sysIntInfoVO.getSoapaction();//soapaction
+            String targName = sysIntInfoVO.getTargName();//targName
+            String cxfaxis = sysIntInfoVO.getCxfaxis();//webservice鏄痗xf/axis
+            //鏌ヨparam
+            List<SysIntParamDO> sysIntParamDOList = sysIntInfoServiceI.getParamsBySystemInfoOid(sysIntInfoVO.getOid());
+            //鏌ヨheader
+            List<SysIntHeaderDO> sysIntHeaderDOList = sysIntInfoServiceI.getHeadersBySystemInfoOid(sysIntInfoVO.getOid());
+            if(type.equals(URLTYPE_HTTP)) {
+                if (requestmethod.equals(URLTYPE_GET)) {//GET璇锋眰
+                    String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString;
+                    //鎷兼帴param
+                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                        sendurl = sendurl + "&" + sysIntParamDO.getParamkey() + "=" + sysIntParamDO.getParamvalue();
+                    }
+                    paramString = sendurl;
+                    backString = HttpUtils.get(sendurl);
+                } else if (requestmethod.equals(URLTYPE_POST)) {//POST璇锋眰
+                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+                    for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                        params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
+                    }
+                    params.add(DATA_PARAM_NAME,sendString);
+                    paramString = params.toString();
+                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+                    for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
+                        headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
+                    }
+                    backString = HttpUtils.post(url, params, headers);
+                }
+                if(backString.startsWith("\"")){
+                    backString=backString.substring(backString.indexOf("\"")+1);
+                }
+                if(backString.endsWith("\"")){
+                    backString=backString.substring(0,backString.lastIndexOf("\""));
+                }
+                if(backString.contains("\n")){
+                    String res="\n";
+                    backString=  backString.replaceAll(res,"");
+                }
+                if(backString.contains("\\")){
+                    String res="\\\\\"";
+                    backString=  backString.replaceAll(res,"\"").trim();
+                }
+            }else if (type.equals(URLTYPE_WEBSERVICE)) {//webserver璇锋眰
+                MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+                for (SysIntParamDO sysIntParamDO : sysIntParamDOList) {
+                    params.add(sysIntParamDO.getParamkey(), sysIntParamDO.getParamvalue());
+                }
+                paramString = sendString;
+                MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+                for (SysIntHeaderDO sysIntHeaderDO : sysIntHeaderDOList) {
+                    headers.add(sysIntHeaderDO.getHeaderkey(), sysIntHeaderDO.getHeaderalue());
+                }
+                backString = WsErpClientUtil.sendMsg(url, namespace, soapaction, interfaceFunction, targName, sendString, 10000);
+
+            } else {//corba鎺ュ彛
+                //paramString=sendString;
+                //  backString = jacorbClient.getBOFactoryService().sendCode(sendString);
+            }
+
+            ResultJsonDTO resultJsonDTO = new ResultJsonDTO();
+            if(returnType.equals(DATATYPE_JSON)){
+                resultJsonDTO =JSONObject.toJavaObject(JSONObject.parseObject(backString), ResultJsonDTO.class);
+            }else {
+                //缁勭粐杩斿洖鎺ュ彛淇℃伅
+                XStream xStream = new XStream(new DomDriver());
+                xStream.processAnnotations(ResultNodeDataDTO.class);
+                xStream.autodetectAnnotations(true);
+                ResultNodeDataDTO resultNodeDataDTO = (ResultNodeDataDTO) xStream.fromXML(backString);
+                resultJsonDTO.setData(resultNodeDataDTO);
+            }
+            ResultNodeDataDTO resultNodeDataDTO=resultJsonDTO.getData();
+            resultNodeObjectDTOS=resultNodeDataDTO.getObject();
+
+        }catch (Throwable e){
+            msg="璋冪敤鎺ュ彛澶辫触:"+e;
+            e.printStackTrace();
+         //   throw  new Throwable("璋冪敤鎺ュ彛澶辫触:"+e);
+            ResultNodeObjectDTO   resultNodeObjectDTO=new ResultNodeObjectDTO();
+            resultNodeObjectDTO.setErroid("1");
+            resultNodeObjectDTO.setMsg(msg);
+            resultNodeObjectDTO.setCode(sysIntInfoVO.getPushType().equalsIgnoreCase("2")?dockingTaskDO.getClassifyid():dockingTaskDO.getId());
+            resultNodeObjectDTO.setOid(dockingTaskDO.getBtmoid());
+            resultNodeObjectDTOS.add(resultNodeObjectDTO);
+        }finally {
+            boolean isSend = false;
+            for (ResultNodeObjectDTO resultNodeObjectDTO:resultNodeObjectDTOS){
+                String erroid = resultNodeObjectDTO.getErroid();
+                msg = resultNodeObjectDTO.getMsg();
+                if("0".equals(erroid)){
+                    isSend = true;
+                }else if("1".equals(erroid)){
+                    isSend=false;
+                }else{
+                    isSend=false;
+                }
+                DockingLogeDO dockingLogeDO = new DockingLogeDO();
+                String oid=redisService.getUUIDEveryDay();
+                dockingLogeDO.setOid(oid);
+                dockingLogeDO.setSystemcode(dockingTaskDO.getSystemcode());
+                dockingLogeDO.setSystemname(dockingTaskDO.getSystemname());
+                dockingLogeDO.setSystemoid(dockingTaskDO.getSystemoid());
+                dockingLogeDO.setClassifyoid(dockingTaskDO.getClassifyoid());
+                dockingLogeDO.setClassifyid(dockingTaskDO.getClassifyid());
+                dockingLogeDO.setClassifyname(dockingTaskDO.getClassifyname());
+                dockingLogeDO.setId(dockingTaskDO.getId());
+                dockingLogeDO.setUniquecode(dockingTaskDO.getUniquecode());
+                dockingLogeDO.setParamstring(paramString);
+                dockingLogeDO.setReturnstring(backString);
+                dockingLogeDO.setInterfacestatus(isSend?"true":"false");
+                dockingLogeDO.setType(DATA_LOGE_OUT);
+                dockingLogeDO.setMsg(msg);
+                logger.error("闆嗘垚鎺ㄩ�佹暟鎹�,systemcode:"+dockingTaskDO.getSystemcode()+",systemname:"+dockingTaskDO.getSystemname()+",url:"+url+",param:"+paramString+",e:"+msg);
+                BatchCBO dockingLogeDOBo = dockingLogeDaoI.insert(dockingLogeDO);
+                batchCBO.copyFromOther(dockingLogeDOBo);
+            }
+            //鍏ㄩ兘鎺ユ敹鎴愬姛鐨勬儏鍐典笅,淇敼dockingtask sendflag涓哄凡鍙戦��
+            if(isSend) {
+                dockingTaskDO.setSendflag(MdmDuckingConstant.SEND_FLAG_TRUE);
+                BatchCBO updateTask = dockingTaskDaoI.updateByPrimaryKey(dockingTaskDO);
+                batchCBO.copyFromOther(updateTask);
+            }
+        }
+    }
+    public void initSysadmin(){
+        SessionInfo sessionInfo = new SessionInfo();
+        sessionInfo.setUserId("sysAdmin");
+        sessionInfo.setUserName("绯荤粺绠$悊鍛�");
+        sessionInfo.setIp(WebUtil.getLocalIp());
+        sessionInfo.setUserOid("193C026F-7DB8-27B4-F383-4E8BE083FB07");
+        sessionInfo.setUserSecret(UserSecretEnum.PRIVACY.getValue()+"");
+        WebUtil.setSessionInfo(sessionInfo);
+    }
+
+    @Autowired
+    private PlatformClientUtil platformClientUtil;
+    /**
+     * dockingdata鏍规嵁oid淇敼sendflag
+     * @param oid
+     * @param sendflag
+     * @return
+     */
+    public boolean updateDockingDatasSendFlag(String oid,String sendflag){
+        boolean u=false;
+        String sql = "update PLATFORMBTM_codedockingdata set sendFlag = '"+sendflag+"' where oid='"+oid+"'";
+        try {
+            u=platformClientUtil.getBOFactoryService().executeUpdateSql(sql);
+        }catch (Exception e){
+
+        }
+        return u;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeFixedValueServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeFixedValueServiceImpl.java
new file mode 100644
index 0000000..abe5d49
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeFixedValueServiceImpl.java
@@ -0,0 +1,375 @@
+package org.springblade.code.service.impl;
+
+import com.vci.mdm.dao.CodeFixedValueDaoI;
+import com.vci.mdm.dto.CodeFixedValueDTO;
+import com.vci.mdm.model.CodeFixedValueDO;
+import com.vci.mdm.pagemodel.CodeFixedValueVO;
+import com.vci.mdm.service.CodeFixedValueServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鍥哄畾鐮佹鐨勭爜鍊兼湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeFixedValueServiceImpl implements CodeFixedValueServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeFixedValueDaoI codeFixedValueMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍥哄畾鐮佹鐨勭爜鍊�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeFixedValueVO> gridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultAsc("ordernum");
+        if(conditionMap == null){
+            conditionMap = new HashMap<>();
+        }
+        String secOid = conditionMap.getOrDefault("codefixedsecoid", "");
+        if(StringUtils.isBlank(secOid)){
+            return new DataGrid<>();
+        }
+        List<CodeFixedValueDO> doList = codeFixedValueMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeFixedValueVO> dataGrid=new DataGrid<CodeFixedValueVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeFixedValueDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeFixedValueMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeFixedValueDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeFixedValueVO> codeFixedValueDO2VOs(Collection<CodeFixedValueDO>  codeFixedValueDOs) throws VciBaseException{
+        List<CodeFixedValueVO> voList = new ArrayList<CodeFixedValueVO>();
+        if(!CollectionUtils.isEmpty(codeFixedValueDOs)){
+           for(CodeFixedValueDO s: codeFixedValueDOs){
+                CodeFixedValueVO vo =  codeFixedValueDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeFixedValueDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeFixedValueVO codeFixedValueDO2VO(CodeFixedValueDO codeFixedValueDO) throws VciBaseException{
+              CodeFixedValueVO vo = new CodeFixedValueVO();
+        if(codeFixedValueDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeFixedValueDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeFixedValueVO addSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeFixedValueDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeFixedValueDO codeFixedValueDO = new CodeFixedValueDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeFixedValueDTO,codeFixedValueDO);
+        codeFixedValueMapper.insert(codeFixedValueDO);
+        return codeFixedValueDO2VO(codeFixedValueDO);
+    }
+
+    /**
+     * 淇敼鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeFixedValueVO editSave(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeFixedValueDTO,"鏁版嵁瀵硅薄",codeFixedValueDTO.getOid(),"鍥哄畾鐮佹鐨勭爜鍊间富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeFixedValueDO codeFixedValueDO = selectByOid(codeFixedValueDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeFixedValueDTO,codeFixedValueDO);
+         codeFixedValueMapper.updateByPrimaryKey(codeFixedValueDO);
+         return codeFixedValueDO2VO(codeFixedValueDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeFixedValueDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeFixedValueDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeFixedValueDTO codeFixedValueDTO, CodeFixedValueDO codeFixedValueDO) {
+        //boService.checkTs(codeFixedValueDTO);
+        if(!checkIsLinked(codeFixedValueDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍥哄畾鐮佹鐨勭爜鍊�
+     * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeFixedValue(CodeFixedValueDTO codeFixedValueDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeFixedValueDTO,"鍥哄畾鐮佹鐨勭爜鍊兼暟鎹璞�",codeFixedValueDTO.getOid(),"鍥哄畾鐮佹鐨勭爜鍊肩殑涓婚敭");
+        CodeFixedValueDO codeFixedValueDO = selectByOid(codeFixedValueDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeFixedValueDTO,codeFixedValueDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeFixedValueMapper.deleteByPrimaryKey(codeFixedValueDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍥哄畾鐮佹鐨勭爜鍊�
+    * @param oid 涓婚敭
+    * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeFixedValueVO getObjectByOid(String oid) throws VciBaseException{
+        return codeFixedValueDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeFixedValueDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeFixedValueDO codeFixedValueDO = codeFixedValueMapper.selectByPrimaryKey(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<CodeFixedValueDO> codeFixedValueDOList = listCodeFixedValueDOByOidCollections(oidCollections);
+        return codeFixedValueDO2VOs(codeFixedValueDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeFixedValueDO> listCodeFixedValueDOByOidCollections(Collection<String> oidCollections){
+        List<CodeFixedValueDO> codeFixedValueDOList = new ArrayList<CodeFixedValueDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeFixedValueDO> tempDOList =  codeFixedValueMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeFixedValueDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeFixedValueDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍥哄畾鐮佹鐨勭爜鍊兼樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeFixedValueVO> refDataGridCodeFixedValue(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeFixedValue(conditionMap,pageHelper);
+    }
+
+    /**
+     * 浣跨敤鐮佹鐨勪富閿幏鍙栧浐瀹氱爜鐨勭爜鍊�
+     *
+     * @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->{
+            Map<String,String> conditionMap = new HashMap<>();
+            conditionMap.put("codefixedsecoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(secOids.toArray(new String[0])) + ")");
+            PageHelper pageHelper = new PageHelper(-1);
+            pageHelper.addDefaultAsc("ordernum");
+            List<CodeFixedValueDO> valueDOS = codeFixedValueMapper.selectByCondition(conditionMap, pageHelper);
+            voList.addAll(codeFixedValueDO2VOs(Optional.ofNullable(valueDOS).orElseGet(() -> new ArrayList<>())));
+        });
+        return voList.stream().collect(Collectors.groupingBy(CodeFixedValueVO::getCodefixedsecoid));
+    }
+
+    /**
+     * 鎵归噺娣诲姞鍥哄畾鐮佹鐨勭爜鍊硷紝濡傛灉淇濆瓨鐨勯泦鍚堜腑涓嶅瓨鍦ㄥ凡鍦ㄦ暟鎹簱涓殑鐮佸�煎垯鍒犻櫎銆備富瑕佹槸淇濆瓨鐮佸�肩殑搴忓彿
+     * @param dtoList 鍥哄畾鐮佹鐨勭爜鍊煎垪琛�
+     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult<CodeFixedValueVO> batchSave4Order(List<CodeFixedValueDTO> dtoList, String codefixedsecoid) {
+        VciBaseUtil.alertNotNull(codefixedsecoid,"鍥哄畾鐮佹涓婚敭");
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codefixedsecoid",codefixedsecoid);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeFixedValueDO.class);
+        List<CodeFixedValueDO> doList = codeFixedValueMapper.selectByWrapper(wrapper);
+        List<CodeFixedValueDO> updateList = new ArrayList<>();
+        List<String> deleteOidList = new ArrayList<>();
+        dtoList.forEach(dto -> {
+            if (StringUtils.isNotBlank(dto.getOid())){
+                List<CodeFixedValueDO> 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<CodeFixedValueDO> deleteList = new ArrayList<>();
+            for (CodeFixedValueDO value : doList) {
+                if (!oidList.contains(value.getOid())){
+                    deleteList.add(value);
+                }
+            }
+            deleteOidList = deleteList.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toList());
+        }
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = codeFixedValueMapper.batchUpdate(updateList);
+        if (!CollectionUtils.isEmpty(deleteOidList)) {
+            BatchCBO batchDeleteByOids = codeFixedValueMapper.batchDeleteByOids(deleteOidList);
+            batchCBO.setDeleteCbos(batchDeleteByOids.getDeleteCbos());
+        }
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+        return BaseResult.success();
+    }
+
+    /**
+     * 鏍规嵁鐮佹涓婚敭鍒犻櫎鍏跺瓨鍦ㄧ殑鐮佸�煎璞�
+     * @param codefixedsecoid 鍥哄畾鐮佹鐨勪富閿�
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult<CodeFixedValueVO> batchDeleteBySecOid(String codefixedsecoid) {
+        VciBaseUtil.alertNotNull(codefixedsecoid,"鍥哄畾鐮佹涓婚敭");
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codefixedvalueoid",codefixedsecoid);
+        VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap,CodeFixedValueDO.class);
+        List<CodeFixedValueDO> doList = codeFixedValueMapper.selectByWrapper(wrapper);
+        codeFixedValueMapper.batchDeleteByOids(doList.stream().map(CodeFixedValueDO::getOid).collect(Collectors.toList()));
+        return BaseResult.success();
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java
new file mode 100644
index 0000000..0cad475
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeKeyAttrRepeatRuleServiceImpl.java
@@ -0,0 +1,342 @@
+package org.springblade.code.service.impl;
+
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.code.bo.CodeClassifyFullInfoBO;
+import org.springblade.code.dao.CodeKeyAttrRepeatRuleDaoI;
+import org.springblade.code.dto.CodeKeyAttrRepeatRuleDTO;
+import org.springblade.code.model.CodeKeyAttrRepeatRuleDO;
+import org.springblade.code.service.CodeKeyAttrRepeatRuleServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyVO;
+import org.springblade.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏈嶅姟
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeKeyAttrRepeatRuleServiceImpl implements CodeKeyAttrRepeatRuleServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeKeyAttrRepeatRuleDaoI codeKeyAttrRepeatRuleMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeKeyAttrRepeatRuleVO> gridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeKeyAttrRepeatRuleDO> doList = codeKeyAttrRepeatRuleMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeKeyAttrRepeatRuleVO> dataGrid=new DataGrid<CodeKeyAttrRepeatRuleVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeKeyAttrRepeatRuleDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeKeyAttrRepeatRuleMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeKeyAttrRepeatRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeKeyAttrRepeatRuleVO> codeKeyAttrRepeatRuleDO2VOs(Collection<CodeKeyAttrRepeatRuleDO>  codeKeyAttrRepeatRuleDOs) throws VciBaseException{
+        List<CodeKeyAttrRepeatRuleVO> voList = new ArrayList<CodeKeyAttrRepeatRuleVO>();
+        if(!CollectionUtils.isEmpty(codeKeyAttrRepeatRuleDOs)){
+           for(CodeKeyAttrRepeatRuleDO s: codeKeyAttrRepeatRuleDOs){
+                CodeKeyAttrRepeatRuleVO vo =  codeKeyAttrRepeatRuleDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeKeyAttrRepeatRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleDO2VO(CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO) throws VciBaseException{
+              CodeKeyAttrRepeatRuleVO vo = new CodeKeyAttrRepeatRuleVO();
+        if(codeKeyAttrRepeatRuleDO != null) {
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeKeyAttrRepeatRuleDO, vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeKeyAttrRepeatRuleVO addSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeKeyAttrRepeatRuleDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = new CodeKeyAttrRepeatRuleDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeKeyAttrRepeatRuleDTO,codeKeyAttrRepeatRuleDO);
+        codeKeyAttrRepeatRuleMapper.insert(codeKeyAttrRepeatRuleDO);
+        return codeKeyAttrRepeatRuleDO2VO(codeKeyAttrRepeatRuleDO);
+    }
+
+    /**
+     * 淇敼鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeKeyAttrRepeatRuleVO editSave(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeKeyAttrRepeatRuleDTO,"鏁版嵁瀵硅薄",codeKeyAttrRepeatRuleDTO.getOid(),"鍏抽敭鏁版嵁鏌ラ噸瑙勫垯涓婚敭");
+         //灏咲TO杞崲涓篋O
+         CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = selectByOid(codeKeyAttrRepeatRuleDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeKeyAttrRepeatRuleDTO,codeKeyAttrRepeatRuleDO);
+         codeKeyAttrRepeatRuleMapper.updateByPrimaryKey(codeKeyAttrRepeatRuleDO);
+         return codeKeyAttrRepeatRuleDO2VO(codeKeyAttrRepeatRuleDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeKeyAttrRepeatRuleDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeKeyAttrRepeatRuleDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO, CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO) {
+        CodeKeyAttrRepeatRuleDO repeatRuleDO = new CodeKeyAttrRepeatRuleDO();
+        BeanUtil.convert(codeKeyAttrRepeatRuleDTO,repeatRuleDO);
+        boService.checkTs(repeatRuleDO);
+        if(!checkIsLinked(codeKeyAttrRepeatRuleDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param codeKeyAttrRepeatRuleDTO 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeKeyAttrRepeatRule(CodeKeyAttrRepeatRuleDTO codeKeyAttrRepeatRuleDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeKeyAttrRepeatRuleDTO,"鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏁版嵁瀵硅薄",codeKeyAttrRepeatRuleDTO.getOid(),"鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鐨勪富閿�");
+        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = selectByOid(codeKeyAttrRepeatRuleDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeKeyAttrRepeatRuleDTO,codeKeyAttrRepeatRuleDO);
+        if(baseResult.isSuccess()) {
+        }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeKeyAttrRepeatRuleMapper.deleteByPrimaryKey(codeKeyAttrRepeatRuleDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeKeyAttrRepeatRuleVO getObjectByOid(String oid) throws VciBaseException{
+        return codeKeyAttrRepeatRuleDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeKeyAttrRepeatRuleDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeKeyAttrRepeatRuleDO codeKeyAttrRepeatRuleDO = codeKeyAttrRepeatRuleMapper.selectByPrimaryKey(oid.trim());
+        if(codeKeyAttrRepeatRuleDO == null || StringUtils.isBlank(codeKeyAttrRepeatRuleDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeKeyAttrRepeatRuleDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = listCodeKeyAttrRepeatRuleDOByOidCollections(oidCollections);
+        return codeKeyAttrRepeatRuleDO2VOs(codeKeyAttrRepeatRuleDOList);
+    }
+
+    /**
+     * 缂栧彿鎵归噺鑾峰彇鍏抽敭鏁版嵁鏌ラ噸瑙勫垯
+     *
+     * @param idCollections 缂栧彿闆嗗悎
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄
+     */
+    @Override
+    public Collection<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByIds(List<String> idCollections) {
+        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = listCodeKeyAttrRepeatRuleDOByIdCollections(idCollections);
+        return codeKeyAttrRepeatRuleDO2VOs(codeKeyAttrRepeatRuleDOList);
+    }
+
+    /**
+     * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+     * @param idCollections 缂栧彿鐨勯泦鍚�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    private List<CodeKeyAttrRepeatRuleDO> listCodeKeyAttrRepeatRuleDOByIdCollections(Collection<String> idCollections){
+        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = new ArrayList<CodeKeyAttrRepeatRuleDO>();
+        if(!CollectionUtils.isEmpty(idCollections)){
+            Collection<Collection<String>> idCollectionsList = VciBaseUtil.switchCollectionForOracleIn(idCollections);
+            for(Collection<String> ids: idCollectionsList){
+                List<CodeKeyAttrRepeatRuleDO> tempDOList =  codeKeyAttrRepeatRuleMapper.selectByIdCollection(ids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                    codeKeyAttrRepeatRuleDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeKeyAttrRepeatRuleDOList;
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeKeyAttrRepeatRuleDO> listCodeKeyAttrRepeatRuleDOByOidCollections(Collection<String> oidCollections){
+        List<CodeKeyAttrRepeatRuleDO> codeKeyAttrRepeatRuleDOList = new ArrayList<CodeKeyAttrRepeatRuleDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeKeyAttrRepeatRuleDO> tempDOList =  codeKeyAttrRepeatRuleMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeKeyAttrRepeatRuleDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeKeyAttrRepeatRuleDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeKeyAttrRepeatRuleVO> refDataGridCodeKeyAttrRepeatRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeKeyAttrRepeatRule(conditionMap,pageHelper);
+    }
+
+    /**
+     * 浣跨敤鍒嗙被鐨勫叏閮ㄤ俊鎭潵鑾峰彇鍏抽敭灞炴�у垽鏂鍒欑殑鍐呭
+     *
+     * @param classifyFullInfo 涓婚搴撳垎绫荤殑鍏ㄩ儴淇℃伅
+     * @return 瑙勫垯鐨勬樉绀哄璞�
+     */
+    @Override
+    public CodeKeyAttrRepeatRuleVO getRuleByClassifyFullInfo(CodeClassifyFullInfoBO classifyFullInfo) {
+        VciBaseUtil.alertNotNull(classifyFullInfo,"涓婚搴撳垎绫荤殑淇℃伅");
+        String keyAttrRuleOid = classifyFullInfo.getCurrentClassifyVO().getCodekeyattrrepeatoid();
+        if(StringUtils.isBlank(keyAttrRuleOid)){
+            //鎴戜滑鏍规嵁涓婄骇鐨勫垎绫伙紝鎸夌収灞傜骇鍊掑簭鎺掑垪
+            if(!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())){
+                //鏈変笂绾у垎绫荤殑鎯呭喌涓嬫墠鍘绘煡璇�
+                List<CodeClassifyVO> sortedClassifyVO = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList());
+                for(int i = sortedClassifyVO.size() -1;i>=0;i--){
+                    CodeClassifyVO record = sortedClassifyVO.get(i);
+                    if(StringUtils.isNotBlank(record.getCodekeyattrrepeatoid())){
+                        keyAttrRuleOid = record.getCodekeyattrrepeatoid();
+                        break;
+                    }
+                }
+            }
+        }
+        if(StringUtils.isNotBlank(keyAttrRuleOid)){
+           return getObjectByOid(keyAttrRuleOid);
+        }
+        //鍏抽敭灞炴�х殑瑙勫垯鍙互涓虹┖锛屼负绌虹殑鏃跺�欏氨浠h〃涓嶆帶鍒讹紝
+        return null;
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodePhaseAttrServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodePhaseAttrServiceImpl.java
new file mode 100644
index 0000000..acf38a5
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodePhaseAttrServiceImpl.java
@@ -0,0 +1,299 @@
+package org.springblade.code.service.impl;
+
+import com.vci.mdm.constant.MdmBtmTypeConstant;
+import com.vci.mdm.dao.CodePhaseAttrDaoI;
+import com.vci.mdm.dto.CodePhaseAttrDTO;
+import com.vci.mdm.model.CodePhaseAttrDO;
+import com.vci.mdm.pagemodel.CodePhaseAttrVO;
+import com.vci.mdm.service.CodePhaseAttrServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 闃舵鐨勫睘鎬ф湇鍔�
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodePhaseAttrServiceImpl implements CodePhaseAttrServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodePhaseAttrDaoI codePhaseAttrMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑闃舵鐨勫睘鎬�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodePhaseAttrVO> gridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodePhaseAttrDO> doList = codePhaseAttrMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodePhaseAttrVO> dataGrid=new DataGrid<CodePhaseAttrVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codePhaseAttrDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codePhaseAttrMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codePhaseAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodePhaseAttrVO> codePhaseAttrDO2VOs(Collection<CodePhaseAttrDO>  codePhaseAttrDOs) throws VciBaseException{
+        List<CodePhaseAttrVO> voList = new ArrayList<CodePhaseAttrVO>();
+        if(!CollectionUtils.isEmpty(codePhaseAttrDOs)){
+           for(CodePhaseAttrDO s: codePhaseAttrDOs){
+                CodePhaseAttrVO vo =  codePhaseAttrDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codePhaseAttrDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodePhaseAttrVO codePhaseAttrDO2VO(CodePhaseAttrDO codePhaseAttrDO) throws VciBaseException{
+              CodePhaseAttrVO vo = new CodePhaseAttrVO();
+        if(codePhaseAttrDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codePhaseAttrDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodePhaseAttrVO addSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codePhaseAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodePhaseAttrDO codePhaseAttrDO = new CodePhaseAttrDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codePhaseAttrDTO,codePhaseAttrDO);
+        codePhaseAttrMapper.insert(codePhaseAttrDO);
+        return codePhaseAttrDO2VO(codePhaseAttrDO);
+    }
+
+    /**
+     * 淇敼闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodePhaseAttrVO editSave(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codePhaseAttrDTO,"鏁版嵁瀵硅薄",codePhaseAttrDTO.getOid(),"闃舵鐨勫睘鎬т富閿�");
+         //灏咲TO杞崲涓篋O
+         CodePhaseAttrDO codePhaseAttrDO = selectByOid(codePhaseAttrDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codePhaseAttrDTO,codePhaseAttrDO);
+         codePhaseAttrMapper.updateByPrimaryKey(codePhaseAttrDO);
+         return codePhaseAttrDO2VO(codePhaseAttrDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codePhaseAttrDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codePhaseAttrDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodePhaseAttrDTO codePhaseAttrDTO, CodePhaseAttrDO codePhaseAttrDO) {
+        CodePhaseAttrDO tsDO = new CodePhaseAttrDO();
+        BeanUtil.convert(codePhaseAttrDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codePhaseAttrDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎闃舵鐨勫睘鎬�
+     * @param codePhaseAttrDTO 闃舵鐨勫睘鎬ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodePhaseAttr(CodePhaseAttrDTO codePhaseAttrDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codePhaseAttrDTO,"闃舵鐨勫睘鎬ф暟鎹璞�",codePhaseAttrDTO.getOid(),"闃舵鐨勫睘鎬х殑涓婚敭");
+        CodePhaseAttrDO codePhaseAttrDO = selectByOid(codePhaseAttrDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codePhaseAttrDTO,codePhaseAttrDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codePhaseAttrMapper.deleteByPrimaryKey(codePhaseAttrDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇闃舵鐨勫睘鎬�
+    * @param oid 涓婚敭
+    * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodePhaseAttrVO getObjectByOid(String oid) throws VciBaseException{
+        return codePhaseAttrDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodePhaseAttrDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodePhaseAttrDO codePhaseAttrDO = codePhaseAttrMapper.selectByPrimaryKey(oid.trim());
+        if(codePhaseAttrDO == null || StringUtils.isBlank(codePhaseAttrDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codePhaseAttrDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇闃舵鐨勫睘鎬�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodePhaseAttrVO> listCodePhaseAttrByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodePhaseAttrDO> codePhaseAttrDOList = listCodePhaseAttrDOByOidCollections(oidCollections);
+        return codePhaseAttrDO2VOs(codePhaseAttrDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodePhaseAttrDO> listCodePhaseAttrDOByOidCollections(Collection<String> oidCollections){
+        List<CodePhaseAttrDO> codePhaseAttrDOList = new ArrayList<CodePhaseAttrDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodePhaseAttrDO> tempDOList =  codePhaseAttrMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codePhaseAttrDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codePhaseAttrDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収闃舵鐨勫睘鎬у垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 闃舵鐨勫睘鎬ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodePhaseAttrVO> refDataGridCodePhaseAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodePhaseAttr(conditionMap,pageHelper);
+    }
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鍜岄樁娈电紪鍙疯幏鍙栧寘鍚殑灞炴��
+     *
+     * @param templateOid 妯℃澘鐨勭紪鍙�
+     * @param phaseId     闃舵鐨勭紪鍙�
+     * @return 灞炴�х殑鑻辨枃鍚嶇О
+     */
+    @Override
+    public List<String> listAttrByTemplateOidAndPhaseId(String templateOid, String phaseId) {
+        if(StringUtils.isBlank(templateOid)|| StringUtils.isBlank(phaseId)){
+            return new ArrayList<>();
+        }
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codephaseoid", QueryOptionConstant.IN + "(select oid from "+
+                VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE) +
+                " where codeClassifyTemplateOid ='" + templateOid + "' and lower(name) ='" + phaseId.trim().toLowerCase(Locale.ROOT) + "')");
+        PageHelper pageHelper = new PageHelper(-1);
+        List<CodePhaseAttrDO> attrDOS = codePhaseAttrMapper.selectByCondition(conditionMap, pageHelper);
+        return CollectionUtils.isEmpty(attrDOS)?new ArrayList<>():attrDOS.stream().map(CodePhaseAttrDO::getId).collect(Collectors.toList());
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeResembleRuleServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeResembleRuleServiceImpl.java
new file mode 100644
index 0000000..8e955ab
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeResembleRuleServiceImpl.java
@@ -0,0 +1,277 @@
+package org.springblade.code.service.impl;
+
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.mdm.dao.CodeResembleRuleDaoI;
+import com.vci.mdm.dto.CodeResembleRuleDTO;
+import com.vci.mdm.model.CodeResembleRuleDO;
+import com.vci.mdm.pagemodel.CodeResembleRuleVO;
+import com.vci.mdm.service.CodeResembleRuleServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鐩镐技鏌ヨ瑙勫垯鏈嶅姟
+ * @author weidy
+ * @date 2022-04-10
+ */
+@Service
+public class CodeResembleRuleServiceImpl implements CodeResembleRuleServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeResembleRuleDaoI codeResembleRuleMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鐩镐技鏌ヨ瑙勫垯
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeResembleRuleVO> gridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeResembleRuleDO> doList = codeResembleRuleMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeResembleRuleVO> dataGrid=new DataGrid<CodeResembleRuleVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeResembleRuleDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeResembleRuleMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeResembleRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeResembleRuleVO> codeResembleRuleDO2VOs(Collection<CodeResembleRuleDO>  codeResembleRuleDOs) throws VciBaseException{
+        List<CodeResembleRuleVO> voList = new ArrayList<CodeResembleRuleVO>();
+        if(!CollectionUtils.isEmpty(codeResembleRuleDOs)){
+           for(CodeResembleRuleDO s: codeResembleRuleDOs){
+                CodeResembleRuleVO vo =  codeResembleRuleDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeResembleRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeResembleRuleVO codeResembleRuleDO2VO(CodeResembleRuleDO codeResembleRuleDO) throws VciBaseException{
+              CodeResembleRuleVO vo = new CodeResembleRuleVO();
+        if(codeResembleRuleDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+                         vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeResembleRuleVO addSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeResembleRuleDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeResembleRuleDO codeResembleRuleDO = new CodeResembleRuleDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDTO,codeResembleRuleDO);
+        codeResembleRuleMapper.insert(codeResembleRuleDO);
+        return codeResembleRuleDO2VO(codeResembleRuleDO);
+    }
+
+    /**
+     * 淇敼鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeResembleRuleVO editSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeResembleRuleDTO,"鏁版嵁瀵硅薄",codeResembleRuleDTO.getOid(),"鐩镐技鏌ヨ瑙勫垯涓婚敭");
+         //灏咲TO杞崲涓篋O
+         CodeResembleRuleDO codeResembleRuleDO = selectByOid(codeResembleRuleDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeResembleRuleDTO,codeResembleRuleDO);
+         codeResembleRuleMapper.updateByPrimaryKey(codeResembleRuleDO);
+         return codeResembleRuleDO2VO(codeResembleRuleDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeResembleRuleDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeResembleRuleDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeResembleRuleDTO codeResembleRuleDTO, CodeResembleRuleDO codeResembleRuleDO) {
+            CodeResembleRuleDO tsDO = new CodeResembleRuleDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codeResembleRuleDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鐩镐技鏌ヨ瑙勫垯
+     * @param codeResembleRuleDTO 鐩镐技鏌ヨ瑙勫垯鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeResembleRule(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeResembleRuleDTO,"鐩镐技鏌ヨ瑙勫垯鏁版嵁瀵硅薄",codeResembleRuleDTO.getOid(),"鐩镐技鏌ヨ瑙勫垯鐨勪富閿�");
+        CodeResembleRuleDO codeResembleRuleDO = selectByOid(codeResembleRuleDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeResembleRuleDTO,codeResembleRuleDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeResembleRuleMapper.deleteByPrimaryKey(codeResembleRuleDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鐩镐技鏌ヨ瑙勫垯
+    * @param oid 涓婚敭
+    * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeResembleRuleVO getObjectByOid(String oid) throws VciBaseException{
+        return codeResembleRuleDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeResembleRuleDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeResembleRuleDO codeResembleRuleDO = codeResembleRuleMapper.selectByPrimaryKey(oid.trim());
+        if(codeResembleRuleDO == null || StringUtils.isBlank(codeResembleRuleDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeResembleRuleDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鐩镐技鏌ヨ瑙勫垯
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeResembleRuleVO> listCodeResembleRuleByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeResembleRuleDO> codeResembleRuleDOList = listCodeResembleRuleDOByOidCollections(oidCollections);
+        return codeResembleRuleDO2VOs(codeResembleRuleDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeResembleRuleDO> listCodeResembleRuleDOByOidCollections(Collection<String> oidCollections){
+        List<CodeResembleRuleDO> codeResembleRuleDOList = new ArrayList<CodeResembleRuleDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeResembleRuleDO> tempDOList =  codeResembleRuleMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeResembleRuleDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeResembleRuleDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鐩镐技鏌ヨ瑙勫垯鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鐩镐技鏌ヨ瑙勫垯鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeResembleRule(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeRuleServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeRuleServiceImpl.java
new file mode 100644
index 0000000..4470af6
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeRuleServiceImpl.java
@@ -0,0 +1,679 @@
+package org.springblade.code.service.impl;
+
+import com.vci.corba.common.VCIError;
+import com.vci.mdm.constant.MdmBtmTypeConstant;
+import com.vci.mdm.dao.CodeBasicSecDaoI;
+import com.vci.mdm.dao.CodeRuleDaoI;
+import com.vci.mdm.dto.CodeBasicSecDTO;
+import com.vci.mdm.dto.CodeRuleDTO;
+import com.vci.mdm.lifecycle.CodeRuleLC;
+import com.vci.mdm.model.*;
+import com.vci.mdm.pagemodel.CodeBasicSecVO;
+import com.vci.mdm.pagemodel.CodeClassifyVO;
+import com.vci.mdm.pagemodel.CodeRuleVO;
+import com.vci.mdm.service.CodeBasicSecServiceI;
+import com.vci.mdm.service.CodeClassifyServiceI;
+import com.vci.mdm.service.CodeRuleServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.pageModel.KeyValue;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+import plm.bs.bom.clientobject.ClientBusinessObjectOperation;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 涓绘暟鎹紪鐮佽鍒欐湇鍔�
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeRuleServiceImpl implements CodeRuleServiceI {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeRuleDaoI codeRuleMapper;
+
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+     * 瀵硅薄鐨勬搷浣�
+     */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 涓婚搴撳垎绫绘暟鎹搷浣滃眰
+     */
+    @Autowired
+    private CodeClassifyServiceI codeClassifyService;
+
+    /**
+     * 鐮佹鍩虹淇℃伅鏈嶅姟
+     */
+    @Autowired
+    private CodeBasicSecServiceI codeBasicSecService;
+
+    /**
+     * 鐮佹鍩虹淇℃伅鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodeBasicSecDaoI codeBasicSecMapper;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeRuleVO> gridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeRuleDO> doList = codeRuleMapper.selectByCondition(conditionMap, pageHelper);
+        DataGrid<CodeRuleVO> dataGrid = new DataGrid<CodeRuleVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeRuleDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeRuleMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO> codeRuleDOs) throws VciBaseException {
+        return codeRuleDO2VOs(codeRuleDOs, false);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeRuleDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @param hasSec      鏄惁鍖呭惈鐮佹
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeRuleVO> codeRuleDO2VOs(Collection<CodeRuleDO> codeRuleDOs, boolean hasSec) throws VciBaseException {
+        List<CodeRuleVO> voList = new ArrayList<CodeRuleVO>();
+        if (!CollectionUtils.isEmpty(codeRuleDOs)) {
+            for (CodeRuleDO s : codeRuleDOs) {
+                CodeRuleVO vo = codeRuleDO2VO(s);
+                if (vo != null) {
+                    voList.add(vo);
+                }
+            }
+            if (hasSec) {
+                List<CodeBasicSecVO> secVOList = codeBasicSecService.listCodeBasicSecByRuleOids(voList.stream().map(CodeRuleVO::getOid).collect(Collectors.toList()));
+                if (!CollectionUtils.isEmpty(secVOList)) {
+                    Map<String, List<CodeBasicSecVO>> secVOMap = secVOList.stream().collect(Collectors.groupingBy(CodeBasicSecVO::getPkCodeRule));
+                    voList.stream().forEach(vo -> {
+                        vo.setSecVOList(secVOMap.getOrDefault(vo.getOid(), new ArrayList<>()));
+                    });
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeRuleDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeRuleVO codeRuleDO2VO(CodeRuleDO codeRuleDO) throws VciBaseException {
+        CodeRuleVO vo = new CodeRuleVO();
+        if (codeRuleDO != null) {
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDO, vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(CodeRuleLC.getTextByValue(vo.getLcStatus()));
+
+        }
+        return vo;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     *
+     * @param codeRuleDO 瑙勫垯鐨勬暟鎹璞�
+     * @param hasSec     鏄惁鏌ヨ鐮佹
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    public CodeRuleVO codeRuleDO2VO(CodeRuleDO codeRuleDO, boolean hasSec) throws VciBaseException {
+        CodeRuleVO vo = new CodeRuleVO();
+        if (codeRuleDO != null) {
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDO, vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setLcStatusText(CodeRuleLC.getTextByValue(vo.getLcStatus()));
+            if (hasSec) {
+                //鏌ヨ鐮佹
+                vo.setSecVOList(codeBasicSecService.listCodeBasicSecByRuleOid(vo.getOid()));
+            }
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeRuleVO addSave(CodeRuleDTO codeRuleDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeRuleDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeRuleDO codeRuleDO = new CodeRuleDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDTO, codeRuleDO);
+        codeRuleMapper.insert(codeRuleDO);
+        return codeRuleDO2VO(codeRuleDO);
+    }
+
+    /**
+     * 淇敼涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeRuleVO editSave(CodeRuleDTO codeRuleDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeRuleDTO, "鏁版嵁瀵硅薄", codeRuleDTO.getOid(), "涓绘暟鎹紪鐮佽鍒欎富閿�");
+        if (!checkEditDelStatus(codeRuleDTO.getLcStatus())) {
+            throw new VciBaseException("缂栫爜瑙勫垯宸插彂甯冿紝涓嶅厑璁哥紪杈戞垨鍒犻櫎");
+        }
+        //灏咲TO杞崲涓篋O
+        CodeRuleDO codeRuleDO = selectByOid(codeRuleDTO.getOid());
+        revisionModelUtil.copyFromDTOIgnore(codeRuleDTO, codeRuleDO);
+        codeRuleMapper.updateByPrimaryKey(codeRuleDO);
+        return codeRuleDO2VO(codeRuleDO);
+    }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     *
+     * @param codeRuleDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeRuleDO  鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeRuleDTO codeRuleDTO, CodeRuleDO codeRuleDO) {
+        boService.checkTs(codeRuleDTO);
+        if (!checkIsLinked(codeRuleDO.getOid())) {
+            return BaseResult.success();
+        } else {
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE, new String[]{""});
+        }
+    }
+
+    /**
+     * 鏍¢獙鏄惁琚紩鐢�
+     *
+     * @param oid 涓婚敭
+     * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    private boolean checkIsLinked(String oid) throws VciBaseException {
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeRule(CodeRuleDTO codeRuleDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeRuleDTO, "涓绘暟鎹紪鐮佽鍒欐暟鎹璞�", codeRuleDTO.getOid(), "涓绘暟鎹紪鐮佽鍒欑殑涓婚敭");
+        CodeRuleDO codeRuleDO = selectByOid(codeRuleDTO.getOid());
+        //BaseResult baseResult = checkIsCanDeleteForDO(codeRuleDTO,codeRuleDO);
+        // if(baseResult.isSuccess()) {
+        //             }else{
+        //     return baseResult;
+        // }
+        if (!checkEditDelStatus(codeRuleDO.getLcStatus())) {
+            return BaseResult.fail("缂栫爜瑙勫垯宸插彂甯冿紝涓嶅厑璁哥紪杈戞垨鍒犻櫎");
+        } else {
+            if (isAlreadyInUse(codeRuleDO.getOid())) {
+                return BaseResult.fail("缂栫爜瑙勫垯宸茶寮曠敤锛屼笉鍏佽缂栬緫鎴栧垹闄わ紒");
+            }
+        }
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("codeRuleOid", codeRuleDTO.getOid());
+        List<CodeAllCodeDO> codeDOList = boService.queryObject(CodeAllCodeDO.class, conditionMap);
+        if (!CollectionUtils.isEmpty(codeDOList)) {
+            return BaseResult.fail("缂栫爜瑙勫垯宸茬敓鎴愮紪鐮侊紝涓嶅厑璁稿垹闄�");
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = codeBasicSecService.batchDeleteSecByCodeRuleOid(codeRuleDO.getOid());
+        BatchCBO mainCBO = codeRuleMapper.deleteByPrimaryKey(codeRuleDO.getOid());
+        WebUtil.setPersistence(true);
+        Set<ClientBusinessObject> deleteSet = new HashSet<>();
+        deleteSet.addAll(batchCBO.getDeleteCbos());
+        deleteSet.addAll(mainCBO.getDeleteCbos());
+        batchCBO.setDeleteCbos(deleteSet);
+        boService.persistenceBatch(batchCBO);
+        return (batchCBO != null && batchCBO.getDeleteCbos() != null && batchCBO.getDeleteCbos().size() > 0) ? BaseResult.successMsg(DELETE_SUCCESS) : BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+     * 鏍¢獙缂栫爜瑙勫垯鐨勭姸鎬佹槸鍚﹀彲浠ョ紪杈戞垨鍒犻櫎
+     *
+     * @param lcStatus 缂栫爜瑙勫垯
+     * @return true琛ㄧず鍙互缂栬緫鎴栧垹闄わ紝false琛ㄧず涓嶅彲浠�
+     */
+    @Override
+    public boolean checkEditDelStatus(String lcStatus) {
+        if (CodeRuleLC.RELEASED.getValue().equals(lcStatus) || CodeRuleLC.DISABLED.getValue().equals(lcStatus)) {
+            return false;
+        }
+        return true;
+    }
+
+
+    /**
+     * 涓婚敭鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param oid 涓婚敭
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeRuleVO getObjectByOid(String oid) throws VciBaseException {
+        return codeRuleDO2VO(selectByOid(oid));
+    }
+
+    /**
+     * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+     *
+     * @param oid 涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    private CodeRuleDO selectByOid(String oid) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oid, "涓婚敭");
+        CodeRuleDO codeRuleDO = codeRuleMapper.selectByPrimaryKey(oid.trim());
+        if (codeRuleDO == null || StringUtils.isBlank(codeRuleDO.getOid())) {
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeRuleDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oidCollections, "鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeRuleDO> codeRuleDOList = listCodeRuleDOByOidCollections(oidCollections);
+        return codeRuleDO2VOs(codeRuleDOList);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹紪鐮佽鍒�
+     *
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @param hasSec         鏄惁鍖呭惈鐮佹
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeRuleVO> listCodeRuleByOids(Collection<String> oidCollections, boolean hasSec) throws VciBaseException {
+        VciBaseUtil.alertNotNull(oidCollections, "鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeRuleDO> codeRuleDOList = listCodeRuleDOByOidCollections(oidCollections);
+        return codeRuleDO2VOs(codeRuleDOList, true);
+    }
+
+    /**
+     * 浣跨敤缂栧彿鐨勯泦鍚堣幏鍙栬鍒欑殑鍐呭
+     *
+     * @param idCollection 缂栧彿鐨勯泦鍚�
+     * @return 瑙勫垯鐨勫唴瀹�
+     */
+    @Override
+    public List<CodeRuleVO> listCodeRuleByIds(Collection<String> idCollection) {
+        return codeRuleDO2VOs(listCodeRuleDOByIdCollections(idCollection));
+    }
+
+    /**
+     * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+     *
+     * @param oidCollections 涓婚敭鐨勯泦鍚�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    private List<CodeRuleDO> listCodeRuleDOByOidCollections(Collection<String> oidCollections) {
+        List<CodeRuleDO> codeRuleDOList = new ArrayList<CodeRuleDO>();
+        if (!CollectionUtils.isEmpty(oidCollections)) {
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for (Collection<String> oids : oidCollectionsList) {
+                List<CodeRuleDO> tempDOList = codeRuleMapper.selectByPrimaryKeyCollection(oids);
+                if (!CollectionUtils.isEmpty(tempDOList)) {
+                    codeRuleDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return codeRuleDOList;
+    }
+
+    /**
+     * 浣跨敤缂栧彿闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+     *
+     * @param idCollections 缂栧彿鐨勯泦鍚�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    private List<CodeRuleDO> listCodeRuleDOByIdCollections(Collection<String> idCollections) {
+        List<CodeRuleDO> codeRuleDOList = new ArrayList<CodeRuleDO>();
+        if (!CollectionUtils.isEmpty(idCollections)) {
+            Collection<Collection<String>> idCollectionsList = VciBaseUtil.switchCollectionForOracleIn(idCollections);
+            for (Collection<String> ids : idCollectionsList) {
+                List<CodeRuleDO> tempDOList = codeRuleMapper.selectByIdCollection(ids);
+                if (!CollectionUtils.isEmpty(tempDOList)) {
+                    codeRuleDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return codeRuleDOList;
+    }
+
+
+    /**
+     * 鍙傜収涓绘暟鎹紪鐮佽鍒欏垪琛�
+     *
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉鍜屾帓搴�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeRuleVO> refDataGridCodeRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (conditionMap == null) {
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeRule(conditionMap, pageHelper);
+    }
+
+    /**
+     * 鏌ョ湅涓绘暟鎹紪鐮佽鍒欑殑浣跨敤鑼冨洿
+     *
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return 涓婚搴撳垎绫讳娇鐢ㄥ埌璇ョ紪鐮佽鍒欑殑鎵�鏈夐泦鍚�
+     */
+    @Override
+    public Collection<CodeClassifyVO> listUseRangeInCodeClassify(String oid) {
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("codeRuleOid", oid);
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(conditionMap, CodeClassifyDO.class);
+        List<CodeClassifyDO> dos = codeClassifyService.selectByWrapper(queryWrapper);
+        return codeClassifyService.codeClassifyDO2VOs(dos);
+    }
+
+    /**
+     * 妫�楠岀紪鐮佽鍒欐槸鍚﹀凡缁忚浣跨敤
+     *
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return true琛ㄧず宸茬粡浣跨敤锛宖alse琛ㄧず鏈浣跨敤
+     */
+    @Override
+    public boolean isAlreadyInUse(String oid) {
+        Collection<CodeClassifyVO> codeClassifyVOS = listUseRangeInCodeClassify(oid);
+        if (codeClassifyVOS.size() > 0) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 鍋滅敤涓庡惎鐢ㄧ紪鐮佽鍒�
+     *
+     * @param oid    缂栫爜瑙勫垯涓婚敭
+     * @param update enable:鍚敤 disable:鍋滅敤 release:鍙戝竷
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult updateStatus(String oid, String update) {
+        int count = 0;
+        CodeRuleDO codeRuleDO = selectByOid(oid);
+        if ("enable".equalsIgnoreCase(update)) {
+            if (!CodeRuleLC.DISABLED.getValue().equals(codeRuleDO.getLcStatus())) {
+                return BaseResult.fail("闈炲仠鐢ㄧ姸鎬佺殑缂栫爜瑙勫垯鏃犻渶鐐瑰嚮鍚敤");
+            }
+            count = codeRuleMapper.updateLcStatus(oid, CodeRuleLC.RELEASED.getValue());
+        } else if ("disable".equalsIgnoreCase(update)) {
+            if (!CodeRuleLC.RELEASED.getValue().equals(codeRuleDO.getLcStatus())) {
+                return BaseResult.fail("闈炲彂甯冪姸鎬佺殑缂栫爜瑙勫垯鏃犳硶鍋滅敤");
+            }
+            count = codeRuleMapper.updateLcStatus(oid, CodeRuleLC.DISABLED.getValue());
+        } else if ("release".equalsIgnoreCase(update)) {
+            if (!CodeRuleLC.EDITING.getValue().equals(codeRuleDO.getLcStatus())) {
+                return BaseResult.fail("闈炵紪杈戠姸鎬佺殑缂栫爜瑙勫垯鏃犳硶鍙戝竷");
+            }
+            count = codeRuleMapper.updateLcStatus(oid, CodeRuleLC.RELEASED.getValue());
+        } else {
+            return BaseResult.fail("鏆備笉鏀寔鐨勬搷浣滅被鍨�");
+        }
+        if (count > 0) {
+            return BaseResult.success();
+        } else {
+            return BaseResult.fail("鏇存柊鐘舵�佸け璐�");
+        }
+    }
+
+    /**
+     * 鍏嬮殕缂栫爜瑙勫垯
+     *
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     */
+    public BaseResult cloneCodeRule_v1(CodeRuleDTO codeRuleDTO) {
+        VciBaseUtil.alertNotNull(codeRuleDTO.getOid(), "缂栫爜瑙勫垯涓婚敭");
+        ClientBusinessObjectOperation operation = new ClientBusinessObjectOperation();
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("pkCodeRule", codeRuleDTO.getOid());
+        List<CodeBasicSecDO> basicSecDOS = boService.queryObject(CodeBasicSecDO.class, conditionMap);
+        List<String> secOidList = new ArrayList<>();
+        for (CodeBasicSecDO secDO : basicSecDOS) {
+            secOidList.add(secDO.getOid());
+        }
+        List<ClientBusinessObject> cboList = new ArrayList<>();
+        try {
+            ClientBusinessObject templateCbo = operation.readBusinessObjectById(codeRuleDTO.getOid(), MdmBtmTypeConstant.CODE_RULE);
+            ClientBusinessObject codeRuleCbo = operation.initBusinessObject(templateCbo.getBtmName());
+            String curOid = codeRuleCbo.getOid();
+            String curRevisionId = codeRuleCbo.getRevisionid();
+            String curNameOid = codeRuleCbo.getNameoid();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(templateCbo, codeRuleCbo);
+            codeRuleCbo.setOid(curOid);
+            codeRuleCbo.setRevisionid(curRevisionId);
+            codeRuleCbo.setNameoid(curNameOid);
+            codeRuleCbo.setId(templateCbo.getId() + "_copy");
+            codeRuleCbo.setName(templateCbo.getName() + "_copy");
+            if (!CollectionUtils.isEmpty(secOidList)) {
+                ClientBusinessObject[] secCboArr = operation.readBusinessObjectById(secOidList.toArray(new String[0]), MdmBtmTypeConstant.CODE_BASIC_SEC);
+                for (ClientBusinessObject cbo : secCboArr) {
+                    ClientBusinessObject newSecCbo = operation.initBusinessObject(cbo.getBtmName());
+                    String newSecCboOid = newSecCbo.getOid();
+                    String newSecCboRevisionId = newSecCbo.getRevisionid();
+                    String newSecCboNameOid = newSecCbo.getNameoid();
+                    BeanUtilForVCI.copyPropertiesIgnoreCase(cbo, newSecCbo);
+                    newSecCbo.setOid(newSecCboOid);
+                    newSecCbo.setRevisionid(newSecCboRevisionId);
+                    newSecCbo.setNameoid(newSecCboNameOid);
+                    newSecCbo.setId(newSecCbo.getId() + "_copy");
+                    newSecCbo.setName(newSecCbo.getName() + "_copy");
+                    newSecCbo.setAttributeValue("pkCodeRule", codeRuleCbo.getOid());
+                    cboList.add(newSecCbo);
+                }
+            }
+            cboList.add(codeRuleCbo);
+            ClientBusinessObject[] saveList = operation.batchSaveCreateBuinessObject(cboList.toArray(new ClientBusinessObject[0]));
+            if (saveList.length == 0) {
+                return BaseResult.fail("鍏嬮殕鍑洪敊浜嗏�︹��");
+            }
+        } catch (VCIError vciError) {
+            vciError.printStackTrace();
+        }
+        return BaseResult.success();
+    }
+
+    /**
+     * 鍏嬮殕缂栫爜瑙勫垯
+     *
+     * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
+     */
+    @Override
+    public BaseResult cloneCodeRule(CodeRuleDTO codeRuleDTO) {
+        VciBaseUtil.alertNotNull(codeRuleDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        CodeRuleDO codeRuleDO = new CodeRuleDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDTO, codeRuleDO);
+        WebUtil.setPersistence(false);
+        BatchCBO batchInsertCBO = codeRuleMapper.insert(codeRuleDO);
+        List<CodeBasicSecDTO> secList = codeRuleDTO.getElements();
+        secList.forEach(codeBasicSecDTO -> {
+            codeBasicSecDTO.setPkCodeRule(codeRuleDO.getOid());
+            KeyValue attrKv = codeBasicSecService.checkAttrNullableBySecType(codeBasicSecDTO);
+            if (!"success".equals(attrKv.getKey())) {
+                throw new VciBaseException(attrKv.getValue() + "涓嶈兘涓虹┖");
+            }
+            CodeBasicSecDO codeBasicSecDO = new CodeBasicSecDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDTO, codeBasicSecDO);
+            codeBasicSecDO.setOid("");
+            codeBasicSecDO.setRevisionOid("");
+            codeBasicSecDO.setNameOid("");
+            BatchCBO cbo = codeBasicSecMapper.insert(codeBasicSecDO);
+            batchInsertCBO.addCreateCbo(cbo.getCreateCboArray()[0]);
+        });
+        boService.persistenceBatch(batchInsertCBO);
+        return BaseResult.success();
+    }
+
+    /**
+     * 浣跨敤涓婚敭鑾峰彇缂栫爜瑙勫垯鐨勫唴瀹�
+     *
+     * @param oid 涓婚敭
+     * @return 瑙勫垯鐨勬樉绀哄璞�
+     */
+    @Override
+    public CodeRuleVO getObjectHasSecByOid(String oid) {
+        CodeRuleDO ruleDO = selectByOid(oid);
+        return codeRuleDO2VO(ruleDO, true);
+    }
+
+    /**
+     * 缂栫爜瑙勫垯娓呯┖鎵�鏈夊凡鐢熸垚鐨勭紪鐮�
+     *
+     * @param oid 缂栫爜瑙勫垯涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult clearAllCode(String oid) {
+        WebUtil.alertNotNull(oid, "缂栫爜瑙勫垯涓婚敭");
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("codeRuleOid", oid);
+        List<CodeAllCodeDO> codeDOList = boService.queryObject(CodeAllCodeDO.class, conditionMap);
+        if (CollectionUtils.isEmpty(codeDOList)) {
+            return BaseResult.fail("褰撳墠缂栫爜瑙勫垯娌℃湁鐢熸垚缂栫爜,鏃犻渶娓呯┖");
+        }
+        //鏄惁闇�瑕佽繘琛宐tm涓嶇粺涓�鐨勫垽鏂�?
+        String btmType = codeDOList.get(0).getCreateCodeBtm();
+        /*boolean flag = codeDOList.stream().anyMatch(s -> !StringUtils.equalsIgnoreCase(btmType, s.getCreateCodeBtm()));
+        if (flag) {
+            return BaseResult.fail("褰撳墠缂栫爜瑙勫垯鐢熸垚缂栫爜鍦ㄤ笉鍚岀被鍨嬩笅浣跨敤杩�");
+        }*/
+        //澶氱绫诲瀷涓嬬殑鏌ヨ
+        Set<String> btmTypeSet = codeDOList.stream().filter(s -> {
+            return !StringUtils.equalsIgnoreCase(btmType, s.getCreateCodeBtm());
+        }).map(s -> s.getCreateCodeBtm()).collect(Collectors.toSet());
+        List<ClientBusinessObject> businessDataList = new ArrayList<>();
+        if (btmTypeSet.size() > 1) {
+            for (String btm : btmTypeSet) {
+                String sql = "select COUNT(w.OID) from PLATFORMBTM_" + btm + "  w\n" +
+                        "join PLATFORMBTM_" + MdmBtmTypeConstant.CODE_ALL_CODE + " c on w.OID = c.CREATECODEOID\n" +
+                        "where c.CREATECODEBTM = '" + btm + "' and c.CODERULEOID = '" + oid + "'" +
+                        "and w.ISLASTR = '1' and w.ISLASTV = '1'";
+                List<ClientBusinessObject> businessData = boService.queryByOnlySql(sql);
+                businessDataList.addAll(businessData);
+            }
+        }else {
+            String sql = "select COUNT(w.OID) from PLATFORMBTM_" + btmType + "  w\n" +
+                    "join PLATFORMBTM_" + MdmBtmTypeConstant.CODE_ALL_CODE + " c on w.OID = c.CREATECODEOID\n" +
+                    "where c.CREATECODEBTM = '" + btmType + "' and c.CODERULEOID = '" + oid + "'" +
+                    "and w.ISLASTR = '1' and w.ISLASTV = '1'";
+            List<ClientBusinessObject> businessData = boService.queryByOnlySql(sql);
+            businessDataList.addAll(businessData);
+        }
+        if (CollectionUtils.isEmpty(businessDataList) || StringUtils.isBlank(businessDataList.get(0).getAttributeValue("COUNT(w.OID)"))) {
+            //鏃犳晥鏌ヨ
+            return BaseResult.fail("鏌ヨ澶辫触");
+        } else if (!StringUtils.equalsIgnoreCase("0", businessDataList.get(0).getAttributeValue("COUNT(w.OID)"))) {
+            return BaseResult.fail("缂栫爜瑙勫垯鐢熸垚鐨勭紪鐮佸凡鍦ㄤ笟鍔℃暟鎹腑搴旂敤锛屼笉鍏佽娓呯┖");
+        }
+        //娌℃湁鏁版嵁锛屽彲浠ュ畨鍏ㄥ垹闄�
+        WebUtil.setPersistence(false);
+        //鍒犻櫎鐮佸�艰〃涓殑鏁版嵁锛屼絾涓嶅锛屽鏋滄湁娴佹按鐨勭爜娈碉紝闇�瑕侀噸鏂拌绠楁祦姘�
+        conditionMap.clear();
+        conditionMap.put("codeRuleOid", oid);
+        List<ClientBusinessObject> serialValueList = boService.queryCBO("codeserialvalue", conditionMap);
+        BatchCBO batchCBO = boService.batchDelete(codeDOList);
+        batchCBO.getDeleteCbos().addAll(serialValueList);
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+        return BaseResult.success();
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSerialAlgorithmServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSerialAlgorithmServiceImpl.java
new file mode 100644
index 0000000..2a54f8d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSerialAlgorithmServiceImpl.java
@@ -0,0 +1,61 @@
+package org.springblade.code.service.impl;
+
+import com.vci.mdm.annotation.MdmSerialAlgorithm;
+import com.vci.mdm.pagemodel.CodeSerialAlgorithmVO;
+import com.vci.mdm.service.CodeSerialAlgorithmServiceI;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.ApplicationContextProvider;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.aop.framework.Advised;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 娴佹按绠楁硶鐨勬湇鍔�
+ * @author weidy
+ * @date 2022-2-17
+ */
+@Service
+public class CodeSerialAlgorithmServiceImpl implements CodeSerialAlgorithmServiceI {
+    /**
+     * 鑾峰彇娴佹按绠楁硶鐨勫垪琛�
+     *
+     * @return 娴佹按绠楁硶鐨勪俊鎭�
+     */
+    @Override
+    public DataGrid<CodeSerialAlgorithmVO> gridSerialAlgorithm() {
+        //浣跨敤涓婚敭鍘绘壂鎻�
+        String[] beanNames = ApplicationContextProvider.getApplicationContext().getBeanNamesForAnnotation(MdmSerialAlgorithm.class);
+        List<CodeSerialAlgorithmVO> voList = new ArrayList<>();
+        if(beanNames!=null && beanNames.length>0){
+            for(String beanName : beanNames){
+                Object bean = ApplicationContextProvider.getApplicationContext().getBean(beanName);
+                if(bean!=null){
+                    CodeSerialAlgorithmVO algorithmVO = new CodeSerialAlgorithmVO();
+                    Advised advised = (Advised)bean;
+                    Class<?> targetClass = advised.getTargetSource().getTargetClass();
+                    algorithmVO.setClassFullName(targetClass.getName());
+                    MdmSerialAlgorithm serialAlgorithm = targetClass.getDeclaredAnnotation(MdmSerialAlgorithm.class);
+                    if(serialAlgorithm==null){
+                        serialAlgorithm = targetClass.getAnnotation(MdmSerialAlgorithm.class);
+                    }
+                    if(serialAlgorithm !=null) {
+                        algorithmVO.setName(serialAlgorithm.text());
+                        algorithmVO.setDescription(serialAlgorithm.description());
+                        algorithmVO.setId(serialAlgorithm.value());
+                        if(StringUtils.isBlank(algorithmVO.getId())){
+                            algorithmVO.setId(beanName);
+                        }
+                        voList.add(algorithmVO);
+                    }
+                }
+            }
+        }
+        DataGrid<CodeSerialAlgorithmVO> dataGrid = new DataGrid<>();
+        dataGrid.setData(voList);
+        dataGrid.setTotal(voList.size());
+        return dataGrid;
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSynonymServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSynonymServiceImpl.java
new file mode 100644
index 0000000..c4ad91b
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSynonymServiceImpl.java
@@ -0,0 +1,275 @@
+package org.springblade.code.service.impl;
+
+import com.vci.mdm.dao.CodeSynonymDaoI;
+import com.vci.mdm.dto.CodeSynonymDTO;
+import com.vci.mdm.model.CodeSynonymDO;
+import com.vci.mdm.pagemodel.CodeSynonymVO;
+import com.vci.mdm.service.CodeSynonymServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鍚屼箟璇嶉厤缃湇鍔�
+ * @author weidy
+ * @date 2022-02-17
+ */
+@Service
+public class CodeSynonymServiceImpl implements CodeSynonymServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeSynonymDaoI codeSynonymMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑鍚屼箟璇嶉厤缃�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeSynonymVO> gridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeSynonymDO> doList = codeSynonymMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeSynonymVO> dataGrid=new DataGrid<CodeSynonymVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeSynonymDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeSynonymMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeSynonymDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeSynonymVO> codeSynonymDO2VOs(Collection<CodeSynonymDO>  codeSynonymDOs) throws VciBaseException{
+        List<CodeSynonymVO> voList = new ArrayList<CodeSynonymVO>();
+        if(!CollectionUtils.isEmpty(codeSynonymDOs)){
+           for(CodeSynonymDO s: codeSynonymDOs){
+                CodeSynonymVO vo =  codeSynonymDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeSynonymDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeSynonymVO codeSynonymDO2VO(CodeSynonymDO codeSynonymDO) throws VciBaseException{
+              CodeSynonymVO vo = new CodeSynonymVO();
+        if(codeSynonymDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeSynonymDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeSynonymVO addSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeSynonymDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        CodeSynonymDO codeSynonymDO = new CodeSynonymDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeSynonymDTO,codeSynonymDO);
+        codeSynonymMapper.insert(codeSynonymDO);
+        return codeSynonymDO2VO(codeSynonymDO);
+    }
+
+    /**
+     * 淇敼鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeSynonymVO editSave(CodeSynonymDTO codeSynonymDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeSynonymDTO,"鏁版嵁瀵硅薄",codeSynonymDTO.getOid(),"鍚屼箟璇嶉厤缃富閿�");
+         //灏咲TO杞崲涓篋O
+         CodeSynonymDO codeSynonymDO = selectByOid(codeSynonymDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeSynonymDTO,codeSynonymDO);
+         codeSynonymMapper.updateByPrimaryKey(codeSynonymDO);
+         return codeSynonymDO2VO(codeSynonymDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeSynonymDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeSynonymDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeSynonymDTO codeSynonymDTO, CodeSynonymDO codeSynonymDO) {
+            CodeSynonymDO tsDO = new CodeSynonymDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeSynonymDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codeSynonymDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎鍚屼箟璇嶉厤缃�
+     * @param codeSynonymDTO 鍚屼箟璇嶉厤缃暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeSynonym(CodeSynonymDTO codeSynonymDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeSynonymDTO,"鍚屼箟璇嶉厤缃暟鎹璞�",codeSynonymDTO.getOid(),"鍚屼箟璇嶉厤缃殑涓婚敭");
+        CodeSynonymDO codeSynonymDO = selectByOid(codeSynonymDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeSynonymDTO,codeSynonymDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = codeSynonymMapper.deleteByPrimaryKey(codeSynonymDO.getOid());
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍚屼箟璇嶉厤缃�
+    * @param oid 涓婚敭
+    * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeSynonymVO getObjectByOid(String oid) throws VciBaseException{
+        return codeSynonymDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeSynonymDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeSynonymDO codeSynonymDO = codeSynonymMapper.selectByPrimaryKey(oid.trim());
+        if(codeSynonymDO == null || StringUtils.isBlank(codeSynonymDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeSynonymDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍚屼箟璇嶉厤缃�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeSynonymVO> listCodeSynonymByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeSynonymDO> codeSynonymDOList = listCodeSynonymDOByOidCollections(oidCollections);
+        return codeSynonymDO2VOs(codeSynonymDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeSynonymDO> listCodeSynonymDOByOidCollections(Collection<String> oidCollections){
+        List<CodeSynonymDO> codeSynonymDOList = new ArrayList<CodeSynonymDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeSynonymDO> tempDOList =  codeSynonymMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeSynonymDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  codeSynonymDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収鍚屼箟璇嶉厤缃垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鍚屼箟璇嶉厤缃樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeSynonymVO> refDataGridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridCodeSynonym(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeTemplatePhaseServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeTemplatePhaseServiceImpl.java
new file mode 100644
index 0000000..047da6c
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeTemplatePhaseServiceImpl.java
@@ -0,0 +1,506 @@
+package org.springblade.code.service.impl;
+
+import com.vci.mdm.constant.MdmBtmTypeConstant;
+import com.vci.mdm.dao.CodePhaseAttrDaoI;
+import com.vci.mdm.dao.CodeTemplatePhaseDaoI;
+import com.vci.mdm.dto.CodeTemplatePhaseDTO;
+import com.vci.mdm.model.CodeClassifyTemplateAttrDO;
+import com.vci.mdm.model.CodePhaseAttrDO;
+import com.vci.mdm.model.CodeTemplatePhaseDO;
+import com.vci.mdm.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.mdm.pagemodel.CodeTemplatePhaseVO;
+import com.vci.mdm.service.CodeClassifyTemplateAttrServiceI;
+import com.vci.mdm.service.CodePhaseAttrServiceI;
+import com.vci.mdm.service.CodeTemplatePhaseServiceI;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.starter.web.util.BeanUtil;
+import com.vci.starter.web.util.BeanUtilForVCI;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 妯℃澘闃舵鏈嶅姟
+ * @author weidy
+ * @date 2022-01-24
+ */
+@Service
+public class CodeTemplatePhaseServiceImpl implements CodeTemplatePhaseServiceI{
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private CodeTemplatePhaseDaoI codeTemplatePhaseMapper;
+
+    /**
+     * 妯℃澘灞炴�х殑鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyTemplateAttrServiceI tempAttrService;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 闃舵鐨勫睘鎬�
+     */
+    @Autowired
+    private CodePhaseAttrServiceI phaseAttrService;
+
+    /**
+     * 鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private CodePhaseAttrDaoI codePhaseAttrMapper;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑妯℃澘闃舵
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<CodeTemplatePhaseDO> doList = codeTemplatePhaseMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<CodeTemplatePhaseVO> dataGrid=new DataGrid<CodeTemplatePhaseVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(codeTemplatePhaseDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeTemplatePhaseMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param codeTemplatePhaseDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhaseDO>  codeTemplatePhaseDOs) throws VciBaseException{
+        List<CodeTemplatePhaseVO> voList = new ArrayList<CodeTemplatePhaseVO>();
+        if(!CollectionUtils.isEmpty(codeTemplatePhaseDOs)){
+           for(CodeTemplatePhaseDO s: codeTemplatePhaseDOs){
+                CodeTemplatePhaseVO vo =  codeTemplatePhaseDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  codeTemplatePhaseDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  CodeTemplatePhaseVO codeTemplatePhaseDO2VO(CodeTemplatePhaseDO codeTemplatePhaseDO) throws VciBaseException{
+              CodeTemplatePhaseVO vo = new CodeTemplatePhaseVO();
+        if(codeTemplatePhaseDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+                    }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public CodeTemplatePhaseVO addSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getAttributes(),"鍖呭惈鐨勫睘鎬�");
+        //灏咲TO杞崲涓篋O
+        CodeTemplatePhaseDO codeTemplatePhaseDO = new CodeTemplatePhaseDO();
+        codeTemplatePhaseDO.setOid(VciBaseUtil.getPk());
+        BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = codeTemplatePhaseMapper.insert(codeTemplatePhaseDO);
+        List<CodePhaseAttrDO> attrDOList = new ArrayList<>();
+        codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
+            CodePhaseAttrDO attrDO = new CodePhaseAttrDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
+            attrDO.setOid(VciBaseUtil.getPk());
+            attrDO.setCodePhaseOid(codeTemplatePhaseDO.getOid());
+            attrDOList.add(attrDO);
+        });
+        BatchCBO attrCBO = codePhaseAttrMapper.batchInsert(attrDOList);
+        batchCBO.copyFromOther(attrCBO);
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+        return codeTemplatePhaseDO2VO(codeTemplatePhaseDO);
+    }
+
+    /**
+     * 淇敼妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public CodeTemplatePhaseVO editSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getOid(),"妯℃澘闃舵涓婚敭",codeTemplatePhaseDTO.getAttributes(),"鍖呭惈鐨勫睘鎬�");
+         //灏咲TO杞崲涓篋O
+         CodeTemplatePhaseDO codeTemplatePhaseDO = selectByOid(codeTemplatePhaseDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+         WebUtil.setPersistence(false);
+         BatchCBO batchCBO = codeTemplatePhaseMapper.updateByPrimaryKey(codeTemplatePhaseDO);
+         //鎶婁互鍓嶇殑鍒犻櫎
+         List<CodePhaseAttrDO> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseDO.getOid());
+         if(!CollectionUtils.isEmpty(phaseAttrDOS)){
+             BatchCBO delCBO = codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList()));
+             batchCBO.copyFromOther(delCBO);
+         }
+         List<CodePhaseAttrDO> attrDOList = new ArrayList<>();
+         codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
+             CodePhaseAttrDO attrDO = new CodePhaseAttrDO();
+             BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
+             attrDO.setOid(VciBaseUtil.getPk());
+             attrDO.setCodePhaseOid(codeTemplatePhaseDO.getOid());
+             attrDOList.add(attrDO);
+         });
+         BatchCBO attrCBO = codePhaseAttrMapper.batchInsert(attrDOList);
+         batchCBO.copyFromOther(attrCBO);
+         WebUtil.setPersistence(true);
+         boService.persistenceBatch(batchCBO);
+         return codeTemplatePhaseDO2VO(codeTemplatePhaseDO);
+     }
+
+    /**
+     * 浣跨敤闃舵涓婚敭鑾峰彇鍖呭惈鐨勫睘鎬�
+     * @param codePhaseOid 闃舵鐨勪富閿�
+     * @return 鍖呭惈灞炴�х殑鏁版嵁瀵硅薄
+     */
+     private List<CodePhaseAttrDO> listPhaseAttrDOByPhaseOid(String codePhaseOid){
+         Map<String,String> conditionMap = new HashMap<>();
+         conditionMap.put("codePhaseOid",codePhaseOid);
+         List<CodePhaseAttrDO> phaseAttrDOS = codePhaseAttrMapper.selectByCondition(conditionMap, new PageHelper(-1));
+         return phaseAttrDOS;
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param codeTemplatePhaseDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param codeTemplatePhaseDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(CodeTemplatePhaseDTO codeTemplatePhaseDTO, CodeTemplatePhaseDO codeTemplatePhaseDO) {
+        CodeTemplatePhaseDO tsDO = new CodeTemplatePhaseDO();
+        BeanUtil.convert(codeTemplatePhaseDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(codeTemplatePhaseDO.getOid())) {
+            return BaseResult.success();
+        }else{
+            return BaseResult.fail(DATA_LINKED_NOT_DELETE,new String[]{""});
+        }
+    }
+
+    /**
+    * 鏍¢獙鏄惁琚紩鐢�
+    * @param oid 涓婚敭
+    * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+    */
+    private boolean checkIsLinked(String oid) throws VciBaseException{
+        //TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+        return false;
+    }
+
+    /**
+     * 鍒犻櫎妯℃澘闃舵
+     * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteCodeTemplatePhase(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"妯℃澘闃舵鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getOid(),"妯℃澘闃舵鐨勪富閿�");
+        CodeTemplatePhaseDO codeTemplatePhaseDO = selectByOid(codeTemplatePhaseDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = codeTemplatePhaseMapper.deleteByPrimaryKey(codeTemplatePhaseDO.getOid());
+        //闇�瑕佸垹闄ゅ睘鎬�
+        List<CodePhaseAttrDO> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseDO.getOid());
+        if(!CollectionUtils.isEmpty(phaseAttrDOS)) {
+            BatchCBO deleteCBO = codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList()));
+            batchCBO.copyFromOther(deleteCBO);
+        }
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+        return (batchCBO!=null && batchCBO.getDeleteCbos() !=null &&batchCBO.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+     * 妯℃澘淇敼瑙﹀彂鍔熻兘
+     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    @Override
+    public BatchCBO codeTemplateAttrModifyTrigger(List<CodeClassifyTemplateAttrDO> attrDOList){
+        //灞炴�т慨鏀圭殑鏃跺�欙紝闇�瑕佸悓姝ヤ慨鏀瑰搴斿睘鎬х殑鍚嶇О
+        BatchCBO batchCBO = new BatchCBO();
+        List<CodePhaseAttrDO> phaseAttrDOS =listLinkAttrDOByTemplateAttrDOS(attrDOList);
+        if(!CollectionUtils.isEmpty(phaseAttrDOS)){
+            //璇存槑鏈夊睘鎬�,鎴戜滑鍘绘浛鎹竴涓�
+            Map<String, CodeClassifyTemplateAttrDO> attrDOMap = attrDOList.stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
+            phaseAttrDOS.stream().forEach(phaseAttrDO->{
+                if(attrDOMap.containsKey(phaseAttrDO.getId())){
+                    CodeClassifyTemplateAttrDO attrDO = attrDOMap.get(phaseAttrDO.getId());
+                    phaseAttrDO.setId(attrDO.getId());
+                    phaseAttrDO.setName(attrDO.getName());
+                    phaseAttrDO.setAttributeGroup(attrDO.getAttributeGroup());
+                }
+            });
+            BatchCBO updateCBO = codePhaseAttrMapper.batchUpdate(phaseAttrDOS);
+            batchCBO.copyFromOther(updateCBO);
+        }
+        return batchCBO;
+    }
+
+    /**
+     * 浣跨敤妯℃澘鐨勫睘鎬ц幏鍙栭樁娈典腑鍖呭惈鐨勫睘鎬у唴瀹�
+     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+     * @return 闃舵閲岀殑灞炴�ф暟鎹璞�
+     */
+    private List<CodePhaseAttrDO> listLinkAttrDOByTemplateAttrDOS(List<CodeClassifyTemplateAttrDO> attrDOList){
+        if(!CollectionUtils.isEmpty(attrDOList)) {
+            //鏌ヨ杩欎釜妯℃澘閲屽寘鍚殑鎵�鏈夐樁娈电殑杩欎簺灞炴��
+            //鍥犱负oracle閲岃〃鐨勫瓧娈典笉鑳借秴杩�1000涓紝鎵�浠ユ垜浠繖閲岄粯璁ゅ睘鎬т釜鏁版槸灏忎簬1000鐨勶紱
+            Map<String, String> conditionMap = new HashMap<>();
+            conditionMap.put("codePhaseOid", QueryOptionConstant.IN + "(select oid from " + getPhaseTable() + " where codeClassifyTemplateOid='" + attrDOList.get(0).getClassifyTemplateOid() + "')");
+            conditionMap.put("id", QueryOptionConstant.IN + "(" +  VciBaseUtil.toInSql(attrDOList.stream().map(CodeClassifyTemplateAttrDO::getId).collect(Collectors.toList()).toArray(new String[0])) + ")");
+            return codePhaseAttrMapper.selectByCondition(conditionMap, new PageHelper(-1));
+        }else{
+            return new ArrayList<>();
+        }
+    }
+
+    /**
+     * 闃舵鐨勮〃鍚�
+     * @return 琛ㄥ悕
+     */
+    private String getPhaseTable(){
+        return VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE);
+    }
+
+    /**
+     * 闃舵灞炴�х殑琛ㄥ悕
+     * @return 琛ㄥ悕
+     */
+    private String getPhaseAttrTable(){
+        return VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_PHASE_ATTR);
+    }
+
+    /**
+     * 妯℃澘灞炴�у垹闄ょ殑鏃跺�欒Е鍙�
+     * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    @Override
+    public BatchCBO codeTemplateAttrDeleteTrigger(List<CodeClassifyTemplateAttrDO> attrDOList){
+        BatchCBO batchCBO = new BatchCBO();
+        List<CodePhaseAttrDO> phaseAttrDOS =listLinkAttrDOByTemplateAttrDOS(attrDOList);
+        if(!CollectionUtils.isEmpty(phaseAttrDOS)){
+            //灞炴�ц鍒犻櫎鐨勬椂鍊欙紝闃舵閲岄潰涔熶竴鏍疯琚垹闄�
+            batchCBO.copyFromOther(codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList())));
+        }
+        return batchCBO;
+    }
+
+    /**
+     * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
+     *
+     * @param classifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鏁版嵁
+     */
+    @Override
+    public BatchCBO codeTemplateDeleteTrigger(String classifyTemplateOid) {
+        BatchCBO batchCBO = new BatchCBO();
+        Map<String,String> conditionMap = new HashMap<>();
+        conditionMap.put("codeClassifyTemplateOid",classifyTemplateOid);
+        List<CodeTemplatePhaseDO> templatePhaseDOS = codeTemplatePhaseMapper.selectByCondition(conditionMap, new PageHelper(-1));
+        conditionMap.clear();
+        if(!CollectionUtils.isEmpty(templatePhaseDOS)) {
+            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<CodePhaseAttrDO> phaseAttrDOS = codePhaseAttrMapper.selectByCondition(conditionMap, new PageHelper(-1));
+            if(!CollectionUtils.isEmpty(phaseAttrDOS)){
+                batchCBO.copyFromOther(codePhaseAttrMapper.batchDeleteByOids(phaseAttrDOS.stream().map(CodePhaseAttrDO::getOid).collect(Collectors.toList())));
+            }
+        }
+        return batchCBO;
+    }
+
+    /**
+    * 涓婚敭鑾峰彇妯℃澘闃舵
+    * @param oid 涓婚敭
+    * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  CodeTemplatePhaseVO getObjectByOid(String oid) throws VciBaseException{
+        return codeTemplatePhaseDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private CodeTemplatePhaseDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        CodeTemplatePhaseDO codeTemplatePhaseDO = codeTemplatePhaseMapper.selectByPrimaryKey(oid.trim());
+        if(codeTemplatePhaseDO == null || StringUtils.isBlank(codeTemplatePhaseDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return codeTemplatePhaseDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<CodeTemplatePhaseDO> codeTemplatePhaseDOList = listCodeTemplatePhaseDOByOidCollections(oidCollections);
+        return codeTemplatePhaseDO2VOs(codeTemplatePhaseDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<CodeTemplatePhaseDO> listCodeTemplatePhaseDOByOidCollections(Collection<String> oidCollections){
+        List<CodeTemplatePhaseDO> codeTemplatePhaseDOList = new ArrayList<CodeTemplatePhaseDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<CodeTemplatePhaseDO> tempDOList =  codeTemplatePhaseMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        codeTemplatePhaseDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  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>();
+        }
+        return gridCodeTemplatePhase(conditionMap,pageHelper);
+    }
+
+    /**
+     * 闃舵涓嶅寘鍚殑灞炴��
+     *
+     * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
+     * @param pageHelper   鍒嗛〉瀵硅薄
+     * @return 灞炴�х殑淇℃伅
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) {
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        if(!conditionMap.containsKey("classifyTemplateOid")){
+            return new DataGrid<>("娌℃湁妯℃澘鐨勪富閿�");
+        }
+        //闇�瑕佸垽鏂樁娈电殑涓婚敭鏄惁瀛樺湪
+        String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
+        if(StringUtils.isNotBlank(codePhaseOid)){
+            //鎺掗櫎闃舵涓婁娇鐢ㄧ殑
+            conditionMap.remove("codePhaseOid");
+            conditionMap.put("id", QueryOptionConstant.NOTIN + "(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" +codePhaseOid + "')");
+        }
+        return tempAttrService.gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
+    }
+
+    /**
+     * 闃舵鍖呭惈鐨勫睘鎬�
+     *
+     * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
+     * @param pageHelper   鍒嗛〉瀵硅薄
+     * @return 灞炴�х殑淇℃伅
+     */
+    @Override
+    public DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) {
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
+        if(StringUtils.isBlank(codePhaseOid)){
+            return new DataGrid<>();
+        }
+        conditionMap.remove("codePhaseOid");
+        CodeTemplatePhaseDO phaseDO = selectByOid(codePhaseOid);
+        conditionMap.put("id",QueryOptionConstant.IN + "(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" +codePhaseOid + "')");
+        conditionMap.put("classifyTemplateOid",phaseDO.getCodeClassifyTemplateOid());
+        return tempAttrService.gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/tt.xml b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/tt.xml
new file mode 100644
index 0000000..8543b16
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/tt.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data systemId="DMS">
+    <user userName="1" trueName="娴嬭瘯[1]" ip="172.16.0.30"/>
+    <classifys>
+        <classify classCode="ECOLib" library="ECOLib" fullclsfNamePath="">
+        <sections>
+            <section name="浜у搧浠e彿" value="CH4-0000"/>
+            <section name="鍥哄畾鐮佹" value="-"/>
+            <section name="鍥哄畾鐮佹" value="GG"/>
+            <section name="鏃ユ湡鐮佹" value="2023"/>
+            <section name="鍥哄畾鐮佹" value="-"/>
+        </sections>
+        <objects>
+            <object code="" id="474EDA77-E498-44B8-8D4A-21EAC0B5643C" status="Editing" operate="create" creator="1">
+                <prop key="name" text="鍚嶇О" value=""/>
+            </object>
+        </objects>
+        </classify>
+    </classifys>
+</data>
\ No newline at end of file
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/update.json b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/update.json
new file mode 100644
index 0000000..c771e52
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/update.json
@@ -0,0 +1,111 @@
+{
+  "data": {
+    "systemId": "RLM",
+    "user": {
+      "userName": "weidy",
+      "trueName": "榄忓ぇ鍕�",
+      "ip": "127.0.0.1"
+    },
+    "classifys": {
+      "classify": [
+        {
+          "classCode": "020104",
+          "library": "StdLib",
+          "fullclsfNamePath": "鐗╁搧##VCI##鏍囧噯浠�##VCI##铻烘爴",
+          "objects": {
+            "object": [
+              {
+                "code": "0201040002",
+                "id": "0023401",
+                "status": "Released",
+                "operate": "update",
+                "editor": "weidy",
+                "prop": [
+                  {
+                    "key": "partNo",
+                    "text": "鐗屽彿",
+                    "value": "HB1-221"
+                  },
+                  {
+                    "key": "partName",
+                    "text": "鍚嶇О",
+                    "value": "鍗婂渾澶磋灪閽�1"
+                  },
+                  {
+                    "key": "PartNumber",
+                    "text": "",
+                    "value": "HB1-221-M4*6"
+                  },
+                  {
+                    "key": "鐗屽彿",
+                    "text": "",
+                    "value": "HB1-221"
+                  },
+                  {
+                    "key": "瑙勬牸",
+                    "text": "",
+                    "value": "M41"
+                  },
+                  {
+                    "key": "琛ㄩ潰澶勭悊",
+                    "text": "",
+                    "value": "鐢甸晙"
+                  },
+                  {
+                    "key": "淇濋櫓瀛斿瀷寮�",
+                    "text": "",
+                    "value": "鏃�1"
+                  }
+                ]
+              },
+              {
+                "code": "0201040003",
+                "id": "0023402",
+                "status": "Released",
+                "operate": "update",
+                "editor": "weidy",
+                "prop": [
+                  {
+                    "key": "partNo",
+                    "text": "鐗屽彿",
+                    "value": "HB1-221"
+                  },
+                  {
+                    "key": "partName",
+                    "text": "鍚嶇О",
+                    "value": "鍗婂渾澶磋灪閽�2"
+                  },
+                  {
+                    "key": "PartNumber",
+                    "text": "",
+                    "value": "HB1-221-M4*5"
+                  },
+                  {
+                    "key": "鐗屽彿",
+                    "text": "",
+                    "value": "HB1-221"
+                  },
+                  {
+                    "key": "瑙勬牸",
+                    "text": "",
+                    "value": "M43"
+                  },
+                  {
+                    "key": "琛ㄩ潰澶勭悊",
+                    "text": "",
+                    "value": "鐢甸晙"
+                  },
+                  {
+                    "key": "淇濋櫓瀛斿瀷寮�",
+                    "text": "",
+                    "value": "鏃�2"
+                  }
+                ]
+              }
+            ]
+          }
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/AttributeMapConfig.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/AttributeMapConfig.java
new file mode 100644
index 0000000..5e9b8df
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/AttributeMapConfig.java
@@ -0,0 +1,33 @@
+package org.springblade.code.utils;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+@ConfigurationProperties(prefix="attrconfig")
+@Component
+public class AttributeMapConfig {
+    private Map<String,String> system_attrmap;
+    /**
+     * WRJ涓绘暟鎹笌MPM鏋氫妇鍊兼槧灏勯厤缃�
+     */
+    private Map<String, List<EnumVO>> mpmEnumMap;
+    public Map<String, String> getSystem_attrmap() {
+        return system_attrmap;
+    }
+    public void setSystem_attrmap(Map<String, String> system_attrmap) {
+        this.system_attrmap = system_attrmap;
+    }
+
+    public void setMpmEnumMap(Map<String, List<EnumVO>> mpmEnumMap) {
+        this.mpmEnumMap = mpmEnumMap;
+    }
+
+    public Map<String, List<EnumVO>> getMpmEnumMap() {
+        return mpmEnumMap;
+    }
+
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/BackXml.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/BackXml.java
new file mode 100644
index 0000000..a9b0de6
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/BackXml.java
@@ -0,0 +1,42 @@
+package org.springblade.code.utils;
+
+import java.util.List;
+
+public class BackXml{
+    private List<XmlData> datas;
+    public String state;//鍏跺疄灏辨槸datacode锛屼篃鏄痗ode
+    public String msg;//鍏跺疄灏辨槸datamsg
+
+    public List<XmlData> getDatas() {
+        return datas;
+    }
+
+    public void setDatas(List<XmlData> datas) {
+        this.datas = datas;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String toString() {
+        return "BackXml{" +
+                "datas=" + datas +
+                ", state='" + state + '\'' +
+                ", msg='" + msg + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/DateUtils.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/DateUtils.java
new file mode 100644
index 0000000..fa59d49
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/DateUtils.java
@@ -0,0 +1,527 @@
+package org.springblade.code.utils;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+/**
+ * yyyy-MM-dd HH:mm:ss
+ *
+ */
+public class DateUtils {
+
+    /** 骞�-鏈�-鏃� 鏃�:鍒�:绉� 鏄剧ず鏍煎紡 */
+    // 澶囨敞:濡傛灉浣跨敤澶у啓HH鏍囪瘑浣跨敤24灏忔椂鏄剧ず鏍煎紡,濡傛灉浣跨敤灏忓啓hh灏辫〃绀轰娇鐢�12灏忔椂鍒舵牸寮忋��
+    public static String DATE_TO_STRING_DETAIAL_PATTERN = "yyyy-MM-dd HH:mm:ss";
+
+    /** 骞�-鏈�-鏃� 鏄剧ず鏍煎紡 */
+    public static String DATE_TO_STRING_SHORT_PATTERN = "yyyy-MM-dd";
+
+    /**
+     * 鎶婃棩鏈熷瓧绗︿覆鏍煎紡鍖栨垚鏃ユ湡绫诲瀷锛岄粯璁yyy-MM-dd HH:mm:ss
+     * @param dateStr
+     * @return
+     */
+    public static Date convert2Date(String dateStr) {
+        return convert2Date(dateStr,DATE_TO_STRING_DETAIAL_PATTERN);
+    }
+
+    /**
+     * 鎶婃棩鏈熷瓧绗︿覆鏍煎紡鍖栨垚鏃ユ湡绫诲瀷
+     * @param dateStr
+     * @param format
+     * @return
+     */
+    public static Date convert2Date(String dateStr, String format) {
+        SimpleDateFormat simple = new SimpleDateFormat(format);
+        try {
+            simple.setLenient(false);
+            return simple.parse(dateStr);
+        } catch (Exception e) {
+            return  null;
+        }
+    }
+
+
+    /**
+     * 鎶婃棩鏈熺被鍨嬫牸寮忓寲鎴愬瓧绗︿覆
+     * @param date
+     * @param format
+     * @return
+     */
+    public static String convert2String(Date date, String format) {
+        SimpleDateFormat formater = new SimpleDateFormat(format);
+        try {
+            return formater.format(date);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /**
+     * 杞瑂ql鐨則ime鏍煎紡
+     * @param date
+     * @return
+     */
+    public static java.sql.Timestamp convertSqlTime(Date date){
+        java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());
+        return timestamp;
+    }
+
+    /**
+     * 杞瑂ql鐨勬棩鏈熸牸寮�
+     * @param date
+     * @return
+     */
+    public static java.sql.Date convertSqlDate(Date date){
+        java.sql.Date Datetamp = new java.sql.Date(date.getTime());
+        return Datetamp;
+    }
+
+
+    /**
+     * 鑾峰彇褰撳墠鏃ユ湡,榛樿yyyy-MM-dd HH:mm:ss
+     * @return
+     */
+    public static String getCurrentDate() {
+        return getCurrentDate(DATE_TO_STRING_DETAIAL_PATTERN);
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鏃ユ湡
+     * @param format
+     * @return
+     */
+    public static String getCurrentDate(String format) {
+        return new SimpleDateFormat(format).format(new Date());
+    }
+
+    /**
+     * 鑾峰彇鏃堕棿鎴�
+     * @return
+     */
+    public static long getTimestamp()
+    {
+        return System.currentTimeMillis();
+    }
+
+    /**
+     * 鏃堕棿瀛楃涓茶浆鏃堕棿鎴�
+     */
+    public static long stringToTimestamp(String str){
+        long time = 0;
+        try {
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date date = simpleDateFormat.parse(str);
+            time = date.getTime();
+        }catch (Exception e){
+
+        }
+        return time;
+    }
+
+    /**
+     * 鑾峰彇鏈堜唤鐨勫ぉ鏁�
+     * @param year
+     * @param month
+     * @return
+     */
+    public static int getDaysOfMonth(int year, int month) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(year, month - 1, 1);
+        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勫勾
+     * @param date
+     * @return
+     */
+    public static int getYear(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.YEAR);
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勬湀
+     * @param date
+     * @return
+     */
+    public static int getMonth(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.MONTH) + 1;
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勬棩
+     * @param date
+     * @return
+     */
+    public static int getDay(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.DATE);
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勬椂
+     * @param date
+     * @return
+     */
+    public static int getHour(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.HOUR);
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勫垎绉�
+     * @param date
+     * @return
+     */
+    public static int getMinute(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.MINUTE);
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鐨勭
+     * @param date
+     * @return
+     */
+    public static int getSecond(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.SECOND);
+    }
+
+    /**
+     * 鑾峰彇鏄熸湡鍑�
+     * @param date
+     * @return
+     */
+    public static int getWeekDay(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
+        return dayOfWeek-1;
+    }
+
+    /**
+     * 鑾峰彇鍝竴骞村叡鏈夊灏戝懆
+     * @param year
+     * @return
+     */
+    public static int getMaxWeekNumOfYear(int year) {
+        Calendar c = new GregorianCalendar();
+        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
+        return getWeekNumOfYear(c.getTime());
+    }
+
+    /**
+     * 鍙栧緱鏌愬ぉ鏄竴骞翠腑鐨勫灏戝懆
+     * @param date
+     * @return
+     */
+    public static int getWeekNumOfYear(Date date) {
+        Calendar c = new GregorianCalendar();
+        c.setFirstDayOfWeek(Calendar.MONDAY);
+        c.setMinimalDaysInFirstWeek(7);
+        c.setTime(date);
+        return c.get(Calendar.WEEK_OF_YEAR);
+    }
+
+    /**
+     * 鍙栧緱鏌愬ぉ鎵�鍦ㄥ懆鐨勭涓�澶�
+     * @param date
+     * @return
+     */
+    public static Date getFirstDayOfWeek(Date date) {
+        Calendar c = new GregorianCalendar();
+        c.setFirstDayOfWeek(Calendar.MONDAY);
+        c.setTime(date);
+        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
+        return c.getTime();
+    }
+
+    /**
+     * 鍙栧緱鏌愬ぉ鎵�鍦ㄥ懆鐨勬渶鍚庝竴澶�
+     * @param date
+     * @return
+     */
+    public static Date getLastDayOfWeek(Date date) {
+        Calendar c = new GregorianCalendar();
+        c.setFirstDayOfWeek(Calendar.MONDAY);
+        c.setTime(date);
+        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
+        return c.getTime();
+    }
+
+    /**
+     * 鍙栧緱鏌愬勾鏌愬懆鐨勭涓�澶� 瀵逛簬浜ゅ弶:2008-12-29鍒�2009-01-04灞炰簬2008骞寸殑鏈�鍚庝竴鍛�,2009-01-05涓�2009骞寸涓�鍛ㄧ殑绗竴澶�
+     * @param year
+     * @param week
+     * @return
+     */
+    public static Date getFirstDayOfWeek(int year, int week) {
+        Calendar calFirst = Calendar.getInstance();
+        calFirst.set(year, 0, 7);
+        Date firstDate = getFirstDayOfWeek(calFirst.getTime());
+
+        Calendar firstDateCal = Calendar.getInstance();
+        firstDateCal.setTime(firstDate);
+
+        Calendar c = new GregorianCalendar();
+        c.set(Calendar.YEAR, year);
+        c.set(Calendar.MONTH, Calendar.JANUARY);
+        c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));
+
+        Calendar cal = (GregorianCalendar) c.clone();
+        cal.add(Calendar.DATE, (week - 1) * 7);
+        firstDate = getFirstDayOfWeek(cal.getTime());
+
+        return firstDate;
+    }
+
+    /**
+     * 鍙栧緱鏌愬勾鏌愬懆鐨勬渶鍚庝竴澶� 瀵逛簬浜ゅ弶:2008-12-29鍒�2009-01-04灞炰簬2008骞寸殑鏈�鍚庝竴鍛�, 2009-01-04涓�
+     * 2008骞存渶鍚庝竴鍛ㄧ殑鏈�鍚庝竴澶�
+     * @param year
+     * @param week
+     * @return
+     */
+    public static Date getLastDayOfWeek(int year, int week) {
+        Calendar calLast = Calendar.getInstance();
+        calLast.set(year, 0, 7);
+        Date firstDate = getLastDayOfWeek(calLast.getTime());
+
+        Calendar firstDateCal = Calendar.getInstance();
+        firstDateCal.setTime(firstDate);
+
+        Calendar c = new GregorianCalendar();
+        c.set(Calendar.YEAR, year);
+        c.set(Calendar.MONTH, Calendar.JANUARY);
+        c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));
+
+        Calendar cal = (GregorianCalendar) c.clone();
+        cal.add(Calendar.DATE, (week - 1) * 7);
+        Date lastDate = getLastDayOfWeek(cal.getTime());
+
+        return lastDate;
+    }
+
+
+    private static Date add(Date date, int calendarField, int amount) {
+        if (date == null) {
+            throw new IllegalArgumentException("The date must not be null");
+        } else {
+            Calendar c = Calendar.getInstance();
+            c.setTime(date);
+            c.add(calendarField, amount);
+            return c.getTime();
+        }
+    }
+
+    /*
+     * 1鍒欎唬琛ㄧ殑鏄骞翠唤鎿嶄綔锛� 2鏄鏈堜唤鎿嶄綔锛� 3鏄鏄熸湡鎿嶄綔锛� 5鏄鏃ユ湡鎿嶄綔锛� 11鏄灏忔椂鎿嶄綔锛� 12鏄鍒嗛挓鎿嶄綔锛� 13鏄绉掓搷浣滐紝
+     * 14鏄姣鎿嶄綔
+     */
+
+    /**
+     * 澧炲姞骞�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addYears(Date date, int amount) {
+        return add(date, 1, amount);
+    }
+
+    /**
+     * 澧炲姞鏈�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addMonths(Date date, int amount) {
+        return add(date, 2, amount);
+    }
+
+    /**
+     * 澧炲姞鍛�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addWeeks(Date date, int amount) {
+        return add(date, 3, amount);
+    }
+
+    /**
+     * 澧炲姞澶�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addDays(Date date, int amount) {
+        return add(date, 5, amount);
+    }
+
+    /**
+     * 澧炲姞鏃�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addHours(Date date, int amount) {
+        return add(date, 11, amount);
+    }
+
+    /**
+     * 澧炲姞鍒�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addMinutes(Date date, int amount) {
+        return add(date, 12, amount);
+    }
+
+    /**
+     * 澧炲姞绉�
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addSeconds(Date date, int amount) {
+        return add(date, 13, amount);
+    }
+
+    /**
+     * 澧炲姞姣
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addMilliseconds(Date date, int amount) {
+        return add(date, 14, amount);
+    }
+
+
+
+    /**
+     * time宸�
+     * @param before
+     * @param after
+     * @return
+     */
+    public static long diffTimes(Date before, Date after){
+        return after.getTime() - before.getTime();
+    }
+
+    /**
+     * 绉掑樊
+     * @param before
+     * @param after
+     * @return
+     */
+    public static long diffSecond(Date before, Date after){
+        return (after.getTime() - before.getTime())/1000;
+    }
+
+    /**
+     * 鍒嗙宸�
+     * @param before
+     * @param after
+     * @return
+     */
+    public static int diffMinute(Date before, Date after){
+        return (int)(after.getTime() - before.getTime())/1000/60;
+    }
+
+    /**
+     * 鏃跺樊
+     * @param before
+     * @param after
+     * @return
+     */
+    public static int diffHour(Date before, Date after){
+        return (int)(after.getTime() - before.getTime())/1000/60/60;
+    }
+
+    /**
+     * 澶╂暟宸�
+     * @param before
+     * @param after
+     * @return
+     */
+    public static int diffDay(Date before, Date after) {
+        return Integer.parseInt(String.valueOf(((after.getTime() - before.getTime()) / 86400000)));
+    }
+
+    /**
+     * 鏈堝樊
+     * @param before
+     * @param after
+     * @return
+     */
+    public static int diffMonth(Date before, Date after){
+        int monthAll=0;
+        int yearsX = diffYear(before,after);
+        Calendar c1 = Calendar.getInstance();
+        Calendar c2 = Calendar.getInstance();
+        c1.setTime(before);
+        c2.setTime(after);
+        int monthsX = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
+        monthAll=yearsX*12+monthsX;
+        int daysX =c2.get(Calendar.DATE) - c1.get(Calendar.DATE);
+        if(daysX>0){
+            monthAll=monthAll+1;
+        }
+        return monthAll;
+    }
+
+    /**
+     * 骞村樊
+     * @param before
+     * @param after
+     * @return
+     */
+    public static int diffYear(Date before, Date after) {
+        return getYear(after) - getYear(before);
+    }
+
+    /**
+     * 璁剧疆23:59:59
+     * @param date
+     * @return
+     */
+    public static Date setEndDay(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        return calendar.getTime();
+    }
+
+    /**
+     * 璁剧疆00:00:00
+     * @param date
+     * @return
+     */
+    public static Date setStartDay(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, 00);
+        calendar.set(Calendar.MINUTE, 00);
+        calendar.set(Calendar.SECOND, 00);
+        return calendar.getTime();
+    }
+
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/EnumVO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/EnumVO.java
new file mode 100644
index 0000000..58ea4cc
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/EnumVO.java
@@ -0,0 +1,25 @@
+package org.springblade.code.utils;
+
+public class EnumVO{
+    /***
+     *
+     */
+    private String enumText;
+    private String enumValue;
+
+    public String getEnumText() {
+        return enumText;
+    }
+
+    public void setEnumText(String enumText) {
+        this.enumText = enumText;
+    }
+
+    public String getEnumValue() {
+        return enumValue;
+    }
+
+    public void setEnumValue(String enumValue) {
+        this.enumValue = enumValue;
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/HttpUtils.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/HttpUtils.java
new file mode 100644
index 0000000..aeb2952
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/HttpUtils.java
@@ -0,0 +1,194 @@
+package org.springblade.code.utils;
+
+import org.springframework.http.*;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * http璇锋眰宸ュ叿绫�
+ *
+ * @since 2020-03-25
+ */
+public class HttpUtils {
+
+    //Content-Type鐨刱ey
+    public static String CONTENT_TYPE = "Content-Type";
+    //json鏁版嵁
+    public static String CONTENT_TYPE_JSON = MediaType.APPLICATION_JSON_VALUE;
+    public static String CONTENT_TYPE_JSON_UTF8 = MediaType.APPLICATION_JSON_UTF8_VALUE;
+
+    //琛ㄥ崟鏍煎紡,榛樿
+    public static String CONTENT_TYPE_TEXT = MediaType.APPLICATION_FORM_URLENCODED_VALUE;
+
+    /**
+     * get璇锋眰
+     *
+     * @param url
+     * @return
+     */
+    public static String get(String url) {
+        return get(url, null);
+    }
+
+    /**
+     * get璇锋眰
+     *
+     * @param url
+     * @param headers 璇锋眰澶�
+     * @return
+     */
+    public static String get(String url, MultiValueMap<String, String> headers) {
+        return request(url, null, headers, HttpMethod.GET);
+    }
+
+    /**
+     * post璇锋眰
+     *
+     * @param url
+     * @param params 璇锋眰鍙傛暟
+     * @return
+     */
+    public static String post(String url, MultiValueMap<String, String> params) {
+        return post(url, params, null);
+    }
+
+    /**
+     * post璇锋眰
+     *
+     * @param url
+     * @param params  璇锋眰鍙傛暟
+     * @param headers 璇锋眰澶�
+     * @return
+     */
+    public static String post(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
+        return request(url, params, headers, HttpMethod.POST);
+    }
+
+    /**
+     * put璇锋眰
+     *
+     * @param url
+     * @param params 璇锋眰鍙傛暟
+     * @return
+     */
+    public static String put(String url, MultiValueMap<String, String> params) {
+        return put(url, params, null);
+    }
+
+    /**
+     * put璇锋眰
+     *
+     * @param url
+     * @param params  璇锋眰鍙傛暟
+     * @param headers 璇锋眰澶�
+     * @return
+     */
+    public static String put(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
+        return request(url, params, headers, HttpMethod.PUT);
+    }
+
+    /**
+     * delete璇锋眰
+     *
+     * @param url
+     * @param params 璇锋眰鍙傛暟
+     * @return
+     */
+    public static String delete(String url, MultiValueMap<String, String> params) {
+        return delete(url, params, null);
+    }
+
+    /**
+     * delete璇锋眰
+     *
+     * @param url
+     * @param params  璇锋眰鍙傛暟
+     * @param headers 璇锋眰澶�
+     * @return
+     */
+    public static String delete(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
+        return request(url, params, headers, HttpMethod.DELETE);
+    }
+
+    /**
+     * 琛ㄥ崟璇锋眰
+     *
+     * @param url
+     * @param params  璇锋眰鍙傛暟
+     * @param headers 璇锋眰澶�
+     * @param method  璇锋眰鏂瑰紡
+     * @return
+     */
+    public static String request(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers, HttpMethod method) {
+        if (params == null) {
+            params = new LinkedMultiValueMap<>();
+        }
+        return request(url, params, headers, method, MediaType.APPLICATION_FORM_URLENCODED);
+    }
+
+    /**
+     * http璇锋眰
+     *
+     * @param url
+     * @param params    璇锋眰鍙傛暟
+     * @param headers   璇锋眰澶�
+     * @param method    璇锋眰鏂瑰紡
+     * @param mediaType 鍙傛暟绫诲瀷
+     * @return
+     */
+    public static String request(String url, Object params, MultiValueMap<String, String> headers, HttpMethod method, MediaType mediaType) {
+        if (url == null || url.trim().isEmpty()) {
+            return null;
+        }
+        RestTemplate client = new RestTemplate();
+        // header
+        HttpHeaders httpHeaders = new HttpHeaders();
+        if (headers != null) {
+            httpHeaders.addAll(headers);
+        }
+        // 鎻愪氦鏂瑰紡锛氳〃鍗曘�乯son
+        httpHeaders.setContentType(mediaType);
+        HttpEntity<Object> httpEntity = new HttpEntity(params, httpHeaders);
+        ResponseEntity<String> response = client.exchange(url, method, httpEntity, String.class);
+        return response.getBody();
+    }
+
+    public static MultiValueMap<String, String> set_params_headers(String key,String value,MultiValueMap<String, String> map){
+        if(map==null){
+            map = new LinkedMultiValueMap<>();
+        }
+        map.add(key,value);
+        return map;
+    }
+    /**
+     * 鑾峰彇ip
+     * @param request
+     * @return
+     */
+    public static String getIpAddressFromRequest(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) {
+            //0:0:0:0:0:0:0:1鏄湰鏈哄湪璁块棶
+            ip = "127.0.0.1";
+        }
+        return ip;
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Json2XmlUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Json2XmlUtil.java
new file mode 100644
index 0000000..ce153c0
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Json2XmlUtil.java
@@ -0,0 +1,121 @@
+package org.springblade.code.utils;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import de.odysseus.staxon.json.JsonXMLConfig;
+import de.odysseus.staxon.json.JsonXMLConfigBuilder;
+import de.odysseus.staxon.json.JsonXMLOutputFactory;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLEventWriter;
+import javax.xml.stream.XMLInputFactory;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class Json2XmlUtil {
+
+    /**
+     * @Description: xml convert to json
+     */
+    public static String XmlToJson(String xmlString){
+
+        StringReader input = new StringReader(xmlString);
+        StringWriter output = new StringWriter();
+        try {
+            JsonXMLConfig config = new JsonXMLConfigBuilder().autoArray(true).autoPrimitive(true).prettyPrint(true).build();
+            XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(input);
+            XMLEventWriter writer = new JsonXMLOutputFactory(config).createXMLEventWriter(output);
+            writer.add(reader);
+            reader.close();
+            writer.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                output.close();
+                input.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return output.toString();
+    }
+
+    public static String replaceBlank(String jsonString) {
+        if(StringUtils.isEmpty(jsonString)){
+            return jsonString;
+        }
+        Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+        Matcher m = p.matcher(jsonString);
+        String dest = m.replaceAll("");
+        return dest;
+    }
+
+    public static String jsontoxml(JSONObject jo, String gt) {
+        StringBuffer xmlStr = new StringBuffer();
+        Iterator<Map.Entry<String, Object>> iter = jo.entrySet().iterator();
+        while (iter.hasNext()) {
+            Map.Entry<String, Object> entry = (Map.Entry<String, Object>) iter.next();
+            String key = entry.getKey().toString();
+            String val = entry.getValue().toString();
+            //鍊奸潪绌�
+            if (StringUtils.isNotEmpty(val)) {
+                //JSON瀵硅薄
+                if (val.substring(0, 1).equals("{")) {
+                    xmlStr.append(gt);
+                    xmlStr.append("<");
+                    xmlStr.append(key);
+                    xmlStr.append(">");
+                    xmlStr.append(jsontoxml(JSONObject.parseObject(val), gt + ""));
+                    xmlStr.append(gt);
+                    xmlStr.append("</");
+                    xmlStr.append(key);
+                    xmlStr.append(">");
+                }
+                //JSON鏁扮粍
+                else if (val.substring(0, 1).equals("[")) {
+                    JSONArray ja = JSONArray.parseArray(val);
+                    for (int i = 0; i < ja.size(); i++) {
+                        JSONObject jo2 = new JSONObject();
+                        jo2.put(key, ja.getJSONObject(i));
+                        xmlStr.append(jsontoxml(jo2, gt + ""));
+                    }
+                }
+                //JSON鍊�
+                else {
+                    xmlStr.append(gt);
+                    xmlStr.append("<");
+                    xmlStr.append(key);
+                    xmlStr.append(">");
+                    xmlStr.append(val);
+                    xmlStr.append("</");
+                    xmlStr.append(key);
+                    xmlStr.append(">");
+                }
+            }
+            //鍊间负绌�
+            else{
+                xmlStr.append(gt);
+                xmlStr.append("<");
+                xmlStr.append(key);
+                xmlStr.append(">");
+                xmlStr.append("");
+                xmlStr.append("</");
+                xmlStr.append(key);
+                xmlStr.append(">");
+            }
+        }
+        return xmlStr.toString();
+    }
+
+    public static String jsonToXml(JSONObject jo0) {
+        String xml = jsontoxml(jo0, "");
+        return xml;
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/PatternUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/PatternUtil.java
new file mode 100644
index 0000000..72b4d7d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/PatternUtil.java
@@ -0,0 +1,49 @@
+package org.springblade.code.utils;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class PatternUtil {
+
+    //*${xxx}*
+    public static Pattern dynamic = Pattern.compile(".*\\$\\{([a-z]+)\\}.*");
+    public static Pattern dynamicLimitCount = Pattern.compile("\\$\\{([a-z]+)\\}");
+    /**
+     * 鍒ゆ柇鍐呭涓槸鍚﹀寘鍚姩鎬佸弬鏁�(${key}褰㈠紡鐨�)
+     *
+     * @param content 瑕佸垽鏂殑鍐呭
+     * @return
+     */
+    public static boolean isContainsDynamicParameter(String content) {
+        if(StringUtils.isBlank(content)){
+            return false;
+        }
+        return dynamic.matcher(content).matches();
+    }
+
+    /**
+     * 鎸夌収鍔ㄦ�佸唴瀹圭殑鍙傛暟鍑虹幇椤哄簭,灏嗗弬鏁版斁鍒癓ist涓�
+     *
+     * @param content
+     * @return
+     */
+    public static List<String> getKeyListByContent(String content) {
+        if(StringUtils.isBlank(content)){
+            return new ArrayList<>();
+        }
+        Set<String> paramSet = new LinkedHashSet<>();
+        Matcher m = dynamicLimitCount.matcher(content);
+        while (m.find()) {
+            paramSet.add(m.group(1));
+        }
+        return new ArrayList<>(paramSet);
+    }
+
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Pro.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Pro.java
new file mode 100644
index 0000000..ccbc71f
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/Pro.java
@@ -0,0 +1,40 @@
+package org.springblade.code.utils;
+
+public class Pro{
+    public String key;
+    public String mean;
+    public String value;
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getMean() {
+        return mean;
+    }
+
+    public void setMean(String mean) {
+        this.mean = mean;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return "Pro{" +
+                "key='" + key + '\'' +
+                ", mean='" + mean + '\'' +
+                ", value='" + value + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsAxis2ClientUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsAxis2ClientUtil.java
new file mode 100644
index 0000000..e935e63
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsAxis2ClientUtil.java
@@ -0,0 +1,59 @@
+package org.springblade.code.utils;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.commons.lang3.StringUtils;
+
+public class WsAxis2ClientUtil {
+
+    /**
+     * axis2璋冪敤瀹㈡埛绔�
+     *
+     * @param url                   璇锋眰鏈嶅姟鍦板潃
+     * @param nameSpace             鍛藉悕绌洪棿
+     * @param method                鏂规硶鍚�
+     * @param tarName                鍙傛暟鍚嶇О
+     * @param xmlData                璇锋眰鎶ユ枃
+     * @param timeOutInMilliSeconds 瓒呮椂鏃堕棿
+     * @return String 绫诲瀷鐨勫搷搴旀姤鎭�
+     */
+    public static String sendMsg(String url, String nameSpace,String soapAction, String method, String tarName, String xmlData, long timeOutInMilliSeconds) throws Exception {
+        ServiceClient serviceClient = new ServiceClient();
+        Options option = new Options();
+        option.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+        option.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+
+        // 鍊间负targetNamespace+methodName
+        if(StringUtils.isEmpty(soapAction)){
+            soapAction = nameSpace+method;
+        }
+        option.setAction(soapAction);
+
+        EndpointReference epfs = new EndpointReference(url);
+        option.setTo(epfs);
+        serviceClient.setOptions(option);
+
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMNamespace namespaceOM = fac.createOMNamespace(nameSpace, "");
+        OMElement element = fac.createOMElement(method, namespaceOM);
+        OMElement theCityCode = fac.createOMElement(tarName, namespaceOM);
+        theCityCode.setText(xmlData);
+        element.addChild(theCityCode);
+//        OMElement theUserID = fac.createOMElement("theUserID ", namespace);
+//        theUserID.setText("");
+//        element.addChild(theUserID);
+
+        OMElement resultOM = serviceClient.sendReceive(element);
+
+        String result = resultOM.getFirstElement().getText();
+        System.out.println(result);
+        return result;
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsErpClientUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsErpClientUtil.java
new file mode 100644
index 0000000..2c23c8a
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/WsErpClientUtil.java
@@ -0,0 +1,59 @@
+package org.springblade.code.utils;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.commons.lang3.StringUtils;
+
+public class WsErpClientUtil {
+
+    /**
+     * axis2璋冪敤瀹㈡埛绔�
+     *
+     * @param url                   璇锋眰鏈嶅姟鍦板潃
+     * @param nameSpace             鍛藉悕绌洪棿
+     * @param method                鏂规硶鍚�
+     * @param tarName                鍙傛暟鍚嶇О
+     * @param xmlData                璇锋眰鎶ユ枃
+     * @param timeOutInMilliSeconds 瓒呮椂鏃堕棿
+     * @return String 绫诲瀷鐨勫搷搴旀姤鎭�
+     */
+    public static String sendMsg(String url, String nameSpace,String soapAction, String method, String tarName, String xmlData, long timeOutInMilliSeconds) throws Exception {
+        ServiceClient serviceClient = new ServiceClient();
+        Options option = new Options();
+        option.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+        option.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+
+        // 鍊间负targetNamespace+methodName
+        if(StringUtils.isEmpty(soapAction)){
+            soapAction = nameSpace+method;
+        }
+        option.setAction(soapAction);
+
+        EndpointReference epfs = new EndpointReference(url);
+        option.setTo(epfs);
+        serviceClient.setOptions(option);
+
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMNamespace namespaceOM = fac.createOMNamespace(nameSpace, "");
+        OMElement element = fac.createOMElement(method, namespaceOM);
+        OMElement theCityCode = fac.createOMElement(tarName, namespaceOM);
+        theCityCode.setText(xmlData);
+        element.addChild(theCityCode);
+//        OMElement theUserID = fac.createOMElement("theUserID ", namespace);
+//        theUserID.setText("");
+//        element.addChild(theUserID);
+
+        OMElement resultOM = serviceClient.sendReceive(element);
+
+        String result = resultOM.getFirstElement().getText();
+        System.out.println(result);
+        return result;
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlData.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlData.java
new file mode 100644
index 0000000..0db27e5
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlData.java
@@ -0,0 +1,143 @@
+package org.springblade.code.utils;
+
+import java.util.List;
+
+public class XmlData{
+    public String unique;
+    public String type;//鍒嗙被缂栧彿
+    public String sendtype;//鎺ㄩ�佹暟鎹被鍨�
+    public String state;//鍏跺疄灏辨槸datacode锛屼篃鏄痗ode
+    public String msg;//鍏跺疄灏辨槸datamsg
+    public String num;
+    public String namepath;
+    public String name;
+    public String idpath;
+    public String id;
+    public Integer orderNum;
+    public String parentId;
+    public List<Pro> pros;
+
+
+    public String getUnique() {
+        return unique;
+    }
+
+    public void setUnique(String unique) {
+        this.unique = unique;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public String getNum() {
+        return num;
+    }
+
+    public void setNum(String num) {
+        this.num = num;
+    }
+
+    public String getNamepath() {
+        return namepath;
+    }
+
+    public void setNamepath(String namepath) {
+        this.namepath = namepath;
+    }
+
+    public String getIdpath() {
+        return idpath;
+    }
+
+    public void setIdpath(String idpath) {
+        this.idpath = idpath;
+    }
+
+    public List<Pro> getPros() {
+        return pros;
+    }
+
+    public String getSendtype() {
+        return sendtype;
+    }
+
+    public void setSendtype(String sendtype) {
+        this.sendtype = sendtype;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public void setPros(List<Pro> pros) {
+        this.pros = pros;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public int getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(int orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public String getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(String parentId) {
+        this.parentId = parentId;
+    }
+
+    @Override
+    public String toString() {
+        return "XmlData{" +
+                "unique='" + unique + '\'' +
+                ", type='" + type + '\'' +
+                ", sendtype='" + sendtype + '\'' +
+                ", state='" + state + '\'' +
+                ", msg='" + msg + '\'' +
+                ", num='" + num + '\'' +
+                ", namepath='" + namepath + '\'' +
+                ", name='" + name + '\'' +
+                ", idpath='" + idpath + '\'' +
+                ", id='" + id + '\'' +
+                ", orderNum='" + orderNum + '\'' +
+                ", parentId='" + parentId + '\'' +
+                ", pros=" + pros +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlUtil.java
new file mode 100644
index 0000000..e9e5da2
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlUtil.java
@@ -0,0 +1,769 @@
+package org.springblade.code.utils;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.dom4j.Attribute;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.XMLWriter;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.vci.mdm.constant.MdmDuckingConstant.*;
+
+public class XmlUtil {
+    /*
+    绗竴鐗堟湰
+     */
+    public static Map<String,Object> readPreXml_bak(String xmlData) throws Exception{
+
+        Map<String,Object> datasMap = new HashMap<String,Object>();
+
+        Document document = DocumentHelper.parseText(xmlData);
+        Element datas_element = document.getRootElement();
+        Attribute datas_systemid_attr = datas_element.attribute(XML_SYSTEMID);
+        String systemid = datas_systemid_attr==null?"":datas_systemid_attr.getValue();//systemid
+
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        List<Map<String,Object>> dataMapList = new ArrayList<Map<String,Object>>();
+        for (Element data_element:data_elements){
+            Map<String,Object> dataMap = new HashMap<String,Object>();
+
+            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
+            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
+
+            Attribute data_type_attr = data_element.attribute(XML_TYPE);
+            String type = data_type_attr==null?"":data_type_attr.getValue();//type
+
+            Element pro_elements = data_element.element(XML_PROS);
+            List<Element> attrs_elements = pro_elements.elements(XML_ATTR);
+
+            List<Map<String,String>> attrList = new ArrayList<Map<String,String>>();
+            for (Element attr_element:attrs_elements){
+                Map<String,String> attrMap = new HashMap<String,String>();
+
+                Attribute attr_key_attr = attr_element.attribute(XML_KEY);
+                String attr_key = attr_key_attr==null?"":attr_key_attr.getValue();//key
+
+                Attribute attr_mean_attr = attr_element.attribute(XML_MEAN);
+                String attr_mean = attr_mean_attr==null?"":attr_mean_attr.getValue();//mean
+
+                String attr_text = attr_element.getText();
+
+                attrMap.put(XML_KEY,attr_key);
+                attrMap.put(XML_MEAN,attr_mean);
+                attrMap.put(XML_TEXT,attr_text);
+                attrList.add(attrMap);
+            }
+            dataMap.put(XML_UNIQUE,unique);
+            dataMap.put(XML_TYPE,type);
+            dataMap.put(XML_ATTR,attrList);
+
+            dataMapList.add(dataMap);
+
+            datasMap.put(XML_SYSTEMID,systemid);
+            datasMap.put(XML_DATAS,dataMapList);
+        }
+        return datasMap;
+    }
+
+    public static String writePreBackXmlData_bak(String code,String msg,List<XmlData> xmlDataList){
+        String xmlString = null;
+        try {
+            Document document = DocumentHelper.createDocument();
+            document.setXMLEncoding("UTF-8");
+            Element root = document.addElement(XML_DATAS);
+            root.addAttribute(XML_CODE, code);
+            root.addAttribute(XML_MSG, msg);
+            if(xmlDataList!=null) {
+                for (XmlData xmlData : xmlDataList) {
+                    if(xmlData==null){
+                        continue;
+                    }
+                    Element data_element = root.addElement(XML_DATA);
+                    data_element.addAttribute(XML_UNIQUE, xmlData.getUnique());
+                    data_element.addAttribute(XML_STATE, xmlData.getState());
+                    data_element.addAttribute(XML_MSG, xmlData.getMsg());
+                    data_element.addAttribute(XML_NUM, xmlData.getNum());
+                }
+            }
+            OutputFormat format = OutputFormat.createPrettyPrint();
+            XMLWriter writer = new XMLWriter(format);
+            writer.write(document);
+            xmlString=document.asXML();
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+        return xmlString;
+    }
+
+    /*
+    鏍规嵁閮ㄩ暱宸茬粡淇敼鐨勭涓�鐗�
+    <object>
+        <systemid>MPM</systemid>
+        <datas>
+            <data>
+                <unique>oa0001</unique>
+                <type>wupin</type>
+                <pros>
+                    <pro>
+                        <key>code01</key>
+                        <mean>鎵�灞炵粨鏋�</mean>
+                        <value>娓╁害璋冭妭鍣�1</value>
+                    </pro>
+                    <pro>
+                        <key>code02</key>
+                        <mean>涓昏鍔熻兘</mean>
+                        <value>瀵肩數杩炴帴1</value>
+                    </pro>
+                </pros>
+            </data>
+            <data>
+                <unique>oa0002</unique>
+                <type>wupin</type>
+                <pros>
+                    <pro>
+                        <key>code01</key>
+                        <mean>鎵�灞炵粨鏋�</mean>
+                        <value>娓╁害璋冭妭鍣�2</value>
+                    </pro>
+                    <pro>
+                        <key>code02</key>
+                        <mean>涓昏鍔熻兘</mean>
+                        <value>瀵肩數杩炴帴2</value>
+                    </pro>
+                </pros>
+            </data>
+        </datas>
+    </object>
+     */
+    public static Map<String,Object> readPreXml1(String xmlData) throws Exception{
+
+        Map<String,Object> datasMap = new HashMap<String,Object>();
+
+        Document document = DocumentHelper.parseText(xmlData);
+        Element object_element = document.getRootElement();
+        Element system_element = object_element.element(XML_SYSTEMID);
+        String systemid = system_element.getText();
+        Element datas_element = object_element.element(XML_DATAS);
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        List<Map<String,Object>> datasList = new ArrayList<Map<String,Object>>();
+        for (Element data_element:data_elements){
+            Map<String,Object> dataMap = new HashMap<String,Object>();
+
+            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
+            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
+
+            Attribute data_type_attr = data_element.attribute(XML_TYPE);
+            String type = data_type_attr==null?"":data_type_attr.getValue();//type
+
+            Element pros_elements = data_element.element(XML_PROS);
+            List<Element> pro_elements = pros_elements.elements(XML_PRO);
+
+            List<Map<String,String>> proList = new ArrayList<Map<String,String>>();
+            for (Element pro_element:pro_elements){
+                Map<String,String> proMap = new HashMap<String,String>();
+
+                Element pro_key_element = pro_element.element(XML_KEY);
+                String pro_key = pro_key_element==null?"":pro_key_element.getText();//key
+
+                Element pro_mean_element = pro_element.element(XML_MEAN);
+                String pro_mean = pro_mean_element==null?"":pro_mean_element.getText();//mean
+
+                String pro_text = pro_element.getText();
+
+                proMap.put(XML_KEY,pro_key);
+                proMap.put(XML_MEAN,pro_mean);
+                proMap.put(XML_TEXT,pro_text);
+                proList.add(proMap);
+            }
+            dataMap.put(XML_UNIQUE,unique);
+            dataMap.put(XML_TYPE,type);
+            dataMap.put(XML_PROS,proList);
+
+            datasList.add(dataMap);
+
+            datasMap.put(XML_SYSTEMID,systemid);
+            datasMap.put(XML_DATAS,datasList);
+        }
+        return datasMap;
+    }
+
+    /*
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <msg>澶勭悊鎴愬姛</msg>
+        <code>200</code>
+        <datas>
+            <data>
+                <unique>oa0001</unique>
+                <datacode>200</datacode>
+                <datamsg>鏍规嵁鍥惧彿鏌ヨ缂栫爜鎴愬姛锛�</datamsg>
+                <num>OA-0002-01</num>
+            </data>
+            <data>
+                <unique>oa0002</unique>
+                <datacode>400</datacode>
+                <datamsg>鎺ユ敹鏁版嵁鎴愬姛锛�</datamsg>
+                <num/>
+            </data>
+            <data>
+                <unique>oa0003</unique>
+                <datacode>500</datacode>
+                <datamsg>鎺ユ敹鏁版嵁澶辫触锛屽弬鏁扮己灏憉nique锛�</datamsg>
+                <num/>
+            </data>
+        </datas>
+    </object>
+     */
+    public static String writePreBackXmlData1(String code,String msg,List<XmlData> xmlDataList){
+        String xmlString = null;
+        try {
+            Document document = DocumentHelper.createDocument();
+            document.setXMLEncoding("UTF-8");
+            Element object_element = document.addElement(XML_OBJECT);
+
+            Element code_element = object_element.addElement(XML_CODE);
+            code_element.setText(code);
+
+            Element msg_element = object_element.addElement(XML_MSG);
+            msg_element.setText(msg);
+
+            if(xmlDataList!=null) {
+                for (XmlData xmlData : xmlDataList) {
+                    if(xmlData==null){
+                        continue;
+                    }
+                    Element data_element = object_element.addElement(XML_DATA);
+
+                    Element unique_element = data_element.addElement(XML_UNIQUE);
+                    unique_element.setText(xmlData.getUnique());
+
+                    Element datacode_element = data_element.addElement(XML_DATACODE);
+                    datacode_element.setText(xmlData.getState());
+
+                    Element datacmsg_element = data_element.addElement(XML_DATAMSG);
+                    datacmsg_element.setText(xmlData.getMsg());
+
+                    Element num_element = data_element.addElement(XML_NUM);
+                    num_element.setText(xmlData.getNum());
+                }
+            }
+            OutputFormat format = OutputFormat.createPrettyPrint();
+            XMLWriter writer = new XMLWriter(format);
+            writer.write(document);
+            xmlString=document.asXML();
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+        return xmlString;
+    }
+
+    /*
+    閮ㄩ暱浜茶嚜鍔ㄦ墜淇敼鐨勭増鏈�
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object systemid="MPM">
+        <datas>
+            <data unique="oa0001" type="wupin">
+                <props>
+                    <prop key="code01" mean="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�1" />
+                    <prop key="code02" mean="涓昏鍔熻兘" value="瀵肩數杩炴帴1" />
+                </props>
+            </data>
+            <data unique="oa0002" type="wupin">
+                <props>
+                    <prop key="code01" mean="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�2" />
+                    <prop key="code02" mean="涓昏鍔熻兘" value="瀵肩數杩炴帴2" />
+                </props>
+            </data>
+        </datas>
+    </object>
+     */
+    public static Map<String,Object> readPreXmlData(String xmlData) throws Exception{
+
+        Map<String,Object> datasMap = new HashMap<String,Object>();
+
+        Document document = DocumentHelper.parseText(xmlData);
+        Element object_element = document.getRootElement();
+
+        Attribute systemid_attr = object_element.attribute(XML_SYSTEMID);
+        String systemid = systemid_attr.getValue();
+
+        Element datas_element = object_element.element(XML_DATAS);
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        List<Map<String,Object>> datasList = new ArrayList<Map<String,Object>>();
+        for (Element data_element:data_elements){
+            Map<String,Object> dataMap = new HashMap<String,Object>();
+
+            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
+            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
+
+            Attribute data_type_attr = data_element.attribute(XML_TYPE);
+            String type = data_type_attr==null?"":data_type_attr.getValue();//type
+
+            Element pros_elements = data_element.element(XML_PROS);
+            List<Element> pro_elements = pros_elements.elements(XML_PRO);
+
+            List<Map<String,String>> proList = new ArrayList<Map<String,String>>();
+            for (Element pro_element:pro_elements){
+                Map<String,String> proMap = new HashMap<String,String>();
+
+                Attribute pro_key_attr = pro_element.attribute(XML_KEY);
+                String pro_key = pro_key_attr==null?"":pro_key_attr.getValue();//key
+
+                pro_key = pro_key.toLowerCase();//鍏ㄩ兘杞崲涓哄皬鍐�
+
+                Attribute pro_mean_attr = pro_element.attribute(XML_MEAN);
+                String pro_mean = pro_mean_attr==null?"":pro_mean_attr.getValue();//mean
+
+                Attribute pro_value_attr = pro_element.attribute(XML_VALUE);
+                String pro_value = pro_value_attr==null?"":pro_value_attr.getValue();//mean
+
+                proMap.put(XML_KEY,pro_key);
+                proMap.put(XML_MEAN,pro_mean);
+                proMap.put(XML_TEXT,pro_value);
+                proList.add(proMap);
+            }
+            dataMap.put(XML_UNIQUE,unique);
+            dataMap.put(XML_TYPE,type);
+            dataMap.put(XML_PROS,proList);
+
+            datasList.add(dataMap);
+
+            datasMap.put(XML_SYSTEMID,systemid);
+            datasMap.put(XML_DATAS,datasList);
+        }
+        return datasMap;
+    }
+
+    /*
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <msg>澶勭悊鎴愬姛</msg>
+        <code>200</code>
+        <datas>
+            <data unique="oa0001" state="200" num="OA-0002-01">
+                <msg>鏍规嵁鍥惧彿鏌ヨ缂栫爜鎴愬姛锛�</msg>
+            </data>
+            <data unique="oa0002" state="400" num="">
+                <msg>鎺ユ敹鏁版嵁鎴愬姛锛�</msg>
+            </data>
+        </datas>
+    </object>
+     */
+    public static String writePreBackXmlData(String code,String msg,List<XmlData> xmlDataList){
+        String xmlString = null;
+        try {
+            Document document = DocumentHelper.createDocument();
+            document.setXMLEncoding("UTF-8");
+            Element object_element = document.addElement(XML_OBJECT);
+
+            Element code_element = object_element.addElement(XML_CODE);
+            code_element.setText(code);
+
+            Element msg_element = object_element.addElement(XML_MSG);
+            msg_element.setText(msg);
+
+            Element datas_element = object_element.addElement(XML_DATAS);
+
+            if(xmlDataList!=null) {
+                for (XmlData xmlData : xmlDataList) {
+                    if(xmlData==null){
+                        continue;
+                    }
+                    Element data_element = datas_element.addElement(XML_DATA);
+
+                    data_element.addAttribute(XML_UNIQUE,xmlData.getUnique());
+                    data_element.addAttribute(XML_STATE,xmlData.getState());
+                    data_element.addAttribute(XML_NUM,xmlData.getNum());
+
+                    Element datamsg_element = data_element.addElement(XML_MSG);
+                    datamsg_element.setText(xmlData.getMsg());
+                }
+            }
+            OutputFormat format = OutputFormat.createPrettyPrint();
+            XMLWriter writer = new XMLWriter(format);
+            writer.write(document);
+            xmlString=document.asXML();
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+        return xmlString;
+    }
+
+    /*
+    涓绘暟鎹帹閫佺殑xmlData鏍煎紡
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <datas>
+            <data unique="oa0002" type="wupin" state="3" num="01020000003">
+                <namepath>鐗╁搧#鎴愬搧鍙婇檮浠�</namepath>
+                <idpath>wuping#cpjfj</idpath>
+                <props>
+                    <prop key="code01" mean="鎵�灞炵粨鏋�" value="娓╁害璋冭妭鍣�2" />
+                    <prop key="code02" mean="涓昏鍔熻兘" value="瀵肩嚎杩炴帴2" />
+                </props>
+            </data>
+        </datas>
+    </object>
+     */
+    public static String writeSendXmlData(List<XmlData> xmlDataList) {
+        String xmlString = null;
+        try {
+            Document document = DocumentHelper.createDocument();
+            document.setXMLEncoding("UTF-8");
+            Element object_element = document.addElement(XML_OBJECT);
+
+            Element datas_element = object_element.addElement(XML_DATAS);
+
+            if (xmlDataList != null) {
+                for (XmlData xmlData : xmlDataList) {
+                    if (xmlData == null) {
+                        continue;
+                    }
+                    Element data_element = datas_element.addElement(XML_DATA);
+                    data_element.addAttribute(XML_UNIQUE, xmlData.getUnique());
+                    data_element.addAttribute(XML_TYPE, xmlData.getType());
+                    data_element.addAttribute(XML_STATE, xmlData.getSendtype());
+
+                    Element pros_element = data_element.addElement(XML_PROS);
+                    List<Pro> pros = xmlData.getPros();
+                    String lcstatue = null;
+                    String id = null;
+                    for (Pro pro : pros) {
+                        if("lcstatus".equals(pro.getKey())){
+                            lcstatue = pro.getValue();
+                        }
+                        if("id".equals(pro.getKey())){
+                            id = pro.getValue();
+                        }
+                        Element pro_element = pros_element.addElement(XML_PRO);
+                        pro_element.addAttribute(XML_KEY, pro.getKey());
+                        pro_element.addAttribute(XML_VALUE, pro.getValue());
+                        pro_element.addAttribute(XML_MEAN, pro.getKey());
+                    }
+                    if(StringUtils.isNotEmpty(lcstatue)){
+                        data_element.addAttribute(XML_STATE, lcstatue);
+                    }
+                    if(StringUtils.isNotEmpty(id)){
+                        data_element.addAttribute(XML_NUM, id);
+                    }
+
+                    Element pro_namepath_element = data_element.addElement(XML_NAMEPATH);
+                    pro_namepath_element.setText(xmlData.getNamepath());
+
+                    Element pro_idpath_element = data_element.addElement(XML_IDPATH);
+                    pro_idpath_element.setText(xmlData.getIdpath());
+                }
+            }
+            OutputFormat format = OutputFormat.createPrettyPrint();
+            XMLWriter writer = new XMLWriter(format);
+            writer.write(document);
+            xmlString = document.asXML();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return xmlString;
+    }
+
+    /*
+    鍒嗙被鏁版嵁鎺ㄩ�佺殑xmlData鏍煎紡
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <datas>
+            <data>
+                <id>shoutao</id>
+                <idpath>wuping#shoutao</idpath>
+                <name>鎵嬪</name>
+                <namepath>鐗╁搧#鎵嬪</namepath>
+                <orderNum>2</orderNum>
+                <parentId>wuping</parentId>
+            </data>
+        </datas>
+     </object>
+     */
+    public static String writeSendXmlData_classify(List<XmlData> xmlDataList) {
+        String xmlString = null;
+        try {
+            Document document = DocumentHelper.createDocument();
+            document.setXMLEncoding("UTF-8");
+            Element object_element = document.addElement(XML_OBJECT);
+
+            Element datas_element = object_element.addElement(XML_DATAS);
+
+            if (xmlDataList != null) {
+                for (XmlData xmlData : xmlDataList) {
+                    if (xmlData == null) {
+                        continue;
+                    }
+                    Element data_element = datas_element.addElement(XML_DATA);
+
+                    Element pro_name_element = data_element.addElement(XML_NAME);
+                    pro_name_element.setText(xmlData.getName());
+
+                    Element pro_namepath_element = data_element.addElement(XML_NAMEPATH);
+                    pro_namepath_element.setText(xmlData.getNamepath());
+
+                    Element pro_id_element = data_element.addElement(XML_ID);
+                    pro_id_element.setText(xmlData.getId());
+
+                    Element pro_idpath_element = data_element.addElement(XML_IDPATH);
+                    pro_idpath_element.setText(xmlData.getIdpath());
+
+                    Element pro_ordernum_element = data_element.addElement(XML_ORDERNUM);
+                    pro_ordernum_element.setText(xmlData.getOrderNum()+"");
+
+                    Element pro_parentid_element = data_element.addElement(XML_PARENTID);
+                    pro_parentid_element.setText(xmlData.getParentId()==null?"":xmlData.getParentId());
+
+                    Element pro_state_element = data_element.addElement(XML_STATE);
+                    pro_state_element.setText(xmlData.getSendtype());
+                }
+            }
+            OutputFormat format = OutputFormat.createPrettyPrint();
+            XMLWriter writer = new XMLWriter(format);
+            writer.write(document);
+            xmlString = document.asXML();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return xmlString;
+    }
+
+    /*
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <msg>澶勭悊鎴愬姛</msg>
+        <code>200</code>
+        <datas>
+        <data unique="oa0001" state="200" num="01020000001">
+            <msg>鎺ユ敹鏁版嵁鎴愬姛锛�</msg>
+        </data>
+        </datas>
+    </object>
+     */
+    public static BackXml readSendXmlData(String xmlData) throws Exception{
+
+        BackXml backXml = new BackXml();
+        Document document = DocumentHelper.parseText(xmlData);
+        Element object_element = document.getRootElement();
+
+        Element code_element = object_element.element(XML_CODE);
+        String code = code_element.getText();
+
+        Element msg_element = object_element.element(XML_MSG);
+        String msg = msg_element.getText();
+
+        Element datas_element = object_element.element(XML_DATAS);
+
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        List<XmlData> datasList = new ArrayList<XmlData>();
+        for (Element data_element:data_elements){
+            XmlData xmlData_return = new XmlData();
+
+            Attribute data_unique_attr = data_element.attribute(XML_UNIQUE);
+            String unique = data_unique_attr==null?"":data_unique_attr.getValue();//unique
+
+            Attribute data_state_attr = data_element.attribute(XML_STATE);
+            String state = data_state_attr==null?"":data_state_attr.getValue();//state
+
+            Attribute data_num_attr = data_element.attribute(XML_NUM);
+            String num = data_num_attr==null?"":data_num_attr.getValue();//num
+
+            Element data_msg_elements = data_element.element(XML_MSG);
+            String datamsg = data_msg_elements==null?"":data_msg_elements.getText();//msg
+
+            xmlData_return.setUnique(unique);
+            xmlData_return.setState(state);
+            xmlData_return.setNum(num);
+            xmlData_return.setMsg(datamsg);
+            datasList.add(xmlData_return);
+        }
+        backXml.setState(code);
+        backXml.setMsg(msg);
+        backXml.setDatas(datasList);
+        return backXml;
+    }
+
+    /*
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <msg>鎺ㄩ�佹垚鍔�</msg>
+        <code>200</code>
+        <datas>
+            <data>
+                <idpath>wuping#shoutao</idpath>
+                <state>true</state>
+            </data>
+            <data>
+                <idpath>wuping#fanghufu</idpath>
+                <state>false</state>
+            </data>
+        </datas>
+    </object>
+     */
+    public static BackXml readSendXmlData_classify(String xmlData) throws Exception{
+
+        BackXml backXml = new BackXml();
+        Document document = DocumentHelper.parseText(xmlData);
+        Element object_element = document.getRootElement();
+
+        Element code_element = object_element.element(XML_CODE);
+        String code = code_element.getText();
+
+        Element msg_element = object_element.element(XML_MSG);
+        String msg = msg_element.getText();
+
+        Element datas_element = object_element.element(XML_DATAS);
+
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        List<XmlData> datasList = new ArrayList<XmlData>();
+        for (Element data_element:data_elements){
+            XmlData xmlData_return = new XmlData();
+
+            Element data_idpath_elements = data_element.element(XML_IDPATH);
+            String idpath = data_idpath_elements.getText();
+
+            Element data_state_elements = data_element.element(XML_STATE);
+            String state = data_state_elements.getText();
+
+            Element xml_msg_elements = data_element.element(XML_MSG);
+            String xml_msg = xml_msg_elements.getText();
+
+            xmlData_return.setIdpath(idpath);
+            xmlData_return.setMsg(xml_msg);
+            xmlData_return.setState(state);
+
+            datasList.add(xmlData_return);
+        }
+        backXml.setState(code);
+        backXml.setMsg(msg);
+        backXml.setDatas(datasList);
+        return backXml;
+    }
+
+    /*
+    <?xml version="1.0" encoding="UTF-8"?>
+    <object>
+        <msg>澶勭悊鎴愬姛</msg>
+        <code>200</code>
+        <datas>
+        <data unique="oa0001" state="200" num="01020000001">
+            <msg>鎺ユ敹鏁版嵁鎴愬姛锛�</msg>
+        </data>
+        </datas>
+    </object>
+     */
+    public static BackXml readSendJsonData(String jsonData) throws Exception{
+
+        BackXml backXml = new BackXml();
+        JSONObject json_root = JSONObject.parseObject(jsonData);
+        String code = json_root.getString(XML_CODE);
+        String msg = json_root.getString(XML_MSG);
+        Object datas_obj = json_root.get(XML_DATAS);
+
+        List<XmlData> datasList = new ArrayList<XmlData>();
+        if(datas_obj!=null){
+            JSONArray datas_arr = (JSONArray)datas_obj;
+            for (Object data_obj:datas_arr){
+                XmlData xmlData_return = new XmlData();
+
+                JSONObject data_json = (JSONObject)data_obj;
+                String unique = data_json.getString(XML_UNIQUE);
+                String state = data_json.getString(XML_STATE);
+                String num = data_json.getString(XML_NUM);
+                String datamsg = data_json.getString(XML_MSG);
+
+                xmlData_return.setUnique(unique);
+                xmlData_return.setState(state);
+                xmlData_return.setNum(num);
+                xmlData_return.setMsg(datamsg);
+                datasList.add(xmlData_return);
+            }
+        }
+
+        backXml.setState(code);
+        backXml.setMsg(msg);
+        backXml.setDatas(datasList);
+        return backXml;
+    }
+
+    //璇诲彇鏁版嵁杞崲xml鏁版嵁涓簃ap
+    /*
+<?xml version="1.0" encoding="UTF-8"?>
+<object>
+<datas>
+<data type="wupin">
+<props>
+<prop key="materialtype">
+<prop_tran mdmkey="1001" mdmvalue="鏉愭枡" systemkey="" tranvalue=""/>
+<prop_tran mdmkey="1002" mdmvalue="鎴愬搧" systemkey="" tranvalue=""/>
+<prop_tran mdmkey="1003" mdmvalue="鏈虹墿鏂�" systemkey="" tranvalue=""/>
+<prop_tran mdmkey="1004" mdmvalue="缁间繚" systemkey="" tranvalue=""/>
+<prop_tran mdmkey="1005" mdmvalue="璧勪骇" systemkey="" tranvalue=""/>
+</prop>
+</props>
+</data>
+</datas>
+</object>
+     */
+    public static Map<String,Object> readTranXml(String tran_xml,String btmid) throws Exception{
+        Map<String,Object> retMap = new HashMap<String,Object>();
+        if(StringUtils.isEmpty(btmid)){
+            return retMap;
+        }
+        Document document = DocumentHelper.parseText(tran_xml);
+        Element object_element = document.getRootElement();
+
+        Element datas_element = object_element.element(XML_DATAS);
+
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        for (Element data_element:data_elements){
+
+            Attribute data_type_attr = data_element.attribute(XML_TYPE);
+            String data_type = data_type_attr==null?"":data_type_attr.getValue();
+            if(!btmid.equals(data_type)){
+                continue;
+            }
+
+            Element data_pros_elements = data_element.element(XML_PROS);
+            List<Element> data_pro_elements = data_pros_elements.elements(XML_PRO);
+            for (Element data_pro_element:data_pro_elements) {
+                Map<String,String> data_pro_map = new HashMap<String,String>();
+                Attribute xml_type_attr = data_pro_element.attribute(XML_KEY);//materialtype
+                String xml_type = xml_type_attr==null?"":xml_type_attr.getValue();
+
+                List<Element>prop_tran_elements = data_pro_element.elements(XML_PRO_TRAN);//prop_tran
+                for (Element prop_tran_element:prop_tran_elements) {
+                    Attribute mdm_key_attr = prop_tran_element.attribute(XML_MDMKEY);
+                    String mdm_key = mdm_key_attr==null?"":mdm_key_attr.getValue();
+
+                    Attribute mdm_value_attr = prop_tran_element.attribute(XML_MDMVALUE);
+                    String mdm_value = mdm_value_attr==null?"":mdm_value_attr.getValue();
+
+                    Attribute system_key_attr = prop_tran_element.attribute(XML_SYSTEMKEY);
+                    String system_key = system_key_attr==null?"":system_key_attr.getValue();
+
+                    Attribute system_value_attr = prop_tran_element.attribute(XML_SYSTEMVALUE);
+                    String system_value = system_value_attr==null?"":system_value_attr.getValue();
+
+//                  data_pro_map.put(XML_MDMKEY,mdm_key);
+//                  data_pro_map.put(XML_MDMVALUE,mdm_value);
+//                  data_pro_map.put(XML_SYSTEMKEY,system_key);
+//                  data_pro_map.put(XML_SYSTEMVALUE,system_value);
+                    data_pro_map.put(mdm_key,system_key);
+                    data_pro_map.put(mdm_value,system_value);
+                }
+                retMap.put(xml_type,data_pro_map);
+            }
+
+        }
+        return retMap;
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/gennerAttrMapUtil.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/gennerAttrMapUtil.java
new file mode 100644
index 0000000..e3672cd
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/gennerAttrMapUtil.java
@@ -0,0 +1,45 @@
+package org.springblade.code.utils;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.vci.mdm.model.universalInter.attrmap.LibraryDO;
+import com.vci.starter.web.util.LocalFileUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Map;
+
+public class gennerAttrMapUtil {
+    @Autowired
+    private AttributeMapConfig attributeMapConfig;
+    private static  String fileName="";
+    private static gennerAttrMapUtil newInstance=null;
+    public static gennerAttrMapUtil getNewInstance() {
+        if(newInstance==null){
+            newInstance=new gennerAttrMapUtil();
+        }
+        return newInstance;
+    }
+
+    /****
+     * 鑾峰彇
+     * @param systemId
+     */
+    public LibraryDO gennerAttrMapBySystem(String systemId,Map<String, String> system_attrmap) throws Throwable{
+        if(StringUtils.isBlank(systemId)){
+            throw new Throwable("绯荤粺鏍囪瘑涓虹┖");
+        }
+        LibraryDO rootDataVO=new LibraryDO();
+        if(system_attrmap.containsKey(systemId)){
+           String path=system_attrmap.get(systemId);
+           String attributeMapData=  LocalFileUtil.readContentForFile(path);
+           XStream xStream = new XStream(new DomDriver());
+           xStream.processAnnotations(LibraryDO.class);
+           xStream.autodetectAnnotations(true);
+            rootDataVO = (LibraryDO) xStream.fromXML(attributeMapData);
+
+        }
+        return rootDataVO;
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/resources/application-dev.yml b/Source/BladeX/blade-service/blade-code/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..bbcd82d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/resources/application-dev.yml
@@ -0,0 +1,94 @@
+#鏈嶅姟鍣ㄧ鍙�
+server:
+  port: 36013
+###tomcat鐩稿叧鐨勯厤缃�
+  servlet:
+    context-path: /web
+  tomcat:
+    uri-encoding: UTF-8
+#鏁版嵁婧愰厤缃�
+spring:
+  datasource:
+    url: ${blade.datasource.dev.url}
+    username: ${blade.datasource.dev.username}
+    password: ${blade.datasource.dev.password}
+
+#####搴旂敤鍩烘湰閰嶇疆
+app:
+  name: web
+  group: 鍖椾含瀹忓崥杩滆揪绉戞妧鏈夐檺鍏徃
+  description: 骞冲彴B/S瀹㈡埛绔�
+  private-token-key: vciweb20210212
+
+###log4j2鐨勯厤缃紝闇�瑕佸摢涓寘涓嬬殑鏂囦欢寮�鍚煇涓瓑绾э紝灏辩洿鎺xxxx: yy杩欐牱鏂瑰紡
+logging:
+  config: "classpath:log4j2-spring-dev.xml"
+  level:
+    com.vci: debug
+  root: info
+  show-log: false
+###鏈」鐩殑閰嶇疆锛屾敞鎰弒pring瀹舵棌璇诲彇閰嶇疆鏃讹紝澶у啓瀛楁瘝闇�瑕佽浆鎹负-鐨勬柟寮忥紝鑰宖eign闇�瑕佸ぇ灏忓啓瀹屽叏鐩稿悓
+session:
+  session-info-storage-type: "database"
+  database-platform: oracle
+  clear-session-on-start: false
+  ###鏄惁寮�鍚敤鎴峰湪绾挎鏌�
+  checkSessionTimeout: false
+  ###瀹㈡埛绔垽鏂秴鏃惰疆璇㈡椂闂达紝鍗曚綅涓虹
+  sessionInterval: 10
+  ###瀹㈡埛绔渶澶у瓨鍦ㄦ椂闂达紝鍗曚綅涓哄垎閽�
+  sessionIdlTime: 30
+  ###瓒呮椂鎻愰啋鏃堕棿锛屽崟浣嶄负鍒嗛挓
+  sessionRemind: 3
+user-table-compatibility: "platform1"
+#鍙�2021鐗堟湰鐨勯儴鍒嗘帴鍙g殑褰卞搷锛屼笅闈㈢殑鍐呭闇�瑕侀厤缃紝
+vciPlatform:
+  objectServiceUrl: ""
+
+  cache:
+    type: ehcache
+  servlet:
+    multipart:
+      enabled: true
+      ###鍗曚釜鏂囦欢澶у皬锛�50M
+      max-file-size: 52428800
+      ###鎬讳笂浼犵殑鏂囦欢澶у皬锛�50M
+      max-request-size: 52428800
+  mvc:
+    view:
+      suffix: .html
+##web閰嶇疆
+vciweb:
+  debug: true
+file-preview:
+  enabled: true
+  preview-service-url: "http://dev.yunkeruida.top:28090/vciFilePreview/ajaxPreview.html"
+  preview-system-key: plt2020
+docking:
+  #鏄惁寮�鍚富鏁版嵁/鍒嗙被鏁版嵁鎺ㄩ�佸悓姝�
+  insertCache2: false
+  cron: 0 0/1 * * * ?
+  #棰勭敵璇锋暟鎹紝閰嶇疆妯℃澘鏂囦欢瀛樻斁鐨勬枃浠跺す
+  templateDir: D:\desktop
+  tranTemp: D:\mes
+  #鍥惧彿鐨刱ey
+  tuhao: tuhao
+
+dataSyncPush:
+  isStart: false
+  cronTime: "0 0/1 * * * ?"
+  dataParamName: dataString
+  dataTranTemp: D:\desktop
+clsfSyncPush:
+  isStart: false
+  cronTime: "0 0/1 * * * ?"
+  dataParamName: dataString
+  dataTranTemp: D:\desktop
+
+attrconfig:
+  #绯荤粺闆嗘垚
+  system_attrmap: {RLM: D:\RLM.xml,PDM: D:\pdm.xml,DMS: D:\DMS.xml}
+  #MPM鏋氫妇鍊煎睘鎬ф槧灏�
+  mpmEnumMap: {partType: [{enumValue: 1,enumText: 浜у搧},{enumValue: 2,enumText: 浜у搧},{'enumValue': 3,enumText: 鏍囧噯浠秨,{'enumValue': 7,enumText: 鏉愭枡}]}
+
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/resources/application-prod.yml b/Source/BladeX/blade-service/blade-code/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..b79ea32
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/resources/application-prod.yml
@@ -0,0 +1,74 @@
+#####搴旂敤鍩烘湰閰嶇疆
+app:
+  name: web
+  group: 鍖椾含瀹忓崥杩滆揪绉戞妧鏈夐檺鍏徃
+  description: 骞冲彴B/S瀹㈡埛绔�
+  private-token-key: vciweb20210212
+###tomcat鐩稿叧鐨勯厤缃�
+server:
+  port: 12000
+  servlet:
+    context-path: /web
+###log4j2鐨勯厤缃紝闇�瑕佸摢涓寘涓嬬殑鏂囦欢寮�鍚煇涓瓑绾э紝灏辩洿鎺xxxx: yy杩欐牱鏂瑰紡
+logging:
+  config: "classpath:log4j2-spring-prod.xml"
+  level:
+    com.vci: debug
+  root: info
+###鏈」鐩殑閰嶇疆锛屾敞鎰弒pring瀹舵棌璇诲彇閰嶇疆鏃讹紝澶у啓瀛楁瘝闇�瑕佽浆鎹负-鐨勬柟寮忥紝鑰宖eign闇�瑕佸ぇ灏忓啓瀹屽叏鐩稿悓
+session:
+  session-info-storage-type: "database"
+  database-platform: oracle
+  clear-session-on-start: false
+  ###鏄惁寮�鍚敤鎴峰湪绾挎鏌�
+  checkSessionTimeout: false
+  ###瀹㈡埛绔垽鏂秴鏃惰疆璇㈡椂闂达紝鍗曚綅涓虹
+  sessionInterval: 10
+  ###瀹㈡埛绔渶澶у瓨鍦ㄦ椂闂达紝鍗曚綅涓哄垎閽�
+  sessionIdlTime: 30
+  ###瓒呮椂鎻愰啋鏃堕棿锛屽崟浣嶄负鍒嗛挓
+  sessionRemind: 3
+###鍏煎鎬э紝蹇呴』璁剧疆涓鸿繖涓�
+user-table-compatibility: "platform1"
+#缂撳瓨閰嶇疆
+###corba鐨勯厤缃�
+jacorb:
+  client:
+    enabled: true
+    url: "corbaloc::localhost:30000/NameService"
+    instanceIdentity: "platform-sf"
+#鍙�2021鐗堟湰鐨勯儴鍒嗘帴鍙g殑褰卞搷锛屼笅闈㈢殑鍐呭闇�瑕侀厤缃紝
+vciPlatform:
+  objectServiceUrl: "2"
+#缂撳瓨
+spring:
+  # redis閰嶇疆
+  redis: ###### redis 閰嶇疆
+    enabled: true  #true锛屽惎鐢╮edi锛宖alse涓嶅惎鐢紝榛樿false,閰嶇疆鏂囦欢娌℃湁杩欎簺榛樿涓嶅惎鐢╮edis
+    host: vciserver  # ip鍦板潃
+    database: 0  # redis鏁版嵁搴�  0-15
+    port: 6379  # 绔彛鍙�
+    password: vcitest # 鏃犲瘑鐮佷笉濉�
+    timeout: 30000s   # 杩炴帴瓒呮椂鏃堕棿 锛堥粯璁�1澶╋級
+    lettuce:
+      shutdown-timeout: 100ms # 鍏抽棴瓒呮椂鏃堕棿 榛樿 100ms
+      pool: # lettuce 杩炴帴姹�
+        max-active: 8 # 杩炴帴姹犳渶澶ц繛鎺ユ暟 榛樿 8锛�-1 锛氳〃绀烘病鏈夐檺鍒讹級
+        max-wait: 60000ms # 杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂� 榛樿-1ms 锛�-1 :琛ㄧず娌℃湁闄愬埗锛� 杩欓噷璁剧疆1鍒嗛挓
+        max-idle: 8 # 鏈�澶х┖闂茶繛鎺�  榛樿 8
+        min-idle: 0 # 鏈�灏忕┖闂茶繛鎺�  榛樿 0
+  cache:
+    type: redis
+  config:
+    location:
+##web閰嶇疆
+vciweb:
+  debug: true
+
+dataSyncPush:
+  isStart: true
+  cronTime: "0 0/1 * * * ?"
+
+attrconfig:
+  #绯荤粺闆嗘垚
+  system_attrmap: {RLM: D:\RLM.xml,PDM: D:\pdm.xml}
\ No newline at end of file
diff --git a/Source/BladeX/blade-service/blade-code/src/main/resources/application.yml b/Source/BladeX/blade-service/blade-code/src/main/resources/application.yml
new file mode 100644
index 0000000..2b40fa6
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/resources/application.yml
@@ -0,0 +1,7 @@
+spring:
+  profiles:
+    active: dev
+    include: web
+  messages:
+    encoding: UTF-8
+    basename: i18n/messages
\ No newline at end of file
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java
index 542855a..cd3708b 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/controller/DictController.java
@@ -192,16 +192,5 @@
 		return R.data(list);
 	}
 
-	/**
-	 * 妫�鏌ュ瓧鍏告槸鍚﹀瓨鍦紝瀛樺湪鍗宠繑鍥烇紝涓嶅瓨鍦ㄦ柊澧�
-	 */
-	@PostMapping("/check")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dict")
-	public R checkOrInsert(@Valid @RequestBody Dict dict) {
-		CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
-		return dictService.checkOrInsert(dict);
-	}
-
 
 }
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictService.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictService.java
index 4030e5a..28d3a33 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictService.java
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/IDictService.java
@@ -19,7 +19,6 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
 import org.springblade.system.entity.Dict;
 import org.springblade.system.vo.DictVO;
 
@@ -107,11 +106,4 @@
 	 */
 	List<DictVO> childList(Map<String, Object> dict, Long parentId);
 
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 *
-	 * @param dict
-	 * @return
-	 */
-	R checkOrInsert(Dict dict);
 }
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java
index 965e7df..087520b 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DictServiceImpl.java
@@ -25,7 +25,6 @@
 import org.springblade.core.log.exception.ServiceException;
 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.constant.BladeConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.Func;
@@ -122,23 +121,5 @@
 		Dict parentDict = DictCache.getById(parentId);
 		List<Dict> list = this.list(Condition.getQueryWrapper(dict, Dict.class).lambda().ne(Dict::getId, parentId).eq(Dict::getCode, parentDict.getCode()).orderByAsc(Dict::getSort));
 		return DictWrapper.build().listNodeVO(list);
-	}
-
-	@Override
-	public R checkOrInsert(Dict dict) {
-		LambdaQueryWrapper<Dict> lqw = Wrappers.<Dict>query().lambda().eq(Dict::getCode, dict.getCode()).eq(Dict::getDictKey, dict.getDictKey());
-		Long cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(Dict::getId, dict.getId()));
-		if (cnt > 0L) {
-			R.fail("瀛楀吀宸茬粡瀛樺湪锛�");
-		}
-		if (Func.isEmpty(dict.getParentId())) {
-			dict.setParentId(BladeConstant.TOP_PARENT_ID);
-		}
-		dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		CacheUtil.clear(DICT_CACHE, Boolean.FALSE);
-		if(saveOrUpdate(dict) == true){
-			return R.success("鎿嶄綔鎴愬姛!");
-		}
-		return R.fail("鎿嶄綔澶辫触锛�");
 	}
 }
diff --git a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
index c6c8bde..8d989ce 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
+++ b/Source/BladeX/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java
@@ -233,6 +233,7 @@
 		user.setRealName(role.getRoleName());
 		user.setAccount(role.getRoleAlias());
 		user.setStrategyUpdateStatus(CommonConstant.TOP_PARENT_ID);
+		user.setPwdUpdateTime(new Date());
 		// 鑾峰彇鍙傛暟閰嶇疆鐨勫瘑鐮�
 		String password = Func.toStr(ParamCache.getValue(PASSWORD_KEY), DEFAULT_PASSWORD);
 		user.setPassword(password);
diff --git a/Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml b/Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml
index 29c1f3e..fde6cb1 100644
--- a/Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml
+++ b/Source/BladeX/blade-service/blade-system/src/main/resources/application-dev.yml
@@ -8,3 +8,4 @@
     url: ${blade.datasource.dev.url}
     username: ${blade.datasource.dev.username}
     password: ${blade.datasource.dev.password}
+
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
index a385c0b..9ae8a71 100644
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
+++ b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
@@ -336,8 +336,9 @@
 	@PostMapping("/check-renexpr")
 	@ApiOperationSupport(order = 19)
 	@ApiOperation(value = "鏌ヨ鐢ㄦ埛瀵嗙爜绛栫暐鏄惁闇�瑕佹彁閱�", notes = "浼犲叆id")
-	public R<Long> checkRenAndExpr(@RequestParam Long userId) {
-		Long res = userService.checkRenAndExpr(userId);
+	public R<Long> checkRenAndExpr(BladeUser user) {
+		System.out.println("==============================="+user.getUserId());
+		Long res = userService.checkRenAndExpr(user.getUserId());
 		return R.data(res);
 	}
 
diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
index f10a077..96f2490 100644
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
+++ b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
@@ -21,7 +21,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
@@ -50,6 +50,7 @@
 import org.springblade.system.user.service.IUserService;
 import org.springblade.system.user.vo.UserVO;
 import org.springblade.system.user.wrapper.UserWrapper;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.DigestUtils;
@@ -64,7 +65,7 @@
  * @author Chill
  */
 @Service
-@AllArgsConstructor
+@RequiredArgsConstructor
 public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implements IUserService {
 	private static final String GUEST_NAME = "guest";
 
@@ -72,6 +73,10 @@
 	private final IUserOauthService userOauthService;
 	private final ISysClient sysClient;
 	private final BladeTenantProperties tenantProperties;
+	//鎷垮埌閰嶇疆鐨勮秴绠d
+	@Value("${user-info.id}")
+	private String adminUserId;
+
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
@@ -328,10 +333,11 @@
 		if(!result){
 			throw new ServiceException(resException);
 		}
-		//淇敼瀵嗙爜鍚屾椂锛屾敼鍙樼敤鎴蜂俊鎭腑鐨勫瘑鐮佷慨鏀圭姸鎬佸瓧娈�
+		//淇敼瀵嗙爜鍚屾椂锛屾敼鍙樼敤鎴蜂俊鎭腑鐨勫瘑鐮佷慨鏀圭姸鎬佸瓧娈�,瀵嗙爜淇敼鏃堕棿
 		return this.update(Wrappers.<User>update().lambda()
 			.set(User::getPassword, DigestUtil.hex(DigestUtils.md5DigestAsHex((newPassword1).getBytes())))
 			.set(User::getStrategyUpdateStatus,CommonConstant.TOP_PARENT_ID)
+			.set(User::getPwdUpdateTime,new Date())
 			.eq(User::getId, userId));
 	}
 
@@ -471,6 +477,10 @@
 
 	@Override
 	public Long checkRenAndExpr(Long userId) {
+		//瓒呯骇绠$悊鍛樼洿鎺ヨ繑鍥炰笉闇�瑕佹彁閱掑瘑鐮佷慨鏀�
+		if(adminUserId.equals(userId)){
+			return 0L;
+		}
 		//鑾峰彇鍒板瘑鐮佷慨鏀规椂闂�
 		Date pwdUpdateTime = this.getOne(Wrappers.<User>query().eq("ID", userId)).getPwdUpdateTime();
 		Long pwdupdateday = 0L;
@@ -478,13 +488,9 @@
 			pwdupdateday = dateToDay(pwdUpdateTime);
 		}
 		Strategy strategy = sysClient.getByUserId(userId).getData();
-		System.out.println("褰撳墠鏃堕棿=================="+dateToDay(new Date()));
-		System.out.println("瀵嗙爜淇敼鏃堕棿======================"+pwdupdateday);
-		System.out.println("鎻愰啋鏃堕棿======================"+strategy.getReminderTime());
-		System.out.println("杩囨湡鏃堕棿======================="+strategy.getExpirationTime());
 		//鏄惁鎻愰啋閫氳繃鏈�鍚庝竴娆′慨鏀瑰瘑鐮佺殑鏃堕棿鍔犱笂杩囨湡鏃堕棿鍑忓幓褰撳墠鏃堕棿锛屽鏋滃皬浜庤繃鏈熸彁閱掓椂闂村氨杩涜鎻愰啋锛屽鏋�<=0灏辨彁閱掑繀椤讳慨鏀瑰瘑鐮�
 		long reminder = pwdupdateday+strategy.getExpirationTime()-dateToDay(pwdUpdateTime);
-		//蹇呴』鍘讳慨鏀瑰瘑鐮�
+		//鎻愰啋鐢ㄦ埛蹇呴』淇敼瀵嗙爜
 		if(reminder<=0){
 			return -1L;
 		}
@@ -497,6 +503,11 @@
 		return 0L;
 	}
 
+	/**
+	 * 鏃堕棿鏍煎紡杞ぉ
+	 * @param date
+	 * @return
+	 */
 	private Long dateToDay(Date date){
 		long time = date.getTime();
 		return time/(1000 * 60 * 60 * 24);
diff --git a/Source/BladeX/blade-service/pom.xml b/Source/BladeX/blade-service/pom.xml
index cf8ecd8..ae9fcd7 100644
--- a/Source/BladeX/blade-service/pom.xml
+++ b/Source/BladeX/blade-service/pom.xml
@@ -21,6 +21,7 @@
         <module>blade-desk</module>
         <module>blade-system</module>
         <module>blade-user</module>
+        <module>blade-code</module>
     </modules>
 
     <dependencies>

--
Gitblit v1.9.3