From 97125f78d90cc22e2b97155146b5fb8fb202a7b3 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期二, 28 三月 2023 14:29:33 +0800
Subject: [PATCH] 更改CODE服务中部分依赖

---
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataDaoImpl.java                |    7 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingDataVO.java                 |  120 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeDefaultLC.java                            |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmIOServiceI.java                              |  127 
 Source/BladeX/blade-service/blade-code/src/main/resources/application-dev.yml                                                     |   10 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTempMapItemController.java       |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeButtonDaoI.java                                 |    3 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateButtonDaoI.java                 |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeBasicSecDaoI.java                               |    2 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntHeaderVO.java                |   80 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeCutTypeEnum.java                           |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeResembleRuleDaoI.java                           |    2 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataVO.java         |  256 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmProductCodeServiceImpl.java             |  741 ++
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeDuckingServiceI.java                        |    5 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeKeyAttrRepeatRuleDaoImpl.java              |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeButtonUseEnum.java                         |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyDaoImpl.java                       |    9 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeFixedValueDaoI.java                             |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrRangeDO.java                        |   95 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrRangeVO.java         |   83 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/CodeRuleDO.java                                   |    4 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateButtonServiceI.java         |    6 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeApplySyncController.java                 |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntBaseServiceI.java                         |  101 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingScheduling.java                       |    3 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyValueDaoImpl.java                  |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSerialAlgorithmServiceI.java                |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingLogeDaoI.java                                |  128 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateMapServiceImpl.java    |   21 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyServiceImpl.java               |   37 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateAttrController.java      |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyProcessTempServiceI.java            |    6 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeFixedValueServiceI.java                     |    6 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/UniversalInterfaceImpl.java                |  913 ++
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateController.java          |    9 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyDaoI.java                               |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeBasicSecDaoImpl.java                       |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyController.java                  |   14 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeTemplatePhaseServiceI.java                  |   13 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingDataSyncScheduling.java               |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeTemplatePhaseDaoI.java                          |    3 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeGetValueTypeEnum.java                      |    2 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/CodeImprotSaveDatVO.java           |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodePhaseAttrDaoImpl.java                      |    6 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeAllCodeDaoImpl.java                        |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeSynonymServiceI.java                        |    6 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeSecLengthTypeEnum.java                     |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingTaskDaoI.java                                |  127 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java   |   24 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeButtonServiceI.java                         |    6 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateServiceImpl.java       |   16 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationAuthorityTypeEnum.java           |  127 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntHeaderDaoImpl.java                       |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSerialAlgorithmController.java           |    5 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeUseButtonPositionTypeEnum.java             |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/XmlUtil.java                                      |    3 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeDuckingController.java                   |   34 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntInfoVO.java                  |  746 ++
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateAttrDaoImpl.java           |    6 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntAuthorityDaoImpl.java                    |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeRuleServiceImpl.java                   |   36 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataDaoI.java                        |  127 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingDataDaoImpl.java                        |    5 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeRuleController.java                      |    9 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTempMapItemServiceI.java            |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataDO.java                        |  266 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrMappingDO.java                      |  207 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrRangeDaoI.java                        |  126 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeFixedValueServiceImpl.java             |   12 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyValueController.java             |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeRuleDaoI.java                                   |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataServiceImpl.java        | 1116 +++
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntParamVO.java                 |   80 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyProcessTempDaoI.java                    |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeRuleDaoImpl.java                           |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestTypeEnum.java             |  135 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeButtonController.java                    |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyProcessTempDaoImpl.java            |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSerialValueDaoI.java                            |    3 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSerialAlgorithmServiceImpl.java        |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingLogeDaoImpl.java                        |    4 
 Source/BladeX/blade-service/pom.xml                                                                                               |    1 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/CodeApplication.java                                    |    5 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyProcessTempController.java       |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntInfoDO.java                                 |  656 +
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeKeyAttrRepeatRuleController.java         |    3 
 Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java                |    2 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntAuthorityVO.java             |  123 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeFixedValueController.java                |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmEngineServiceI.java                          |  361 +
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTempMapItemServiceImpl.java    |   16 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationDataFlowTypeEnum.java            |  124 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingTaskDaoImpl.java                        |    4 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/MdmUIInfoVO.java                   |  109 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingTaskDO.java                                |  224 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmEngineServiceImpl.java                  | 2753 +++++++
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/sysIntegrationPushTypeEnum.java                |  122 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntAuthorityDO.java                            |  159 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingSyncServiceImpl.java            |   48 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingLogeVO.java                 |  177 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingTaskVO.java                 |  200 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmIOServiceImpl.java                      | 4012 +++++++++++
 Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java                   |    2 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataInfoVO.java     |  121 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/utils/gennerAttrMapUtil.java                            |    4 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntAuthorityServiceImpl.java            |  288 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateMapServiceI.java            |    8 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/classify/QueryData.java       |    2 
 Source/BladeX/blade-service-api/pom.xml                                                                                           |    1 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeAllCodeDaoI.java                                |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateDaoI.java                       |    3 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntBaseServiceImpl.java                 |  283 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTempMapItemDaoI.java                    |    2 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DataResembleVO.java                |   36 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ColumnVO.java                      |   51 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateDaoImpl.java               |   14 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeTemplatePhaseController.java             |    9 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeClassifyProcessUseEnum.java                |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeAllCodeLC.java                            |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreAttrMappingSeviceI.java               |   48 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTempMapItemDaoImpl.java            |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeResembleRuleServiceI.java                   |    9 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateServiceI.java               |    9 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreAttrMappingSeviceImpl.java       |  529 +
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrMappingVO.java       |  199 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeBasicSecServiceI.java                       |   10 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeButtonDaoImpl.java                         |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeSynonymServiceImpl.java                |   21 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrMappingDaoImpl.java              |    5 
 Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java                                      |    5 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntBaseVO.java                  |   25 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeBasicSecServiceImpl.java               |   39 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/UniversalInterfaceI.java                        |   47 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateButtonDaoImpl.java         |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/TaskDuckingDO.java                                |  236 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataInfoDO.java                    |  103 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataInfoServiceI.java            |  100 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateMapDaoI.java                    |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeResembleRuleController.java              |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingDataDO.java                                |  148 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyServiceI.java                       |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntParamDaoImpl.java                        |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingDataDaoI.java                                |  128 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyTemplateButtonServiceImpl.java |   16 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeRuleLC.java                               |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateButtonController.java    |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntBaseDaoI.java                                 |  128 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java      |  127 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/universalInter/data/CondtionsVO.java         |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeSynonymController.java                   |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeClassifyTemplateMapController.java       |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntHeaderDaoI.java                               |  143 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntParamDO.java                                |   89 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodePhaseAttrServiceI.java                      |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodePhaseAttrServiceImpl.java              |   14 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreApplyDataInfoDaoImpl.java            |    4 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntInfoServiceI.java                         |  159 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodePhaseAttrController.java                 |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataServiceI.java                |  152 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntInfoDaoI.java                                 |  127 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyValueServiceImpl.java          |   16 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeLevelTypeEnum.java                         |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntInfoServiceImpl.java                 | 1091 +++
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestMethodEnum.java           |  136 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeResembleRuleServiceImpl.java           |   12 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrMappingDaoI.java                      |  133 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeSynonymDaoI.java                                |    3 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingLogeDO.java                                |  228 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmProductCodeServiceI.java                     |   38 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntAuthorityServiceI.java                    |  101 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeButtonServiceImpl.java                 |   12 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeTemplatePhaseServiceImpl.java          |   27 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeClassifyProcessTempServiceImpl.java    |   21 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeFixedValueDaoImpl.java                     |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/SysIntBaseDaoImpl.java                         |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/CodeDuckingServiceImpl.java                |   30 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataInfoDaoI.java                    |  128 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyTemplateAttrServiceI.java           |    6 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeRuleServiceI.java                           |    8 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataInfoServiceImpl.java    |  275 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/lifecycle/CodeClassifyTemplateLC.java                   |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyValueDaoI.java                          |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeResembleRuleDaoImpl.java                   |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntParamDaoI.java                                |  144 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodePhaseAttrDaoI.java                              |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntAuthorityDaoI.java                            |  128 
 Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ConfigAttrMappingVO.java           |    6 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeClassifyTemplateMapDaoImpl.java            |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeTemplatePhaseDaoImpl.java                  |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/CodeClassifyTemplateAttrDaoI.java                   |    3 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/controller/CodeBasicSecController.java                  |    6 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntBaseDO.java                                 |   78 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/CodeClassifyValueServiceI.java                  |    6 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/CodeMapRuleTypeEnum.java                       |    2 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSynonymDaoImpl.java                        |    7 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntHeaderDO.java                               |   90 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/Scheduling/DockingClassSyncScheduling.java              |    3 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/DockingPreAttrRangeDaoImpl.java                |    4 
 Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/impl/CodeSerialValueDaoImpl.java                    |    6 
 Source/BladeX/blade-service/blade-code/src/main/resources/application-test.yml                                                    |   10 
 201 files changed, 21,127 insertions(+), 499 deletions(-)

diff --git a/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java b/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java
index 2735c00..b01eac8 100644
--- a/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java
+++ b/Source/BladeX/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java
@@ -34,6 +34,11 @@
 	String SABER_NAME = "saber";
 
 	/**
+	 * CODE 鏂版坊鍔犵殑CODE鏈嶅姟鍚�
+	 */
+	String CODE_NAME = "CODE";
+
+	/**
 	 * 椤剁骇鐖惰妭鐐筰d
 	 */
 	Long TOP_PARENT_ID = 0L;
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
index c919067..06350a2 100644
--- 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
@@ -1,6 +1,6 @@
 package org.springblade.code.vo.pagemodel;
 
-import com.vci.mdm.dto.CodeOrderDTO;
+import org.springblade.code.dto.CodeOrderDTO;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ColumnVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ColumnVO.java
new file mode 100644
index 0000000..dbe6cf7
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ColumnVO.java
@@ -0,0 +1,51 @@
+package org.springblade.code.vo.pagemodel;
+
+public class ColumnVO {
+
+    private  String field;
+    private  String title;
+    private  int width=260;
+    private  boolean sort;
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public int getWidth() {
+        return width;
+    }
+
+    public void setWidth(int width) {
+        this.width = width;
+    }
+
+    public boolean isSort() {
+        return sort;
+    }
+
+    public void setSort(boolean sort) {
+        this.sort = sort;
+    }
+
+    @Override
+    public String toString() {
+        return "ColumnVO{" +
+                "field='" + field + '\'' +
+                ", title='" + title + '\'' +
+                ", width=" + width +
+                ", sort=" + sort +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ConfigAttrMappingVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ConfigAttrMappingVO.java
new file mode 100644
index 0000000..b7ae130
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/ConfigAttrMappingVO.java
@@ -0,0 +1,6 @@
+package org.springblade.code.vo.pagemodel;
+
+public class ConfigAttrMappingVO {
+    private String systemId;
+    private String ll;
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DataResembleVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DataResembleVO.java
new file mode 100644
index 0000000..4ca37e5
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DataResembleVO.java
@@ -0,0 +1,36 @@
+package org.springblade.code.vo.pagemodel;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class DataResembleVO {
+    private String oid;
+    private List<Map<String,String>> dataList=new ArrayList<>();
+
+
+    public List<Map<String, String>> getDataList() {
+        return dataList;
+    }
+
+    public void setDataList(List<Map<String, String>> dataList) {
+        this.dataList = dataList;
+    }
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    @Override
+    public String toString() {
+        return "DataResembleVO{" +
+                "oid='" + oid + '\'' +
+                ", dataList=" + dataList +
+                '}';
+    }
+
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingDataVO.java
new file mode 100644
index 0000000..9738f37
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingDataVO.java
@@ -0,0 +1,120 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.model.BaseModel;
+
+/**
+ * 瑕佹帹閫佸緱鏁版嵁
+ * @author wangyi
+ * @date 2022-10-7
+ */
+public class DockingDataVO 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/vo/pagemodel/DockingLogeVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingLogeVO.java
new file mode 100644
index 0000000..4794b78
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingLogeVO.java
@@ -0,0 +1,177 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+public class DockingLogeVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707121064918548L;
+
+	/**
+	* 鎺ュ彛鐘舵��
+	*/
+	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 "DockingLogeVO{" +
+				"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/vo/pagemodel/DockingPreApplyDataInfoVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataInfoVO.java
new file mode 100644
index 0000000..a4fcf53
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataInfoVO.java
@@ -0,0 +1,121 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+public class DockingPreApplyDataInfoVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707120361431431L;
+
+	/**
+	 * 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 "DockingPreApplyDataInfoVO{" +
+				"dataoid='" + dataoid + '\'' +
+				", uniquecode='" + uniquecode + '\'' +
+				", key='" + key + '\'' +
+				", mean='" + mean + '\'' +
+				", value='" + value + '\'' +
+				'}';
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataVO.java
new file mode 100644
index 0000000..883d4b9
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreApplyDataVO.java
@@ -0,0 +1,256 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+public class DockingPreApplyDataVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118846979001L;
+
+	/**
+	 * 鐢宠oid
+	 */
+	private String preapplyoid;
+
+	/**
+	 * 鍞竴鏍囪瘑锛屽伐鑹洪噷杈圭殑鍥惧彿
+	 */
+	private String uniquecode;
+
+	/**
+	 * 涓婚搴撶紪鍙�
+	 */
+	private String type;
+
+	/**
+	 * 绯荤粺缂栧彿
+	 */
+	private String systemid;
+
+	/**
+	 * 姝e湪浣跨敤鏍囧織
+	 */
+	private String useddflag;
+
+	/**
+	 * 鍏宠仈鍒嗙被鎿嶄綔杩囧悗锛岃褰曠殑鍏宠仈鍒嗙被oid
+	 */
+	private String classifyoid;
+
+	/**
+	 * 鍏宠仈鍒嗙被鎿嶄綔杩囧悗锛岃褰曠殑鍏宠仈鍒嗙被鍚嶇О
+	 */
+	private String classifyname;
+
+	/**
+	 * 鐢宠鎴愬姛鍚庣殑缂栫爜锛岀紪杈戜腑銆佹湭鍙戝竷銆佸仠鐢ㄧ殑缂栫爜涓嶆樉绀猴紝鍙湁姝e紡鐨勭紪鐮佹墠鏄剧ず
+	 */
+	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;
+
+	private List<DockingPreApplyDataInfoVO> dockingPreApplyDataInfoVOs;
+
+	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;
+	}
+
+	public List<DockingPreApplyDataInfoVO> getDockingPreApplyDataInfoVOs() {
+		return dockingPreApplyDataInfoVOs;
+	}
+
+	public void setDockingPreApplyDataInfoVOs(List<DockingPreApplyDataInfoVO> dockingPreApplyDataInfoVOs) {
+		this.dockingPreApplyDataInfoVOs = dockingPreApplyDataInfoVOs;
+	}
+
+	@Override
+	public String toString() {
+		return "DockingPreApplyDataVO{" +
+				"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 + '\'' +
+				", dockingPreApplyDataInfoVOs=" + dockingPreApplyDataInfoVOs +
+				'}';
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrMappingVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrMappingVO.java
new file mode 100644
index 0000000..fb29711
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrMappingVO.java
@@ -0,0 +1,199 @@
+package org.springblade.code.vo.pagemodel;
+
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 璁板綍闆嗘垚灞炴�т笌涓绘暟鎹睘鎬ф槧灏勫叧绯诲璞�
+ * @author xiejun
+ * @date 2023-01-06
+ */
+public class DockingPreAttrMappingVO 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<DockingPreAttrRangeVO> dockingPreAttrRangeVOS;
+
+
+    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<DockingPreAttrRangeVO> getDockingPreAttrRangeVOS() {
+        return dockingPreAttrRangeVOS;
+    }
+
+    public void setDockingPreAttrRangeVOS(List<DockingPreAttrRangeVO> dockingPreAttrRangeVOS) {
+        this.dockingPreAttrRangeVOS = dockingPreAttrRangeVOS;
+    }
+
+    @Override
+    public String toString() {
+        return "DockingPreAttrMappingVO{" +
+                "jdefaultValue='" + jdefaultValue + '\'' +
+                ", jmetaListId='" + jmetaListId + '\'' +
+                ", jsourceClsfId='" + jsourceClsfId + '\'' +
+                ", jsourceClsfName='" + jsourceClsfName + '\'' +
+                ", jtargetAttrId='" + jtargetAttrId + '\'' +
+                ", jtargetClsfId='" + jtargetClsfId + '\'' +
+                ", jviewModeId='" + jviewModeId + '\'' +
+                ", jviewModeName='" + jviewModeName + '\'' +
+                ", jtargetAttrKey='" + jtargetAttrKey + '\'' +
+                ", jtargetAttrName='" + jtargetAttrName + '\'' +
+                ", jsourceAttrKey='" + jsourceAttrKey + '\'' +
+                ", jsourceAttrName='" + jsourceAttrName + '\'' +
+                ", dockingPreAttrRangeVOS=" + dockingPreAttrRangeVOS +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrRangeVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrRangeVO.java
new file mode 100644
index 0000000..18a6d95
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingPreAttrRangeVO.java
@@ -0,0 +1,83 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+public class DockingPreAttrRangeVO 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 getJmetaListId() {
+        return jmetaListId;
+    }
+
+    public void setJmetaListId(String jmetaListId) {
+        this.jmetaListId = jmetaListId;
+    }
+
+    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;
+    }
+
+    @Override
+    public String toString() {
+        return "DockingPreAttrRangeVO{" +
+                "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/vo/pagemodel/DockingTaskVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingTaskVO.java
new file mode 100644
index 0000000..6e40dbc
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/DockingTaskVO.java
@@ -0,0 +1,200 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+public class DockingTaskVO extends BaseModelVO {
+
+	/**
+	 * 绂佹淇敼杩欎釜鍊�
+	 */
+	private static final long serialVersionUID = 4615707119707777641L;
+
+	/**
+	 * 绯荤粺鎺ュ彛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;
+
+	/**
+	 * 涓氬姟绫诲瀷鏁版嵁id
+	 */
+	private String btmid;
+
+	/**
+	 * uniquecode
+	 */
+	private String uniquecode;
+
+
+	/**
+	 * 鏄惁鍙戦�佹垚鍔�
+	 */
+	private String sendflag;
+
+	/**
+	 * 鍙戦�佺被鍨�,lcstatus
+	 */
+	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.btmoid = 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 "DockingTaskVO{" +
+				"sysinfooid='" + sysinfooid + '\'' +
+				", systemoid='" + systemoid + '\'' +
+				", systemcode='" + systemcode + '\'' +
+				", systemname='" + systemname + '\'' +
+				", classifyoid='" + classifyoid + '\'' +
+				", classifyid='" + classifyid + '\'' +
+				", classifyname='" + classifyname + '\'' +
+				", btmoid='" + btmoid + '\'' +
+				", btmid='" + 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/vo/pagemodel/MdmUIInfoVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/MdmUIInfoVO.java
new file mode 100644
index 0000000..e6b8f98
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/MdmUIInfoVO.java
@@ -0,0 +1,109 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.web.pageModel.SmOperationVO;
+import com.vci.web.pageModel.UIFormDefineVO;
+import com.vci.web.pageModel.UITableDefineVO;
+
+import java.util.List;
+
+/**
+ * 涓绘暟鎹殑UI淇℃伅
+ * @author weidy
+ * @date 2022-2-21
+ */
+public class MdmUIInfoVO implements java.io.Serializable {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 4192521596336111375L;
+    /**
+     * 妯℃澘鐨勪俊鎭�
+     */
+    private CodeClassifyTemplateVO templateVO;
+
+    /**
+     * 琛ㄦ牸鐨勪俊鎭�
+     */
+    private UITableDefineVO tableDefineVO;
+
+    /**
+     * 琛ㄥ崟鐨勪俊鎭�
+     */
+    private UIFormDefineVO formDefineVO;
+
+    /**
+     * 鏌ラ噸灞炴�х殑鐩稿叧琛ㄦ牸鐨勪俊鎭�
+     */
+    private UITableDefineVO resembleTableVO;
+
+    /**
+     * 鎸夐挳鐨勫唴瀹�
+     */
+    private List<SmOperationVO> buttons;
+
+    /**
+     * 褰撳墠鍒嗙被鏄惁涓哄彾瀛愯妭鐐�
+     */
+    private boolean leaf;
+
+    public List<SmOperationVO> getButtons() {
+        return buttons;
+    }
+
+    public void setButtons(List<SmOperationVO> buttons) {
+        this.buttons = buttons;
+    }
+
+    public CodeClassifyTemplateVO getTemplateVO() {
+        return templateVO;
+    }
+
+    public void setTemplateVO(CodeClassifyTemplateVO templateVO) {
+        this.templateVO = templateVO;
+    }
+
+    public UITableDefineVO getTableDefineVO() {
+        return tableDefineVO;
+    }
+
+    public void setTableDefineVO(UITableDefineVO tableDefineVO) {
+        this.tableDefineVO = tableDefineVO;
+    }
+
+    public UIFormDefineVO getFormDefineVO() {
+        return formDefineVO;
+    }
+
+    public void setFormDefineVO(UIFormDefineVO formDefineVO) {
+        this.formDefineVO = formDefineVO;
+    }
+
+    public boolean isLeaf() {
+        return leaf;
+    }
+
+    public void setLeaf(boolean leaf) {
+        this.leaf = leaf;
+    }
+
+    public UITableDefineVO getResembleTableVO() {
+        return resembleTableVO;
+    }
+
+    public void setResembleTableVO(UITableDefineVO resembleTableVO) {
+        this.resembleTableVO = resembleTableVO;
+    }
+
+    @Override
+    public String toString() {
+        return "MdmUIInfoVO{" +
+                "templateVO=" + templateVO +
+                ", tableDefineVO=" + tableDefineVO +
+                ", formDefineVO=" + formDefineVO +
+                ", resembleTableVO=" + resembleTableVO +
+                ", buttons=" + buttons +
+                ", leaf=" + leaf +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntAuthorityVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntAuthorityVO.java
new file mode 100644
index 0000000..68b8e5a
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntAuthorityVO.java
@@ -0,0 +1,123 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹樉绀哄璞�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public class SysIntAuthorityVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707119460615952L;
+
+	/**
+	* 楠岃瘉浠ょ墝
+	*/
+	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 "SysIntAuthorityVO{" +
+		"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/vo/pagemodel/SysIntBaseVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntBaseVO.java
new file mode 100644
index 0000000..b7db254
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntBaseVO.java
@@ -0,0 +1,25 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public class SysIntBaseVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117504109912L;
+
+
+
+	@Override
+	public String toString() {
+		return "SysIntBaseVO{" +
+		"}" + super.toString();
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntHeaderVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntHeaderVO.java
new file mode 100644
index 0000000..a8fcb3a
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntHeaderVO.java
@@ -0,0 +1,80 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+public class SysIntHeaderVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117938037102L;
+
+	/**
+	 * 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/vo/pagemodel/SysIntInfoVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntInfoVO.java
new file mode 100644
index 0000000..774e657
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntInfoVO.java
@@ -0,0 +1,746 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+import java.util.List;
+
+/**
+ * 绯荤粺闆嗘垚鍩虹淇℃伅鏄剧ず瀵硅薄
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public class SysIntInfoVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117716142069L;
+
+	/**
+	* 璁よ瘉鏂瑰紡
+	*/
+	private String authorityoid;
+
+	/**
+	* 璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	*/
+	private String authorityoidName;
+
+	/**
+	 * 璁よ瘉鏂瑰紡
+	 */
+	private String authorityType;
+
+	/**
+	 * 璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+	 */
+	private String authorityTypeText;
+
+	/**
+	 * 楠岃瘉鐢ㄦ埛
+	 */
+	private String userAccount;
+
+	/**
+	 * 楠岃瘉瀵嗙爜
+	 */
+	private String userCode;
+
+	/**
+	 * 楠岃瘉浠ょ墝
+	 */
+	private String token;
+
+	/**
+	 * 鎺ュ彛鍑芥暟
+	 */
+	private String interfaceFunction;
+
+	/**
+	 * 鎺ュ彛鎻忚堪
+	 */
+	private String description;
+
+
+	/**
+	* 鎺ュ彛绫诲瀷
+	*/
+	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 sourceSysName;
+
+	/**
+	 * 鏉ユ簮绯荤粺鏍囪瘑
+	 */
+	private String sourceSysId;
+
+	/**
+	* 鏉ユ簮绯荤粺涓婚敭鏄剧ず鏂囨湰
+	*/
+	private String sourcesystemoidName;
+
+	/**
+	* 鐩爣绯荤粺涓婚敭
+	*/
+	private String targetsystemoid;
+
+	/**
+	 * 鐩爣绯荤粺鍚嶇О
+	 */
+	private String targetSysName;
+
+	/**
+	 * 鐩爣绯荤粺鏍囪瘑
+	 */
+	private String targetSysId;
+
+	/**
+	* 鐩爣绯荤粺涓婚敭鏄剧ず鏂囨湰
+	*/
+	private String targetsystemoidName;
+
+	/**
+	 * 绫昏矾寰�
+	 */
+	private String classPath;
+
+	/**
+	 * 鏁版嵁娴佸悜鏂瑰紡
+	 */
+	private String dataFlowType;
+
+	/**
+	 * 鏁版嵁娴佸悜鏂瑰紡鐨勬樉绀哄瓧娈�
+	 */
+	private String dataFlowTypeText;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨�
+	 */
+	private String btmTypeId;
+
+	/**
+	 * 瀛樺偍鐨勪笟鍔$被鍨嬬殑涓枃鍚嶇О
+	 */
+	private String btmTypeName;
+
+	/**
+	 * 鍛藉悕绌洪棿
+	 */
+	private String namespace;
+
+	/**
+	 * soapAction
+	 */
+	private String soapaction;
+
+	/**
+	 * cxfaxis
+	 */
+	private String cxfaxis;
+
+	/**
+	 * 鍙傛暟鍚嶇О
+	 */
+	private String targName;
+
+	/***
+	 * 鎺ㄩ�佺被鍨� 1:鏁版嵁鎺ㄩ��/2鍒嗙被鎺ㄩ�侊紝榛樿鏁版嵁鎺ㄩ��
+	 */
+	private String pushType;
+	/***
+	 * 鎺ㄩ�佺被鍨嬫樉绀哄��
+	 */
+	private String pushTypeText;
+
+	/**
+	 * 鍒嗙被id
+	 */
+	private String classifyid;
+
+	/**
+	 * 鍒嗙被鍚嶇О
+	 */
+	private String classifyname;
+
+	/***
+	 * 鍙傛暟淇℃伅瀵硅薄
+	 */
+	private List<SysIntParamVO> sysIntParamVOs;
+	/***
+	 * header淇℃伅瀵硅薄
+	 */
+	private List<SysIntHeaderVO> sysIntHeaderVOs;
+
+	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 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 getClassPath() {
+		return classPath;
+	}
+
+	public void setClassPath(String classPath) {
+		this.classPath = classPath;
+	}
+
+	/**
+	 * 鑾峰彇 璁よ瘉鏂瑰紡
+	 */
+	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 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;
+	}
+
+	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;
+	}
+
+	public String getAuthorityType() {
+		return authorityType;
+	}
+
+	public void setAuthorityType(String authorityType) {
+		this.authorityType = authorityType;
+	}
+
+	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;
+	}
+
+	public String getToken() {
+		return token;
+	}
+
+	public void setToken(String token) {
+		this.token = token;
+	}
+
+	public String getInterfaceFunction() {
+		return interfaceFunction;
+	}
+
+	public void setInterfaceFunction(String interfaceFunction) {
+		this.interfaceFunction = interfaceFunction;
+	}
+
+	@Override
+	public String getDescription() {
+		return description;
+	}
+
+	@Override
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getAuthorityTypeText() {
+		return authorityTypeText;
+	}
+
+	public void setAuthorityTypeText(String authorityTypeText) {
+		this.authorityTypeText = authorityTypeText;
+	}
+
+	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 getSysbaseid() {
+		return sysbaseid;
+	}
+
+	public void setSysbaseid(String sysbaseid) {
+		this.sysbaseid = sysbaseid;
+	}
+
+	public String getPushType() {
+		return pushType;
+	}
+
+	public void setPushType(String pushType) {
+		this.pushType = pushType;
+	}
+
+	public String getPushTypeText() {
+		return pushTypeText;
+	}
+
+	public void setPushTypeText(String pushTypeText) {
+		this.pushTypeText = pushTypeText;
+	}
+
+	public List<SysIntParamVO> getSysIntParamVOs() {
+		return sysIntParamVOs;
+	}
+
+	public void setSysIntParamVOs(List<SysIntParamVO> sysIntParamVOs) {
+		this.sysIntParamVOs = sysIntParamVOs;
+	}
+
+	public List<SysIntHeaderVO> getSysIntHeaderVOs() {
+		return sysIntHeaderVOs;
+	}
+
+	public void setSysIntHeaderVOs(List<SysIntHeaderVO> sysIntHeaderVOs) {
+		this.sysIntHeaderVOs = sysIntHeaderVOs;
+	}
+
+	@Override
+	public String toString() {
+		return "SysIntInfoVO{" +
+				"authorityoid='" + authorityoid + '\'' +
+				", authorityoidName='" + authorityoidName + '\'' +
+				", authorityType='" + authorityType + '\'' +
+				", authorityTypeText='" + authorityTypeText + '\'' +
+				", userAccount='" + userAccount + '\'' +
+				", userCode='" + userCode + '\'' +
+				", token='" + token + '\'' +
+				", interfaceFunction='" + interfaceFunction + '\'' +
+				", description='" + description + '\'' +
+				", 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 + '\'' +
+				", sourceSysName='" + sourceSysName + '\'' +
+				", sourceSysId='" + sourceSysId + '\'' +
+				", sourcesystemoidName='" + sourcesystemoidName + '\'' +
+				", targetsystemoid='" + targetsystemoid + '\'' +
+				", targetSysName='" + targetSysName + '\'' +
+				", targetSysId='" + targetSysId + '\'' +
+				", targetsystemoidName='" + targetsystemoidName + '\'' +
+				", classPath='" + classPath + '\'' +
+				", dataFlowType='" + dataFlowType + '\'' +
+				", dataFlowTypeText='" + dataFlowTypeText + '\'' +
+				", btmTypeId='" + btmTypeId + '\'' +
+				", btmTypeName='" + btmTypeName + '\'' +
+				", namespace='" + namespace + '\'' +
+				", soapaction='" + soapaction + '\'' +
+				", cxfaxis='" + cxfaxis + '\'' +
+				", targName='" + targName + '\'' +
+				", pushType='" + pushType + '\'' +
+				", pushTypeText='" + pushTypeText + '\'' +
+				", classifyid='" + classifyid + '\'' +
+				", classifyname='" + classifyname + '\'' +
+				", sysIntParamVOs=" + sysIntParamVOs +
+				", sysIntHeaderVOs=" + sysIntHeaderVOs +
+				'}';
+	}
+}
diff --git a/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntParamVO.java b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntParamVO.java
new file mode 100644
index 0000000..1715eb8
--- /dev/null
+++ b/Source/BladeX/blade-service-api/blade-code-api/src/main/java/org/springblade/code/vo/pagemodel/SysIntParamVO.java
@@ -0,0 +1,80 @@
+package org.springblade.code.vo.pagemodel;
+
+import com.vci.starter.web.pagemodel.BaseModelVO;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹樉绀哄璞�
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+public class SysIntParamVO extends BaseModelVO {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118871819648L;
+
+	/**
+	 * 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/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
index 8df8b8a..e6f4c9a 100644
--- 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
@@ -2,7 +2,7 @@
 
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import com.vci.mdm.model.universalInter.apply.UserVO;
+import org.springblade.code.vo.universalInter.apply.UserVO;
 
 @XStreamAlias("data")
 public class QueryData {
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
index 534ad93..2cc3505 100644
--- 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
@@ -2,7 +2,7 @@
 
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
-import com.vci.mdm.model.universalInter.apply.UserVO;
+import org.springblade.code.vo.universalInter.apply.UserVO;
 
 @XStreamAlias("condtions")
 public class CondtionsVO {
diff --git a/Source/BladeX/blade-service-api/pom.xml b/Source/BladeX/blade-service-api/pom.xml
index effd0cb..b4a57f8 100644
--- a/Source/BladeX/blade-service-api/pom.xml
+++ b/Source/BladeX/blade-service-api/pom.xml
@@ -22,7 +22,6 @@
         <module>blade-system-api</module>
         <module>blade-user-api</module>
         <module>blade-code-api</module>
-        <module>blade-omd-api</module>
     </modules>
 
     <dependencies>
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
index 0d962af..d7aa555 100644
--- 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
@@ -16,12 +16,13 @@
  */
 package org.springblade.code;
 
+import org.springblade.common.constant.CommonConstant;
 import org.springblade.core.cloud.client.BladeCloudApplication;
 import org.springblade.core.launch.BladeApplication;
 import org.springblade.core.launch.constant.AppConstant;
 
 /**
- * Desk鍚姩鍣�
+ * Code鍚姩鍣�
  *
  * @author ludc
  */
@@ -29,7 +30,7 @@
 public class CodeApplication {
 
 	public static void main(String[] args) {
-		BladeApplication.run(AppConstant.APPLICATION_DESK_NAME, CodeApplication.class, args);
+		BladeApplication.run(AppConstant.APPLICATION_NAME_PREFIX+ CommonConstant.CODE_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
index c3d10f2..ca8619c 100644
--- 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
@@ -1,9 +1,10 @@
 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.springblade.code.service.CodeDuckingSyncServiceI;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
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
index 38f6e7d..01c6d4b 100644
--- 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
@@ -1,9 +1,9 @@
 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.springblade.code.service.CodeDuckingSyncServiceI;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
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
index 81b8f41..6529118 100644
--- 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
@@ -1,9 +1,10 @@
 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.springblade.code.service.CodeDuckingServiceI;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
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
index 4b8c615..bb6c769 100644
--- 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
@@ -3,14 +3,14 @@
 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.springblade.code.dto.datapush.result.ResultJsonDTO;
+import org.springblade.code.dto.datapush.result.ResultNodeDataDTO;
+import org.springblade.code.dto.datapush.result.ResultNodeObjectDTO;
+import org.springblade.code.service.UniversalInterfaceI;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
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
index 3363a60..acd9f74 100644
--- 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
@@ -1,14 +1,14 @@
 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.springblade.code.dto.CodeBasicSecDTO;
+import org.springblade.code.service.CodeBasicSecServiceI;
+import org.springblade.code.vo.pagemodel.CodeBasicSecVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
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
index 4285c64..d3b6f49 100644
--- 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
@@ -1,17 +1,16 @@
 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.springblade.code.dto.CodeButtonDTO;
+import org.springblade.code.service.CodeButtonServiceI;
+import org.springblade.code.vo.pagemodel.CodeButtonVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Collection;
-
 
 /**
  * 涓绘暟鎹腑鐨勬寜閽墿灞曟帶鍒跺櫒
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
index fd3a904..233f74a 100644
--- 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
@@ -1,15 +1,16 @@
 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.apache.commons.lang.StringUtils;
+import org.springblade.code.dto.CodeClassifyDTO;
+import org.springblade.code.service.CodeClassifyServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -23,7 +24,6 @@
 
 import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.FRAMEWORK_DATA_DISABLED;
 import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED;
-
 
 /**
  * 涓婚搴撳垎绫绘帶鍒跺櫒
@@ -47,7 +47,7 @@
      */
     @GetMapping("/treeCodeClassify")
     public List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject)  {
-        return  codeClassifyService.treeCodeClassify(treeQueryObject);
+        return codeClassifyService.treeCodeClassify(treeQueryObject);
     }
 
     /**
@@ -182,7 +182,7 @@
      * @throws IOException 鎶涘嚭寮傚父
      */
     @GetMapping("/downloadImportExcel")
-    public void downloadImportExcel(HttpServletResponse response) throws IOException{
+    public void downloadImportExcel(HttpServletResponse response) throws IOException {
         String excelName = codeClassifyService.createImportExcel();
         try {
             ControllerUtil.writeFileToResponse(response,excelName);
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
index 705d418..c56f24a 100644
--- 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
@@ -1,18 +1,17 @@
 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.springblade.code.dto.CodeClassifyProcessTempDTO;
+import org.springblade.code.service.CodeClassifyProcessTempServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyProcessTempVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Collection;
 import java.util.List;
-
 
 /**
  * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎帶鍒跺櫒
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
index 4f7f95c..6aa3cbc 100644
--- 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
@@ -1,12 +1,13 @@
 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.springblade.code.dto.CodeClassifyTempMapItemDTO;
+import org.springblade.code.service.CodeClassifyTempMapItemServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyTempMapItemVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
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
index c62e088..4a450af 100644
--- 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
@@ -1,20 +1,20 @@
 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.springblade.code.dto.CodeClassifyTemplateAttrDTO;
+import org.springblade.code.service.CodeClassifyTemplateAttrServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
 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;
-
 
 /**
  * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф帶鍒跺櫒
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
index 34c5782..dbb63b0 100644
--- 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
@@ -1,17 +1,16 @@
 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.springblade.code.dto.CodeClassifyTemplateButtonDTO;
+import org.springblade.code.service.CodeClassifyTemplateButtonServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Collection;
-
 
 /**
  * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽帶鍒跺櫒
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
index 6e4db67..f36d86d 100644
--- 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
@@ -1,17 +1,16 @@
 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.springblade.code.dto.CodeClassifyTemplateDTO;
+import org.springblade.code.lifecycle.CodeClassifyTemplateLC;
+import org.springblade.code.service.CodeClassifyTemplateServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Collection;
 import java.util.List;
-
 
 /**
  * 鍒嗙被妯℃澘瀵硅薄鎺у埗鍣�
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
index 9e88c95..3a24513 100644
--- 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
@@ -1,12 +1,13 @@
 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.springblade.code.dto.CodeClassifyTemplateMapDTO;
+import org.springblade.code.service.CodeClassifyTemplateMapServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateMapVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
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
index fab5547..1fbb15b 100644
--- 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
@@ -1,14 +1,15 @@
 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.springblade.code.dto.CodeClassifyValueDTO;
+import org.springblade.code.service.CodeClassifyValueServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyValueVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
@@ -17,7 +18,6 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-
 
 /**
  * 鍒嗙被鐮佹鐨勭爜鍊兼帶鍒跺櫒
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
index 905c58c..03343df 100644
--- 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
@@ -1,18 +1,27 @@
 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.springblade.code.dto.CodeOrderDTO;
+import org.springblade.code.dto.DockingPreApplyDataDTO;
+import org.springblade.code.dto.DockingPreAttrMappingDTO;
+import org.springblade.code.dto.PreApplyCodeOrderDTO;
+import org.springblade.code.model.DockingDataDO;
+import org.springblade.code.model.DockingLogeDO;
+import org.springblade.code.model.DockingTaskDO;
+import org.springblade.code.model.SysIntHeaderDO;
+import org.springblade.code.service.CodeDuckingServiceI;
+import org.springblade.code.service.CodeDuckingSyncServiceI;
+import org.springblade.code.service.DockingPreApplyDataServiceI;
+import org.springblade.code.service.DockingPreAttrMappingSeviceI;
+import org.springblade.code.vo.pagemodel.DockingPreApplyDataVO;
+import org.springblade.code.vo.pagemodel.DockingPreAttrMappingVO;
+import org.springblade.code.vo.pagemodel.DockingPreAttrRangeVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -21,8 +30,7 @@
 import java.util.List;
 import java.util.Map;
 
-import static com.vci.mdm.constant.MdmDuckingConstant.DATA_LOGE_OUT;
-
+import static org.springblade.code.constant.MdmDuckingConstant.DATA_LOGE_OUT;
 
 /**
  * 涓绘暟鎹紪鐮侀�氱敤闆嗘垚鎺у埗鍣�
@@ -83,7 +91,7 @@
      * @return
      */
     @GetMapping("/gridApplyData")
-    public DataGrid<Map<String,String>> gridApplyData(String codeClassifyOid,String templateOid,String btmType,String dataOids){
+    public DataGrid<Map<String,String>> gridApplyData(String codeClassifyOid, String templateOid, String btmType, String dataOids){
         return  dockingPreApplyDataServiceI.gridApplyData(codeClassifyOid,templateOid,btmType,dataOids);
     }
 
@@ -201,7 +209,7 @@
     public DataGrid<DockingLogeDO> gridLoge(BaseQueryObject baseQueryObject){
         if(baseQueryObject == null){
             baseQueryObject = new BaseQueryObject();
-            Map<String, String>  queryMap = baseQueryObject.getConditionMap();
+            Map<String, String> queryMap = baseQueryObject.getConditionMap();
             queryMap.put("type",DATA_LOGE_OUT);
         }
         return codeDuckingServiceI.gridLoge(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
@@ -241,7 +249,7 @@
      * @return
      */
     @GetMapping("/gridAttrMapping")
-    public DataGrid<DockingPreAttrMappingVO> gridAttrMappings(String sourceClsfId,String templateOid,int type, BaseQueryObject baseQueryObject){
+    public DataGrid<DockingPreAttrMappingVO> gridAttrMappings(String sourceClsfId, String templateOid, int type, BaseQueryObject baseQueryObject){
         if(baseQueryObject == null){
             baseQueryObject = new BaseQueryObject();
         }
@@ -256,7 +264,7 @@
      * @return
      */
     @GetMapping("/gridAttrRanges")
-    public DataGrid<DockingPreAttrRangeVO> gridAttrRanges(String attrOid,int type,BaseQueryObject baseQueryObject){
+    public DataGrid<DockingPreAttrRangeVO> gridAttrRanges(String attrOid, int type, BaseQueryObject baseQueryObject){
         if(baseQueryObject == null){
             baseQueryObject = new BaseQueryObject();
         }
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
index 7ed8684..1dfa8ae 100644
--- 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
@@ -1,14 +1,15 @@
 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.springblade.code.dto.CodeFixedValueDTO;
+import org.springblade.code.service.CodeFixedValueServiceI;
+import org.springblade.code.vo.pagemodel.CodeFixedValueVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
@@ -17,7 +18,6 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-
 
 /**
  * 鍥哄畾鐮佹鐨勭爜鍊兼帶鍒跺櫒
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
index d5d1205..3e07fee 100644
--- 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
@@ -6,13 +6,12 @@
 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.springblade.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Collection;
-
 
 /**
  * 鍏抽敭鏁版嵁鏌ラ噸瑙勫垯鎺у埗鍣�
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
index 1fb5646..ab3efc0 100644
--- 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
@@ -1,17 +1,17 @@
 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.springblade.code.dto.CodePhaseAttrDTO;
+import org.springblade.code.service.CodePhaseAttrServiceI;
+import org.springblade.code.vo.pagemodel.CodePhaseAttrVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Collection;
-
 
 /**
  * 闃舵鐨勫睘鎬ф帶鍒跺櫒
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
index 92303cb..4365759 100644
--- 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
@@ -1,17 +1,17 @@
 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.springblade.code.dto.CodeResembleRuleDTO;
+import org.springblade.code.service.CodeResembleRuleServiceI;
+import org.springblade.code.vo.pagemodel.CodeResembleRuleVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Collection;
-
 
 /**
  * 鐩镐技鏌ヨ瑙勫垯鎺у埗鍣�
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
index ae1dec9..f009539 100644
--- 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
@@ -1,13 +1,14 @@
 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.springblade.code.dto.CodeRuleDTO;
+import org.springblade.code.service.CodeRuleServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyVO;
+import org.springblade.code.vo.pagemodel.CodeRuleVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
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
index b5ebf20..ff58b66 100644
--- 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
@@ -1,8 +1,9 @@
 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.springblade.code.service.CodeSerialAlgorithmServiceI;
+import org.springblade.code.vo.pagemodel.CodeSerialAlgorithmVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
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
index 7e2c5f3..bb59f9c 100644
--- 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
@@ -1,12 +1,13 @@
 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.springblade.code.dto.CodeSynonymDTO;
+import org.springblade.code.service.CodeSynonymServiceI;
+import org.springblade.code.vo.pagemodel.CodeSynonymVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
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
index e5e758e..0a937f5 100644
--- 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
@@ -1,13 +1,14 @@
 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.springblade.code.dto.CodeTemplatePhaseDTO;
+import org.springblade.code.service.CodeTemplatePhaseServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import org.springblade.code.vo.pagemodel.CodeTemplatePhaseVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
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
index cb57d90..baeadd4 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodeAllCodeDO;
 
 import java.util.Collection;
 import java.util.List;
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
index 1ed80cd..3c60430 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodeBasicSecDO;
 
 import java.util.Collection;
 import java.util.List;
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
index f914614..c943971 100644
--- 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
@@ -1,9 +1,10 @@
 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 org.springblade.code.model.CodeButtonDO;
 
 import java.util.Collection;
 import java.util.List;
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
index 71499c9..1b89f08 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodeClassifyDO;
 
 import java.util.Collection;
 import java.util.List;
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
index f20c395..41b4169 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodeClassifyProcessTempDO;
 
 import java.util.Collection;
 import java.util.List;
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
index 01a6e26..b310840 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodeClassifyTempMapItemDO;
 
 import java.util.Collection;
 import java.util.List;
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
index f12976d..0b3b07c 100644
--- 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
@@ -1,9 +1,10 @@
 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 org.springblade.code.model.CodeClassifyTemplateAttrDO;
 
 import java.util.Collection;
 import java.util.List;
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
index 5741fbe..2061b54 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodeClassifyTemplateButtonDO;
 
 import java.util.Collection;
 import java.util.List;
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
index 1411914..7631fc2 100644
--- 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
@@ -1,9 +1,10 @@
 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 org.springblade.code.model.CodeClassifyTemplateDO;
 
 import java.util.Collection;
 import java.util.List;
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
index 459871a..6c9b9f9 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodeClassifyTemplateMapDO;
 
 import java.util.Collection;
 import java.util.List;
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
index e32e185..c493bb4 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodeClassifyValueDO;
 
 import java.util.Collection;
 import java.util.List;
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
index 8e9021d..9a62c19 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodeFixedValueDO;
 
 import java.util.Collection;
 import java.util.List;
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
index 076b034..4321057 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodePhaseAttrDO;
 
 import java.util.Collection;
 import java.util.List;
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
index 7bdb879..1cd39bf 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodeResembleRuleDO;
 
 import java.util.Collection;
 import java.util.List;
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
index e70cee3..c95c33b 100644
--- 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
@@ -1,9 +1,9 @@
 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 org.springblade.code.model.CodeRuleDO;
 
 import java.util.Collection;
 import java.util.List;
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
index 6f644b1..9541cc0 100644
--- 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
@@ -1,9 +1,10 @@
 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 org.springblade.code.model.CodeSerialValueDO;
 
 import java.util.Collection;
 import java.util.List;
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
index 96317ce..b6968d5 100644
--- 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
@@ -1,9 +1,10 @@
 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 org.springblade.code.model.CodeSynonymDO;
 
 import java.util.Collection;
 import java.util.List;
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
index a170046..90c9d4d 100644
--- 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
@@ -1,9 +1,10 @@
 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 org.springblade.code.model.CodeTemplatePhaseDO;
 
 import java.util.Collection;
 import java.util.List;
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingDataDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingDataDaoI.java
new file mode 100644
index 0000000..9232c94
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingDataDaoI.java
@@ -0,0 +1,128 @@
+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.DockingDataDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+public interface DockingDataDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(DockingDataDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<DockingDataDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	DockingDataDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingDataDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<DockingDataDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<DockingDataDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(DockingDataDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<DockingDataDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingDataDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingDataDO> 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/DockingLogeDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingLogeDaoI.java
new file mode 100644
index 0000000..e53ff61
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingLogeDaoI.java
@@ -0,0 +1,128 @@
+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.DockingLogeDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+public interface DockingLogeDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(DockingLogeDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<DockingLogeDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	DockingLogeDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingLogeDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<DockingLogeDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<DockingLogeDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(DockingLogeDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇楁暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<DockingLogeDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingLogeDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingLogeDO> 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/DockingPreApplyDataDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataDaoI.java
new file mode 100644
index 0000000..171b997
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataDaoI.java
@@ -0,0 +1,127 @@
+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.DockingPreApplyDataDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+public interface  DockingPreApplyDataDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(DockingPreApplyDataDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<DockingPreApplyDataDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	DockingPreApplyDataDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingPreApplyDataDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<DockingPreApplyDataDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<DockingPreApplyDataDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(DockingPreApplyDataDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<DockingPreApplyDataDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingPreApplyDataDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingPreApplyDataDO> 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/DockingPreApplyDataInfoDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataInfoDaoI.java
new file mode 100644
index 0000000..b639407
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreApplyDataInfoDaoI.java
@@ -0,0 +1,128 @@
+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.DockingPreApplyDataInfoDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁鎿嶄綔灞�
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+public interface  DockingPreApplyDataInfoDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(DockingPreApplyDataInfoDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<DockingPreApplyDataInfoDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	DockingPreApplyDataInfoDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingPreApplyDataInfoDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<DockingPreApplyDataInfoDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<DockingPreApplyDataInfoDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(DockingPreApplyDataInfoDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<DockingPreApplyDataInfoDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingPreApplyDataInfoDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingPreApplyDataInfoDO> 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/DockingPreAttrMappingDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrMappingDaoI.java
new file mode 100644
index 0000000..f1d0502
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrMappingDaoI.java
@@ -0,0 +1,133 @@
+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.DockingPreAttrMappingDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 灞炴�ф槧灏勯厤缃暟鎹俊鎭暟鎹搷浣滃眰
+ *
+ * @author xiejun
+ * @date 2023-01-06
+ */
+public interface DockingPreAttrMappingDaoI {
+
+    /**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+    BatchCBO deleteByPrimaryKey(String oid);
+
+    /**
+     * 娣诲姞鏁版嵁
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    BatchCBO insert(DockingPreAttrMappingDO record);
+
+    /**
+     * 鎵归噺娣诲姞鏁版嵁
+     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+     * @return 鎵ц缁撴灉鏁�
+     */
+    BatchCBO batchInsert(List<DockingPreAttrMappingDO> records);
+
+    /**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+    DockingPreAttrMappingDO selectByPrimaryKey(String oid);
+
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    List<DockingPreAttrMappingDO> selectByPrimaryKeys(String oids);
+
+    /**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+    List<DockingPreAttrMappingDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+    /**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+    List<DockingPreAttrMappingDO> selectAll();
+
+    /**
+     * 鏇存柊瀵硅薄
+     * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    BatchCBO updateByPrimaryKey(DockingPreAttrMappingDO record);
+
+    /**
+     * 鎵归噺鏇存柊
+     * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+     * @return 鎵ц缁撴灉琛屾暟
+     */
+    BatchCBO batchUpdate(List<DockingPreAttrMappingDO> records);
+
+    /**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    List<DockingPreAttrMappingDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+    /**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+    Long countByCondition(Map<String,String> conditionMap);
+
+    /**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+    List<DockingPreAttrMappingDO> 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);
+
+    /**
+     * 鏍规嵁oid鏌ヨ鏁版嵁
+     * @param oids 瀵硅薄鐨勪富閿泦鍚�
+     * @return 鍙楀奖鍝嶇殑琛屾暟
+     */
+    public List<DockingPreAttrMappingDO> selectByOid(String oids);
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrRangeDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrRangeDaoI.java
new file mode 100644
index 0000000..bf5c989
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingPreAttrRangeDaoI.java
@@ -0,0 +1,126 @@
+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.DockingPreAttrRangeDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+public interface DockingPreAttrRangeDaoI {
+        /**
+         * 浣跨敤涓婚敭鍒犻櫎
+         * @param oid 鏁版嵁涓婚敭
+         * @return 鎵ц缁撴灉
+         */
+        BatchCBO deleteByPrimaryKey(String oid);
+
+        /**
+         * 娣诲姞鏁版嵁
+         * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+         * @return 鎵ц缁撴灉
+         */
+        BatchCBO insert(DockingPreAttrRangeDO record);
+
+        /**
+         * 鎵归噺娣诲姞鏁版嵁
+         * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+         * @return 鎵ц缁撴灉鏁�
+         */
+        BatchCBO batchInsert(List<DockingPreAttrRangeDO> records);
+
+        /**
+         * 鏍规嵁涓婚敭鏌ヨ
+         * @param oid 鏁版嵁涓婚敭
+         * @return 鏁版嵁瀵硅薄
+         */
+        DockingPreAttrRangeDO selectByPrimaryKey(String oid);
+
+        /**
+         * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+         * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+         * @return 鏁版嵁瀵硅薄鍒楄〃
+         */
+        List<DockingPreAttrRangeDO> selectByPrimaryKeys(String oids);
+
+        /**
+         * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+         * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+         * @return 涓氬姟瀵硅薄
+         */
+        List<DockingPreAttrRangeDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+        /**
+         * 鏌ヨ鎵�鏈夊垎绫�
+         * @return 鏌ヨ缁撴灉
+         */
+        List<DockingPreAttrRangeDO> selectAll();
+
+        /**
+         * 鏇存柊瀵硅薄
+         * @param record 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄
+         * @return 鎵ц缁撴灉
+         */
+        BatchCBO updateByPrimaryKey(DockingPreAttrRangeDO record);
+
+        /**
+         * 鎵归噺鏇存柊
+         * @param records 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄闆嗗悎
+         * @return 鎵ц缁撴灉琛屾暟
+         */
+        BatchCBO batchUpdate(List<DockingPreAttrRangeDO> records);
+
+        /**
+         * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+         * @param conditionMap 鏌ヨ鏉′欢锛�
+         * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+         * @return 鏁版嵁瀵硅薄鍒楄〃
+         */
+        List<DockingPreAttrRangeDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+        /**
+         * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+         * @param conditionMap 鏌ヨ鏉′欢
+         * @return 鎬绘暟
+         */
+        Long countByCondition(Map<String,String> conditionMap);
+
+        /**
+         * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+         * @param queryWrapper 鏌ヨ灏佽鍣�
+         * @return 鏁版嵁瀵硅薄鍒楄〃
+         */
+        List<DockingPreAttrRangeDO> 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);
+
+        /**
+         * 鏍规嵁灞炴�т富閿壒閲忚幏鍙栧璞�
+         * @param attrOid 涓婚敭
+         * @return 鏁版嵁瀵硅薄鍒楄〃
+         */
+        List<DockingPreAttrRangeDO> selectByAttrOid(String attrOid);
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingTaskDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingTaskDaoI.java
new file mode 100644
index 0000000..15678d8
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/DockingTaskDaoI.java
@@ -0,0 +1,127 @@
+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.DockingTaskDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-03-28
+ */
+public interface  DockingTaskDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(DockingTaskDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<DockingTaskDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	DockingTaskDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingTaskDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<DockingTaskDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<DockingTaskDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(DockingTaskDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔℃暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<DockingTaskDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingTaskDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<DockingTaskDO> 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/SysIntAuthorityDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntAuthorityDaoI.java
new file mode 100644
index 0000000..82c573b
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntAuthorityDaoI.java
@@ -0,0 +1,128 @@
+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.SysIntAuthorityDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public interface  SysIntAuthorityDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(SysIntAuthorityDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<SysIntAuthorityDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	SysIntAuthorityDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntAuthorityDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<SysIntAuthorityDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<SysIntAuthorityDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(SysIntAuthorityDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<SysIntAuthorityDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntAuthorityDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntAuthorityDO> 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/SysIntBaseDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntBaseDaoI.java
new file mode 100644
index 0000000..d12e1f7
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntBaseDaoI.java
@@ -0,0 +1,128 @@
+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.SysIntBaseDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹搷浣滃眰
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public interface  SysIntBaseDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(SysIntBaseDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<SysIntBaseDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	SysIntBaseDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntBaseDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<SysIntBaseDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<SysIntBaseDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(SysIntBaseDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<SysIntBaseDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntBaseDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntBaseDO> 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/SysIntHeaderDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntHeaderDaoI.java
new file mode 100644
index 0000000..961f3da
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntHeaderDaoI.java
@@ -0,0 +1,143 @@
+package org.springblade.code.dao;
+
+
+import com.vci.starter.web.pagemodel.BaseResult;
+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.SysIntHeaderDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+public interface  SysIntHeaderDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(SysIntHeaderDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<SysIntHeaderDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	SysIntHeaderDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntHeaderDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<SysIntHeaderDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<SysIntHeaderDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(SysIntHeaderDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<SysIntHeaderDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntHeaderDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntHeaderDO> 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);
+
+	//==
+
+	/**
+	 * 鏍规嵁sysinfo涓婚敭鎵归噺鑾峰彇瀵硅薄
+	 * @param sysinfoOid 涓婚敭
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	List<SysIntHeaderDO> selectBySysinfoOid(String sysinfoOid);
+
+	/**
+	 * 鎵归噺淇敼杩欎釜sysinfo鐨刪eader锛屽厛鍒犻櫎sysinfo鎵�鏈夌殑header,鍐嶆柊寤烘墍鏈夌殑
+	 * @param records
+	 */
+	BaseResult updateSysinfoHeader(List<SysIntHeaderDO> records);
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntInfoDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntInfoDaoI.java
new file mode 100644
index 0000000..ea2528c
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntInfoDaoI.java
@@ -0,0 +1,127 @@
+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.SysIntInfoDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁鎿嶄綔灞�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public interface  SysIntInfoDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(SysIntInfoDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<SysIntInfoDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	SysIntInfoDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntInfoDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<SysIntInfoDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<SysIntInfoDO> selectAll(Map conditonMap);
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(SysIntInfoDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄闆嗗悎
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<SysIntInfoDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntInfoDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntInfoDO> 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/SysIntParamDaoI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntParamDaoI.java
new file mode 100644
index 0000000..47282da
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/dao/SysIntParamDaoI.java
@@ -0,0 +1,144 @@
+package org.springblade.code.dao;
+
+
+import com.vci.starter.web.pagemodel.BaseResult;
+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.SysIntParamDO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹搷浣滃眰
+ *
+ * @author weidy
+ * @date 2022-04-11
+ */
+public interface  SysIntParamDaoI {
+
+	/**
+     * 浣跨敤涓婚敭鍒犻櫎
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO deleteByPrimaryKey(String oid);
+
+	/**
+     * 娣诲姞鏁版嵁
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO insert(SysIntParamDO record);
+
+	/**
+	* 鎵归噺娣诲姞鏁版嵁
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉鏁�
+	*/
+	BatchCBO batchInsert(List<SysIntParamDO> records);
+
+	/**
+     * 鏍规嵁涓婚敭鏌ヨ
+     * @param oid 鏁版嵁涓婚敭
+     * @return 鏁版嵁瀵硅薄
+     */
+	SysIntParamDO selectByPrimaryKey(String oid);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鑾峰彇瀵硅薄
+     * @param oids 涓婚敭锛屽寘鍚崟寮曞彿,浣嗘槸涓嶈兘瓒呰繃1000
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntParamDO> selectByPrimaryKeys(String oids);
+
+	/**
+     * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+     * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+     * @return 涓氬姟瀵硅薄
+     */
+	List<SysIntParamDO> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
+     * 鏌ヨ鎵�鏈夊垎绫�
+     * @return 鏌ヨ缁撴灉
+     */
+	List<SysIntParamDO> selectAll();
+
+	/**
+     * 鏇存柊瀵硅薄
+     * @param record 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�
+     * @return 鎵ц缁撴灉
+     */
+	BatchCBO updateByPrimaryKey(SysIntParamDO record);
+
+	/**
+	* 鎵归噺鏇存柊
+	* @param records 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞¢泦鍚�
+	* @return 鎵ц缁撴灉琛屾暟
+	*/
+	BatchCBO batchUpdate(List<SysIntParamDO> records);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     * @param conditionMap 鏌ヨ鏉′欢锛�
+     * @param pageHelper 鍖呮嫭鍒嗛〉锛屾帓搴�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntParamDO> selectByCondition(Map<String,String> conditionMap, PageHelper pageHelper);
+
+	/**
+     * 鏍规嵁鏌ヨ鏉′欢鏉ユ煡璇㈡�绘暟
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @return 鎬绘暟
+     */
+	Long countByCondition(Map<String,String> conditionMap);
+
+	/**
+     * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+     * @param queryWrapper 鏌ヨ灏佽鍣�
+     * @return 鏁版嵁瀵硅薄鍒楄〃
+     */
+	List<SysIntParamDO> 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);
+
+	//==
+
+	/**
+	 * 鏍规嵁sysinfo涓婚敭鎵归噺鑾峰彇瀵硅薄
+	 * @param sysinfoOid 涓婚敭
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	List<SysIntParamDO> selectBySysinfoOid(String sysinfoOid);
+
+	/**
+	 * 鎵归噺淇敼杩欎釜sysinfo鐨刾aram锛屽厛鍒犻櫎sysinfo鎵�鏈夌殑header,鍐嶆柊寤烘墍鏈夌殑
+	 * @param records
+	 */
+	BaseResult updateSysinfoParam(List<SysIntParamDO> records);
+
+}
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
index 1af62aa..3fc6343 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeAllCodeDaoI;
+import org.springblade.code.model.CodeAllCodeDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -29,7 +30,7 @@
  * @date 2022-03-01
  */
 @Repository
-public class  CodeAllCodeDaoImpl implements CodeAllCodeDaoI{
+public class  CodeAllCodeDaoImpl implements CodeAllCodeDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index a1310f2..8e93f0d 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -11,6 +10,8 @@
 import com.vci.web.service.WebBoServiceI;
 import com.vci.web.util.WebUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeBasicSecDaoI;
+import org.springblade.code.model.CodeBasicSecDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -30,7 +31,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeBasicSecDaoImpl implements CodeBasicSecDaoI{
+public class  CodeBasicSecDaoImpl implements CodeBasicSecDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index a859f1c..4610198 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeButtonDaoI;
+import org.springblade.code.model.CodeButtonDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -29,7 +30,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeButtonDaoImpl implements CodeButtonDaoI{
+public class  CodeButtonDaoImpl implements CodeButtonDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 58e3940..fbc6b81 100644
--- 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
@@ -1,8 +1,6 @@
 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;
@@ -12,6 +10,9 @@
 import com.vci.web.service.WebBoServiceI;
 import com.vci.web.util.PlatformClientUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.dao.CodeClassifyDaoI;
+import org.springblade.code.model.CodeClassifyDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -29,7 +30,7 @@
  * @date 2022-01-20
  */
 @Repository
-public class  CodeClassifyDaoImpl implements CodeClassifyDaoI{
+public class  CodeClassifyDaoImpl implements CodeClassifyDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 025502f..a59cbbc 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeClassifyProcessTempDaoI;
+import org.springblade.code.model.CodeClassifyProcessTempDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -29,7 +30,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeClassifyProcessTempDaoImpl implements CodeClassifyProcessTempDaoI{
+public class  CodeClassifyProcessTempDaoImpl implements CodeClassifyProcessTempDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 6460b90..6e8a771 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeClassifyTempMapItemDaoI;
+import org.springblade.code.model.CodeClassifyTempMapItemDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -27,7 +28,7 @@
  * @date 2022-03-10
  */
 @Repository
-public class  CodeClassifyTempMapItemDaoImpl implements CodeClassifyTempMapItemDaoI{
+public class  CodeClassifyTempMapItemDaoImpl implements CodeClassifyTempMapItemDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 80bed10..72e7176 100644
--- 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
@@ -1,7 +1,5 @@
 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;
@@ -10,6 +8,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeClassifyTemplateAttrDaoI;
+import org.springblade.code.model.CodeClassifyTemplateAttrDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -27,7 +27,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeClassifyTemplateAttrDaoImpl implements CodeClassifyTemplateAttrDaoI{
+public class  CodeClassifyTemplateAttrDaoImpl implements CodeClassifyTemplateAttrDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 05e5b4e..1fb87ee 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeClassifyTemplateButtonDaoI;
+import org.springblade.code.model.CodeClassifyTemplateButtonDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -27,7 +28,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeClassifyTemplateButtonDaoImpl implements CodeClassifyTemplateButtonDaoI{
+public class  CodeClassifyTemplateButtonDaoImpl implements CodeClassifyTemplateButtonDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 701576c..96d384b 100644
--- 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
@@ -1,10 +1,7 @@
 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;
@@ -12,7 +9,11 @@
 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.apache.commons.lang.StringUtils;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.dao.CodeClassifyTemplateDaoI;
+import org.springblade.code.lifecycle.CodeClassifyTemplateLC;
+import org.springblade.code.model.CodeClassifyTemplateDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -22,7 +23,6 @@
 
 import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
 
-
 /**
  * 鍒嗙被妯℃澘瀵硅薄鏁版嵁鎿嶄綔灞傚疄鐜扮被
  *
@@ -30,7 +30,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeClassifyTemplateDaoImpl implements CodeClassifyTemplateDaoI{
+public class  CodeClassifyTemplateDaoImpl implements CodeClassifyTemplateDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 66c620d..edc8d07 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeClassifyTemplateMapDaoI;
+import org.springblade.code.model.CodeClassifyTemplateMapDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -29,7 +30,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeClassifyTemplateMapDaoImpl implements CodeClassifyTemplateMapDaoI{
+public class  CodeClassifyTemplateMapDaoImpl implements CodeClassifyTemplateMapDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 1ceae22..0e24617 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeClassifyValueDaoI;
+import org.springblade.code.model.CodeClassifyValueDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -26,7 +27,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeClassifyValueDaoImpl implements CodeClassifyValueDaoI{
+public class  CodeClassifyValueDaoImpl implements CodeClassifyValueDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 6dfe48d..e41a21b 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeFixedValueDaoI;
+import org.springblade.code.model.CodeFixedValueDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import plm.bs.bom.clientobject.ClientBusinessObject;
@@ -30,7 +31,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeFixedValueDaoImpl implements CodeFixedValueDaoI{
+public class  CodeFixedValueDaoImpl implements CodeFixedValueDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 850c959..75f5a13 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -11,6 +10,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeKeyAttrRepeatRuleDaoI;
+import org.springblade.code.model.CodeKeyAttrRepeatRuleDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -31,7 +32,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeKeyAttrRepeatRuleDaoImpl implements CodeKeyAttrRepeatRuleDaoI{
+public class  CodeKeyAttrRepeatRuleDaoImpl implements CodeKeyAttrRepeatRuleDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 7ef1a0f..6c9def1 100644
--- 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
@@ -1,7 +1,5 @@
 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;
@@ -10,6 +8,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodePhaseAttrDaoI;
+import org.springblade.code.model.CodePhaseAttrDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -29,7 +29,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodePhaseAttrDaoImpl implements CodePhaseAttrDaoI{
+public class  CodePhaseAttrDaoImpl implements CodePhaseAttrDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 350efae..2e23d14 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeResembleRuleDaoI;
+import org.springblade.code.model.CodeResembleRuleDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -29,7 +30,7 @@
  * @date 2022-04-10
  */
 @Repository
-public class  CodeResembleRuleDaoImpl implements CodeResembleRuleDaoI{
+public class  CodeResembleRuleDaoImpl implements CodeResembleRuleDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index aee581b..725522c 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -12,6 +11,8 @@
 import com.vci.web.service.WebBoServiceI;
 import com.vci.web.util.WebUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeRuleDaoI;
+import org.springblade.code.model.CodeRuleDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -32,7 +33,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeRuleDaoImpl implements CodeRuleDaoI{
+public class  CodeRuleDaoImpl implements CodeRuleDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 94eba42..a67841e 100644
--- 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
@@ -1,7 +1,5 @@
 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;
@@ -10,6 +8,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeSerialValueDaoI;
+import org.springblade.code.model.CodeSerialValueDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -27,7 +27,7 @@
  * @date 2022-03-01
  */
 @Repository
-public class  CodeSerialValueDaoImpl implements CodeSerialValueDaoI{
+public class  CodeSerialValueDaoImpl implements CodeSerialValueDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index bfa8771..b7f9101 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeSynonymDaoI;
+import org.springblade.code.model.CodeSynonymDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -27,7 +28,7 @@
  * @date 2022-02-17
  */
 @Repository
-public class  CodeSynonymDaoImpl implements CodeSynonymDaoI{
+public class  CodeSynonymDaoImpl implements CodeSynonymDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 2148e43..fa61557 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.CodeTemplatePhaseDaoI;
+import org.springblade.code.model.CodeTemplatePhaseDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
@@ -29,7 +30,7 @@
  * @date 2022-01-24
  */
 @Repository
-public class  CodeTemplatePhaseDaoImpl implements CodeTemplatePhaseDaoI{
+public class  CodeTemplatePhaseDaoImpl implements CodeTemplatePhaseDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index f5928e2..311f157 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.DockingDataDaoI;
+import org.springblade.code.model.DockingDataDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
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
index a29cbe9..2481ba4 100644
--- 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
@@ -1,8 +1,6 @@
 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;
@@ -11,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.DockingLogeDaoI;
+import org.springblade.code.model.DockingLogeDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
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
index d09f54c..1a10965 100644
--- 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
@@ -1,8 +1,6 @@
 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;
@@ -10,7 +8,9 @@
 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.apache.commons.lang.StringUtils;
+import org.springblade.code.dao.DockingPreApplyDataDaoI;
+import org.springblade.code.model.DockingPreApplyDataDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
 
 /**
  * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁鎿嶄綔灞傚疄鐜扮被
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
index 676885d..9234eee 100644
--- 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
@@ -1,8 +1,6 @@
 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;
@@ -11,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.DockingPreApplyDataInfoDaoI;
+import org.springblade.code.model.DockingPreApplyDataInfoDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
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
index e7e116f..b8efb09 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -11,6 +10,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.DockingPreAttrMappingDaoI;
+import org.springblade.code.model.DockingPreAttrMappingDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
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
index 10fecd5..740b916 100644
--- 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
@@ -1,7 +1,5 @@
 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;
@@ -11,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.DockingPreAttrRangeDaoI;
+import org.springblade.code.model.DockingPreAttrRangeDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
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
index cea550f..2d7c71b 100644
--- 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
@@ -1,7 +1,5 @@
 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;
@@ -10,6 +8,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.DockingTaskDaoI;
+import org.springblade.code.model.DockingTaskDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
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
index 53f8532..4aeef3a 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.SysIntAuthorityDaoI;
+import org.springblade.code.model.SysIntAuthorityDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -27,7 +28,7 @@
  * @date 2022-03-07
  */
 @Repository
-public class  SysIntAuthorityDaoImpl implements SysIntAuthorityDaoI{
+public class  SysIntAuthorityDaoImpl implements SysIntAuthorityDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 0085b81..6b53749 100644
--- 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
@@ -1,7 +1,6 @@
 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;
@@ -10,6 +9,8 @@
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.WebBoServiceI;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.SysIntBaseDaoI;
+import org.springblade.code.model.SysIntBaseDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -27,7 +28,7 @@
  * @date 2022-03-07
  */
 @Repository
-public class  SysIntBaseDaoImpl implements SysIntBaseDaoI{
+public class  SysIntBaseDaoImpl implements SysIntBaseDaoI {
 
 	/**
 	* 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
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
index 84f4131..9f3a946 100644
--- 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
@@ -1,8 +1,6 @@
 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;
@@ -13,6 +11,8 @@
 import com.vci.web.service.WebBoServiceI;
 import com.vci.web.util.WebUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.SysIntHeaderDaoI;
+import org.springblade.code.model.SysIntHeaderDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -21,7 +21,7 @@
 import java.util.Map;
 
 import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-import static com.vci.mdm.constant.MdmDuckingConstant.FLAG_FAIL;
+import static org.springblade.code.constant.MdmDuckingConstant.FLAG_FAIL;
 
 
 /**
@@ -220,6 +220,7 @@
 	 * @param sysinfoOid 涓婚敭
 	 * @return 鏁版嵁瀵硅薄鍒楄〃
 	 */
+	@Override
 	public List<SysIntHeaderDO> selectBySysinfoOid(String sysinfoOid){
 		VciBaseUtil.alertNotNull(sysinfoOid,"sysinfo涓婚敭");
 		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(SysIntHeaderDO.class);
@@ -231,6 +232,7 @@
 	 * 鎵归噺淇敼杩欎釜sysinfo鐨刪eader锛屽厛鍒犻櫎sysinfo鎵�鏈夌殑header,鍐嶆柊寤烘墍鏈夌殑
 	 * @param records
 	 */
+	@Override
 	public BaseResult updateSysinfoHeader(List<SysIntHeaderDO> records){
 
 		if(records.size()<1){
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
index d405883..e2f7ef5 100644
--- 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
@@ -1,8 +1,5 @@
 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;
@@ -13,6 +10,8 @@
 import com.vci.web.service.WebBoServiceI;
 import com.vci.web.util.WebUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.dao.SysIntParamDaoI;
+import org.springblade.code.model.SysIntParamDO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -21,7 +20,7 @@
 import java.util.Map;
 
 import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-import static com.vci.mdm.constant.MdmDuckingConstant.FLAG_FAIL;
+import static org.springblade.code.constant.MdmDuckingConstant.FLAG_FAIL;
 
 
 /**
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
index 4103b0f..b840bba 100644
--- 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
@@ -1,9 +1,9 @@
 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;
+import org.springblade.code.constant.MdmEnumIdConstant;
 
 /**
  * 妯℃澘鐨勬寜閽敤閫�
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
index 5eb862c..b063833 100644
--- 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
@@ -1,9 +1,9 @@
 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;
+import org.springblade.code.constant.MdmEnumIdConstant;
 
 /**
  * 鍒嗙被鐨勬祦绋嬬殑鐢ㄩ��
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
index 342b183..292f3d7 100644
--- 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
@@ -1,9 +1,9 @@
 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;
+import org.springblade.code.constant.MdmEnumIdConstant;
 
 /**
  * 鎴彇绫诲瀷
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
index 223f8cf..5f56418 100644
--- 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
@@ -1,9 +1,9 @@
 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;
+import org.springblade.code.constant.MdmEnumIdConstant;
 
 /**
  * 鍙栧�肩被鍨�
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
index 6249f12..7ae00fa 100644
--- 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
@@ -1,9 +1,9 @@
 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;
+import org.springblade.code.constant.MdmEnumIdConstant;
 
 /**
  * 灞傜骇鐮佹鐨勫眰绾х被鍨�
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
index 8488909..49c9d32 100644
--- 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
@@ -1,9 +1,9 @@
 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;
+import org.springblade.code.constant.MdmEnumIdConstant;
 
 /**
  * 鏄犲皠瑙勫垯绫诲瀷
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
index 71ca371..16ee86a 100644
--- 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
@@ -1,9 +1,9 @@
 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;
+import org.springblade.code.constant.MdmEnumIdConstant;
 
 /**
  * 鐮佹闀垮害鎺у埗绫诲瀷
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
index 83853b5..5bb54a8 100644
--- 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
@@ -1,9 +1,9 @@
 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;
+import org.springblade.code.constant.MdmEnumIdConstant;
 
 /**
  * 鎸夐挳浣跨敤浣嶇疆
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationAuthorityTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationAuthorityTypeEnum.java
new file mode 100644
index 0000000..80a05db
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationAuthorityTypeEnum.java
@@ -0,0 +1,127 @@
+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;
+
+/**
+ * Description: 绯荤粺闆嗘垚楠岃瘉鏂瑰紡
+ *
+ * @author: LiHang
+ * @date: Created on 2022/3/7
+ */
+@VciEnum(name = MdmEnumIdConstant.SYS_INTEGRATION_AUTHORITY_TYPE,text = "绯荤粺闆嗘垚楠岃瘉鏂瑰紡",description = "")
+public enum SysIntegrationAuthorityTypeEnum implements BaseEnum {
+    /**
+     * 鐢ㄦ埛鏂瑰紡
+     */
+    LOGIN("login","鐢ㄦ埛鐧诲綍"),
+    /**
+     * 浠ょ墝鏂瑰紡
+     */
+    TOKEN("token","浠ょ墝");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 SysIntegrationAuthorityTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (SysIntegrationAuthorityTypeEnum wenum : SysIntegrationAuthorityTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (SysIntegrationAuthorityTypeEnum wenum : SysIntegrationAuthorityTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static SysIntegrationAuthorityTypeEnum forValue(String value) {
+        for (SysIntegrationAuthorityTypeEnum wenum : SysIntegrationAuthorityTypeEnum.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/SysIntegrationDataFlowTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationDataFlowTypeEnum.java
new file mode 100644
index 0000000..cb2deaf
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationDataFlowTypeEnum.java
@@ -0,0 +1,124 @@
+package org.springblade.code.enumpack;
+
+import com.vci.starter.web.enumpck.BaseEnum;
+
+/**
+ * Description:鏁版嵁娴佸悜鏂瑰紡
+ *
+ * @author LiHang
+ * @date Created on 2022/3/14
+ */
+public enum SysIntegrationDataFlowTypeEnum implements BaseEnum {
+    /**
+     * 鎺ㄩ��
+     */
+    PUSH("push","鎺ㄩ��"),
+    /**
+     * 閫氱煡鍜屾煡璇�
+     */
+    NOTICE_AND_QUERY("noticeAndQuery","閫氱煡鍜屾煡璇�");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 SysIntegrationDataFlowTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (SysIntegrationDataFlowTypeEnum wenum : SysIntegrationDataFlowTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (SysIntegrationDataFlowTypeEnum wenum : SysIntegrationDataFlowTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static SysIntegrationDataFlowTypeEnum forValue(String value) {
+        for (SysIntegrationDataFlowTypeEnum wenum : SysIntegrationDataFlowTypeEnum.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/SysIntegrationParamAndReturnTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java
new file mode 100644
index 0000000..845df6e
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationParamAndReturnTypeEnum.java
@@ -0,0 +1,127 @@
+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;
+
+/**
+ * Description: 绯荤粺闆嗘垚鎺ュ彛鍙傛暟涓庤繑鍥炲�肩被鍨�
+ *
+ * @author: LiHang
+ * @date: Created on 2022/3/7
+ */
+@VciEnum(name = MdmEnumIdConstant.SYS_INTEGRATION_PARAM_AND_RETURN_TYPE,text = "绯荤粺闆嗘垚鎺ュ彛鍙傛暟涓庤繑鍥炲�肩被鍨�",description = "")
+public enum SysIntegrationParamAndReturnTypeEnum implements BaseEnum {
+    /**
+     * Json鏍煎紡
+     */
+    JSON("json","Json"),
+    /**
+     * Xml鏍煎紡
+     */
+    XML("xml","xml");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 SysIntegrationParamAndReturnTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (SysIntegrationParamAndReturnTypeEnum wenum : SysIntegrationParamAndReturnTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (SysIntegrationParamAndReturnTypeEnum wenum : SysIntegrationParamAndReturnTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static SysIntegrationParamAndReturnTypeEnum forValue(String value) {
+        for (SysIntegrationParamAndReturnTypeEnum wenum : SysIntegrationParamAndReturnTypeEnum.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/SysIntegrationRequestMethodEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestMethodEnum.java
new file mode 100644
index 0000000..532f635
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestMethodEnum.java
@@ -0,0 +1,136 @@
+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;
+
+/**
+ * Description:绯荤粺闆嗘垚鎺ュ彛璇锋眰鏂瑰紡绫诲瀷
+ *
+ * @author: LiHang
+ * @date: Created on 2022/3/7
+ */
+@VciEnum(name = MdmEnumIdConstant.SYS_INTEGRATION_REQUEST_METHOD_TYPE,text = "绯荤粺闆嗘垚鎺ュ彛璇锋眰鏂瑰紡绫诲瀷",description = "")
+public enum SysIntegrationRequestMethodEnum implements BaseEnum {
+    /**
+     * post璇锋眰
+     */
+    POST("post","post"),
+    /**
+     * get璇锋眰
+     */
+    GET("get","get"),
+    /**
+     * put璇锋眰
+     */
+    PUT("put","put"),
+    /**
+     * delete璇锋眰
+     */
+    DELETE("delete","delete");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 SysIntegrationRequestMethodEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (SysIntegrationRequestMethodEnum wenum : SysIntegrationRequestMethodEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (SysIntegrationRequestMethodEnum wenum : SysIntegrationRequestMethodEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static SysIntegrationRequestMethodEnum forValue(String value) {
+        for (SysIntegrationRequestMethodEnum wenum : SysIntegrationRequestMethodEnum.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/SysIntegrationRequestTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestTypeEnum.java
new file mode 100644
index 0000000..ef81be4
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/SysIntegrationRequestTypeEnum.java
@@ -0,0 +1,135 @@
+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;
+
+/**
+ * Description:绯荤粺闆嗘垚鎺ュ彛鐨勭被鍨�
+ *
+ * @author: LiHang
+ * @date: Created on 2022/3/7
+ */
+@VciEnum(name = MdmEnumIdConstant.SYS_INTEGRATION_REQUEST_TYPE,text = "绯荤粺闆嗘垚鎺ュ彛鐨勭被鍨�",description = "")
+public enum SysIntegrationRequestTypeEnum implements BaseEnum {
+    /**
+     * HTTP鏂瑰紡
+     */
+    HTTP("http","Http"),
+    /**
+     * WebService鏂瑰紡
+     */
+    WEB_SERVICE("webService","webService"),
+    WEB_SERVICE_ERP("webService","webService"),
+    WEB_SERVICE_CXF("webService","webService"),
+    WEB_SERVICE_AXIS("webService","webService"),
+    /**
+     * 绫昏矾寰�
+     */
+    CLASSPATH("classPath","绫昏矾寰�");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 SysIntegrationRequestTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (SysIntegrationRequestTypeEnum wenum : SysIntegrationRequestTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (SysIntegrationRequestTypeEnum wenum : SysIntegrationRequestTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static SysIntegrationRequestTypeEnum forValue(String value) {
+        for (SysIntegrationRequestTypeEnum wenum : SysIntegrationRequestTypeEnum.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/sysIntegrationPushTypeEnum.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/sysIntegrationPushTypeEnum.java
new file mode 100644
index 0000000..58fa7b9
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/enumpack/sysIntegrationPushTypeEnum.java
@@ -0,0 +1,122 @@
+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;
+
+@VciEnum(name = MdmEnumIdConstant.SYS_INTEGRATION_PUSH_TYPE,text = "绯荤粺鎺ュ彛鎺ㄩ�佹柟寮�",description = "")
+public enum sysIntegrationPushTypeEnum implements BaseEnum {
+    /**
+     * 鍒嗙被鎺ㄩ�佹柟寮�
+     */
+    JSON("1","鏁版嵁鎺ㄩ��"),
+    /**
+     * Xml鏍煎紡
+     */
+    XML("2","鍒嗙被鎺ㄩ��");
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    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 sysIntegrationPushTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (sysIntegrationPushTypeEnum wenum : sysIntegrationPushTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (sysIntegrationPushTypeEnum wenum : sysIntegrationPushTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static sysIntegrationPushTypeEnum forValue(String value) {
+        for (sysIntegrationPushTypeEnum wenum : sysIntegrationPushTypeEnum.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
index 781c56a..8d9b3b8 100644
--- 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
@@ -2,10 +2,10 @@
 
 
 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;
+import org.springblade.code.constant.MdmLifeCycleConstant;
 
 /**
  * 鍏ㄩ儴鐨勭爜鍊肩殑鐢熷懡鍛ㄦ湡
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
index c79db30..6c18f8a 100644
--- 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
@@ -2,10 +2,10 @@
 
 
 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;
+import org.springblade.code.constant.MdmLifeCycleConstant;
 
 /**
  * 鍒嗙被妯℃澘鐨勭敓鍛藉懆鏈�
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
index 150db51..d50a188 100644
--- 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
@@ -2,10 +2,10 @@
 
 
 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;
+import org.springblade.code.constant.MdmLifeCycleConstant;
 
 /**
  * 涓婚搴撴暟鎹殑榛樿鐢熷懡鍛ㄦ湡
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
index 9c08866..2b74f4b 100644
--- 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
@@ -2,10 +2,10 @@
 
 
 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;
+import org.springblade.code.constant.MdmLifeCycleConstant;
 
 /**
  * 缂栫爜瑙勫垯鐨勭敓鍛藉懆鏈�
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
index 1609bbe..26f31e2 100644
--- 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
@@ -1,11 +1,11 @@
 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;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.constant.MdmLifeCycleConstant;
 
 /**
  * 缂栫爜瑙勫垯
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingDataDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingDataDO.java
new file mode 100644
index 0000000..56653bc
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingDataDO.java
@@ -0,0 +1,148 @@
+package org.springblade.code.model;
+
+
+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;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 瑕佹帹閫佸緱鏁版嵁
+ * @author wangyi
+ * @date 2022-10-7
+ */
+@VciBtmType(name = MdmBtmTypeConstant.DOCKING_DATA,text = "璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class DockingDataDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 5020487634341415429L;
+
+    /**
+     * uniquecode
+     */
+    @Column(columnDefinition = "uniquecode")
+    private String uniquecode;
+
+    /**
+     * 绯荤粺鎺ュ彛oid
+     */
+    @Column(columnDefinition = "鍒嗙被oid")
+    private String classifyoid;
+
+    /**
+     * 绯荤粺id
+     */
+    @Column(columnDefinition = "涓氬姟绫诲瀷oid")
+    private String btmoid;
+
+    /**
+     * 绯荤粺id
+     */
+    @Column(columnDefinition = "涓氬姟绫诲瀷id")
+    private String btmid;
+
+    /**
+     * 绯荤粺id
+     */
+    @Column(columnDefinition = "鎺ㄩ�佺被鍨�")
+    private String sendtype;
+
+    /**
+     * 绯荤粺id
+     */
+    @Column(columnDefinition = "鏄惁鍒嗚В浠诲姟")
+    private String sendflag;
+
+    /**
+     * 绯荤粺id
+     */
+    @Column(columnDefinition = "鍒嗙被id")
+    private String classifyid;
+
+    /**
+     * 绯荤粺id
+     */
+    @Column(columnDefinition = "鍒嗙被鍚嶇О")
+    private String classifyname;
+
+    public String getUniquecode() {
+        return uniquecode;
+    }
+
+    public void setUniquecode(String uniquecode) {
+        this.uniquecode = uniquecode;
+    }
+
+    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 + '\'' +
+                ", uniquecode='" + uniquecode + '\'' +
+                ", btmoid='" + btmoid + '\'' +
+                ", btmid='" + btmid + '\'' +
+                ", sendtype='" + sendtype + '\'' +
+                ", sendflag='" + sendflag + '\'' +
+                ", classifyid='" + classifyid + '\'' +
+                ", classifyname='" + classifyname + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingLogeDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingLogeDO.java
new file mode 100644
index 0000000..0ad2461
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingLogeDO.java
@@ -0,0 +1,228 @@
+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.VciFieldType;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+import com.vci.starter.web.model.BaseModel;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+import static com.vci.starter.web.enumpck.VciFieldTypeEnum.VTClob;
+
+/**
+ * 璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇�
+ * @author wangyi
+ * @date 2022-3-7
+ */
+@VciBtmType(name = MdmBtmTypeConstant.DOCKING_LOGE,text = "璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙f棩蹇�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class DockingLogeDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 5020487634341415429L;
+    /**
+     * 绯荤粺id
+     */
+    @Column(nullable = false,columnDefinition = "绯荤粺id")
+    private String systemoid;
+
+    /**
+     * 绯荤粺缂栧彿
+     */
+    @Column(nullable = false,columnDefinition = "绯荤粺缂栧彿")
+    private String systemcode;
+
+    /**
+     * 绯荤粺鍚嶇О
+     */
+    @Column(nullable = false,columnDefinition = "绯荤粺鍚嶇О")
+    private String systemname;
+
+    /**
+     * 鍒嗙被oid
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被oid")
+    private String classifyoid;
+
+    /**
+     * 鍒嗙被id
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被id")
+    private String classifyid;
+
+    /**
+     * 鍒嗙被name
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被name")
+    private String classifyname;
+
+    /**
+     * 鍞竴鏍囪瘑
+     */
+    @Column(columnDefinition = "鍞竴鏍囪瘑")
+    private String uniquecode;
+
+    /**
+     * 鎺ュ彛绫诲瀷锛氭帹閫佹帴鍙�/鏌ヨ鎺ュ彛,鏆傛椂涓嶇敤
+     */
+    @Column(columnDefinition = "鎺ュ彛绫诲瀷")
+    private String type;
+
+    /**
+     * 杩旇繕鎻愮ず
+     */
+    @Column(columnDefinition = "杩旇繕鎻愮ず")
+    private String msg;
+
+    /**
+     * 鍙傛暟锛氶�氱煡鎺ュ彛鏄垜浠紶鍑虹殑鍙傛暟/鏌ヨ鎺ュ彛鏄埆浜轰紶鍏ョ殑鍙傛暟
+     */
+    @VciFieldType(VTClob)
+    @Column(columnDefinition = "鍙傛暟")
+    private String paramstring;
+
+    /**
+     * 浼犻�抶ml
+     */
+    @Column(columnDefinition = "浼犻�抶ml",length = 4000)
+    private String sendXml;
+
+    /**
+     * 杩斿洖锛氶�氱煡鎺ュ彛鏄垜浠敹鍒扮殑鍙嶉锛屾煡璇㈡帴鍙f槸鍒汉鏀跺埌鐨勫弽棣�
+     */
+    @VciFieldType(VTClob)
+    @Column(columnDefinition = "杩斿洖")
+    private String returnstring;
+
+    /**
+     * 鎺ュ彛鐘舵�侊細鎴愬姛/澶辫触
+     */
+    @Column(nullable = false,columnDefinition = "鎺ュ彛鐘舵��")
+    private String interfacestatus;
+	private Object MdmBtmTypeConstant;
+
+	public String getUniquecode() {
+        return uniquecode;
+    }
+
+    public void setUniquecode(String uniquecode) {
+        this.uniquecode = uniquecode;
+    }
+
+    public String getSendXml() {
+        return sendXml;
+    }
+
+    public void setSendXml(String sendXml) {
+        this.sendXml = sendXml;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    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 getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    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 getInterfacestatus() {
+        return interfacestatus;
+    }
+
+    public void setInterfacestatus(String interfacestatus) {
+        this.interfacestatus = interfacestatus;
+    }
+
+    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;
+    }
+
+    @Override
+    public String toString() {
+        return "DockingLogeDO{" +
+                "systemoid='" + systemoid + '\'' +
+                ", uniquecode='" + uniquecode + '\'' +
+                ", systemcode='" + systemcode + '\'' +
+                ", systemname='" + systemname + '\'' +
+                ", classifyoid='" + classifyoid + '\'' +
+                ", classifyid='" + classifyid + '\'' +
+                ", classifyname='" + classifyname + '\'' +
+                ", type='" + type + '\'' +
+                ", msg='" + msg + '\'' +
+                ", paramstring='" + paramstring + '\'' +
+                ", sendXml='" + sendXml + '\'' +
+                ", returnstring='" + returnstring + '\'' +
+                ", interfacestatus='" + interfacestatus + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataDO.java
new file mode 100644
index 0000000..0f97469
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataDO.java
@@ -0,0 +1,266 @@
+package org.springblade.code.model;
+
+
+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;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅锛屽拰DockingPSMDataInfoDO涓�瀵瑰鐨勫叧绯�
+ * @author wangyi
+ * @date 2022-3-7
+ */
+@VciBtmType(name = MdmBtmTypeConstant.DOCKING_PRE_APPLY_DATA,text = "璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class DockingPreApplyDataDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 5020487634341415429L;
+
+    /**
+     * 鐢宠oid
+     */
+    @Column(nullable = false,columnDefinition = "鐢宠oid")
+    private String preapplyoid;
+
+    /**
+     * 鍞竴鏍囪瘑锛屽伐鑹洪噷杈圭殑鍥惧彿
+     */
+    @Column(nullable = false,columnDefinition = "鍞竴鏍囪瘑")
+    private String uniquecode;
+
+    /**
+     * 涓婚搴撶紪鍙�
+     */
+    @Column(nullable = false,columnDefinition = "涓婚搴撶紪鍙�")
+    private String type;
+
+    /**
+     * 绯荤粺缂栧彿
+     */
+    @Column(nullable = false,columnDefinition = "绯荤粺缂栧彿")
+    private String systemid;
+
+    /**
+     * 姝e湪浣跨敤鏍囧織
+     */
+    @Column(nullable = true,columnDefinition = "姝e湪浣跨敤鏍囧織")
+    private String useddflag;
+
+    /**
+     * 鍏宠仈鍒嗙被鎿嶄綔杩囧悗锛岃褰曠殑鍏宠仈鍒嗙被oid
+     */
+    @Column(columnDefinition = "鍏宠仈鍒嗙被oid")
+    private String classifyoid;
+
+    /**
+     * 鍏宠仈鍒嗙被鎿嶄綔杩囧悗锛岃褰曠殑鍏宠仈鍒嗙被鍚嶇О
+     */
+    @Column(columnDefinition = "鍏宠仈鍒嗙被鍚嶇О")
+    private String classifyname;
+
+    /**
+     * 鐢宠鎴愬姛鍚庣殑缂栫爜,鎴栬�呭凡缁忓瓨鍦ㄧ殑缂栫爜
+     */
+    @Column(columnDefinition = "鏄惁瀹屾垚鐢宠缂栫爜")
+    private String num;
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    @Column(columnDefinition = "瑙勬牸鍨嬪彿")
+    private String model;
+    /**
+     * 闆朵欢绫诲瀷
+     */
+    @Column(columnDefinition = "闆朵欢绫诲瀷")
+    private String parttype;
+    /**
+     * 璁¢噺鍗曚綅
+     */
+    @Column(columnDefinition = "璁¢噺鍗曚綅")
+    private String unit;
+
+    /**
+     * 鍗曢噸
+     */
+    @Column(columnDefinition = "鍗曢噸")
+    private String weight;
+
+    /**
+     * 鏄惁閲嶈浠�
+     */
+    @Column(columnDefinition = "鏄惁閲嶈浠�")
+    private String importantPart;
+
+    /**
+     * 鏄惁鍏抽敭浠�
+     */
+    @Column(columnDefinition = "鏄惁鍏抽敭浠�")
+    private String keyPart;
+    /**
+     * 鏁版嵁澶勭悊杩斿洖鐘舵�佺爜
+     */
+    @Column(columnDefinition = "鏁版嵁澶勭悊杩斿洖鐘舵�佺爜")
+    private String datacode;
+
+    /**
+     * 鏁版嵁澶勭悊杩斿洖淇℃伅
+     */
+    @Column(columnDefinition = "鏁版嵁澶勭悊杩斿洖淇℃伅")
+    private String datamsg;
+	private Object MdmBtmTypeConstant;
+
+	public String getUniquecode() {
+        return uniquecode;
+    }
+
+    public void setUniquecode(String unique) {
+        this.uniquecode = unique;
+    }
+
+    public String getClassifyoid() {
+        return classifyoid;
+    }
+
+    public void setClassifyoid(String classifyoid) {
+        this.classifyoid = classifyoid;
+    }
+
+    public String getUseddflag() {
+        return useddflag;
+    }
+
+    public void setUseddflag(String useddflag) {
+        this.useddflag = useddflag;
+    }
+
+    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 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 getPreapplyoid() {
+        return preapplyoid;
+    }
+
+    public void setPreapplyoid(String preapplyoid) {
+        this.preapplyoid = preapplyoid;
+    }
+
+    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 "DockingPreApplyDataDO{" +
+                "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/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataInfoDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataInfoDO.java
new file mode 100644
index 0000000..3bfac1d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreApplyDataInfoDO.java
@@ -0,0 +1,103 @@
+package org.springblade.code.model;
+
+
+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;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+ * @author wangyi
+ * @date 2022-3-7
+ */
+@VciBtmType(name = MdmBtmTypeConstant.DOCKING_PRE_APPLY_DATA_INFO,text = "璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class DockingPreApplyDataInfoDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 5020487634341415429L;
+
+    /**
+     * data鐨刼id
+     */
+    @Column(nullable = false,columnDefinition = "data鐨刼id")
+    private String dataoid;
+
+    /**
+     * 鍞竴鏍囪瘑锛屽伐鑹洪噷杈圭殑鍥惧彿
+     */
+    @Column(nullable = false,columnDefinition = "鍞竴鏍囪瘑")
+    private String uniquecode;
+
+    /**
+     * 灞炴�ey
+     */
+    @Column(nullable = true,columnDefinition = "灞炴�ey")
+    private String key;
+
+    /**
+     * 灞炴�ey鍚箟
+     */
+    @Column(nullable = true,columnDefinition = "灞炴�ey鍚箟")
+    private String mean;
+
+    /**
+     * 灞炴�alue
+     */
+    @Column(nullable = true,columnDefinition = "灞炴�alue",length = 4000)
+    private String value;
+
+    public String getDataoid() {
+        return dataoid;
+    }
+
+    public void setDataoid(String dataoid) {
+        this.dataoid = dataoid;
+    }
+
+    public String getUniquecode() {
+        return uniquecode;
+    }
+
+    public void setUniquecode(String uniquecode) {
+        this.uniquecode = uniquecode;
+    }
+
+    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 "DockingPSMDataInfoDO{" +
+                "dataoid='" + dataoid + '\'' +
+                ", uniquecode='" + uniquecode + '\'' +
+                ", key='" + key + '\'' +
+                ", mean='" + mean + '\'' +
+                ", value='" + value + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrMappingDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrMappingDO.java
new file mode 100644
index 0000000..4b27d1d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrMappingDO.java
@@ -0,0 +1,207 @@
+package org.springblade.code.model;
+
+
+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;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 璁板綍闆嗘垚灞炴�т笌涓绘暟鎹睘鎬ф槧灏勫叧绯诲璞�
+ * @author xiejun
+ * @date 2023-01-06
+ */
+@VciBtmType(name = MdmBtmTypeConstant.DOCKING_PRE_JINTEGMAPCONFIG,text = "闆嗘垚灞炴�ф槧灏勫叧绯诲璞�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class DockingPreAttrMappingDO  extends BaseModel {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 6020487634341415429L;
+
+    /***
+     * 榛樿鍊�
+     */
+    @Column(nullable = true,columnDefinition = "榛樿鍊�")
+    private String jdefaultValue;
+
+    /***
+     * 榛樿鍊�
+     */
+    /**
+     * 姝e湪浣跨敤鏍囧織
+     */
+    @Column(nullable = true,columnDefinition = "婧愮郴缁熺殑灞炴�id")
+    private String jmetaListId;
+    /**
+     * 婧愬垎绫籭d
+     */
+    @Column(nullable = false,columnDefinition = "婧愮郴缁熺殑鍒嗙被oid")
+    private  String jsourceClsfId;
+    /**
+     * 婧愬垎绫诲悕绉�
+     */
+    @Column(nullable = true,columnDefinition = "婧愮郴缁熺殑鍒嗙被鍚嶇О")
+    private String jsourceClsfName;
+    /**
+     * 婧愬睘鎬id
+     */
+    @Column(nullable = true,columnDefinition = "鐩爣绯荤粺灞炴�х郴id")
+    private String jtargetAttrId;
+
+    /**
+     * 鐩爣灞炴�id
+     */
+    @Column(nullable = true,columnDefinition = "鐩爣绯荤粺鍒嗙被oid")
+    private String jtargetClsfId;
+
+    /***
+     * 妯℃澘Id
+     */
+    @Column(nullable = true,columnDefinition = "妯℃澘瑙嗗浘鐨刼id")
+    private String jviewModeId;
+    /***
+     * 妯℃澘鍚嶇О
+     */
+    @Column(nullable = true,columnDefinition = "妯℃澘鍚嶇О")
+    private String jviewModeName;
+
+    /***
+     * 鐩爣灞炴�у唴閮ㄥ悕绉�
+     */
+    @Column(nullable = true,columnDefinition = "鐩爣绯荤粺灞炴�у唴閮ㄥ��")
+    private String jtargetAttrKey;
+
+    /***
+     * 鐩爣灞炴�у悕绉�
+     */
+    @Column(nullable = true,columnDefinition = "鐩爣绯荤粺灞炴�у悕绉�")
+    private String jtargetAttrName;
+
+    /***
+     * 鐩爣灞炴�у唴閮ㄥ悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "婧愮郴缁熷睘鎬у唴閮ㄥ悕绉�")
+    private String jsourceAttrKey;
+
+    /***
+     * 鐩爣灞炴�у悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "婧愮郴缁熷睘鎬у悕绉�")
+    private String jsourceAttrName;
+
+
+    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;
+    }
+
+    @Override
+    public String toString() {
+        return "DockingPreAttrMappingDO{" +
+                "jdefaultValue='" + jdefaultValue + '\'' +
+                ", jmetaListId='" + jmetaListId + '\'' +
+                ", jsourceClsfId='" + jsourceClsfId + '\'' +
+                ", jsourceClsfName='" + jsourceClsfName + '\'' +
+                ", jtargetAttrId='" + jtargetAttrId + '\'' +
+                ", jtargetClsfId='" + jtargetClsfId + '\'' +
+                ", jviewModeId='" + jviewModeId + '\'' +
+                ", jviewModeName='" + jviewModeName + '\'' +
+                ", jtargetAttrKey='" + jtargetAttrKey + '\'' +
+                ", jtargetAttrName='" + jtargetAttrName + '\'' +
+                ", jsourceAttrKey='" + jsourceAttrKey + '\'' +
+                ", jsourceAttrName='" + jsourceAttrName + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrRangeDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrRangeDO.java
new file mode 100644
index 0000000..87a04e5
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingPreAttrRangeDO.java
@@ -0,0 +1,95 @@
+package org.springblade.code.model;
+
+
+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;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+
+@VciBtmType(name = MdmBtmTypeConstant.DOCKING_PRE_JRANGE,text = "闆嗘垚灞炴�у彇鍊艰寖鍥村璞�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class DockingPreAttrRangeDO extends BaseModel {
+     /**
+         * 搴忓垪鍖�
+         */
+     private static final long serialVersionUID = 6020487634341415410L;
+    /***
+     *灞炴�d
+     */
+    @Column(nullable = false,columnDefinition = "灞炴�id")
+    private String jmetaListId;
+
+    /**
+     * 灞炴�ф灇涓炬樉绀哄悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "婧愬睘鎬ф灇涓炬樉绀哄悕绉�")
+    private  String jnumText;
+    /**
+     * 灞炴�ф灇涓惧唴閮ㄥ悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "婧愬睘鎬ф灇涓惧唴閮ㄥ悕绉�")
+    private String jnumTextValue;
+
+    /**
+     * 婧愬睘鎬ф灇涓炬樉绀哄悕绉�
+     */
+    @Column(nullable = true,columnDefinition = "灞炴�ф灇涓炬樉绀哄悕绉�")
+    private  String jtargeNumText;
+    /**
+     * 婧愬睘鎬ф灇涓惧唴閮ㄥ悕绉�
+     */
+    @Column(nullable = false,columnDefinition = "灞炴�ф灇涓惧唴閮ㄥ悕绉�")
+    private String jtargeNumTextValue;
+
+    public String getJmetaListId() {
+        return jmetaListId;
+    }
+
+    public void setJmetaListId(String jmetaListId) {
+        this.jmetaListId = jmetaListId;
+    }
+
+    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;
+    }
+
+    @Override
+    public String toString() {
+        return "DockingPreAttrRangeDO{" +
+                "jmetaListId='" + jmetaListId + '\'' +
+                ", jnumText='" + jnumText + '\'' +
+                ", jnumTextValue='" + jnumTextValue + '\'' +
+                ", jtargeNumText='" + jtargeNumText + '\'' +
+                ", jtargeNumTextValue='" + jtargeNumTextValue + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingTaskDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingTaskDO.java
new file mode 100644
index 0000000..2d718b4
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/DockingTaskDO.java
@@ -0,0 +1,224 @@
+package org.springblade.code.model;
+
+
+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;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * 鏁版嵁鍙戝竷銆佷慨鏀瑰悗锛岃褰曚笅闇�瑕侀�氱煡鐨勭郴缁�
+ * 姣斿锛歄A绯荤粺鐢宠浜嗕汉鍛樿繖涓垎绫荤殑鏁版嵁锛屼汉鍛樿繖涓垎绫讳笅鍙戝竷浜嗕竴鏉℃柊鏁版嵁锛岄渶瑕佹妸鏉℃暟鎹帹閫佺粰OA绯荤粺锛屼細鍦ㄨ繖涓笟鍔$被鍨嬩笅浜х敓涓�鏉℃暟鎹�傜劧鍚庡畾鏃跺櫒鎸夋椂鍙戦�佷换鍔°��
+ * 濡傛灉鏈変袱涓郴缁熺敵璇蜂簡浜哄憳鏁版嵁锛屽氨浼氫骇鐢熶袱鏉℃暟鎹�
+ * @author wangyi
+ * @date 2022-3-7
+ */
+@VciBtmType(name = MdmBtmTypeConstant.DOCKING_TASK,text = "璧勬簮瀵规帴閫氱煡銆佹煡璇㈡帴鍙e緟鎺ㄩ�佷换鍔�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class DockingTaskDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 5020487634341415429L;
+
+    /**
+     * 绯荤粺鎺ュ彛oid
+     */
+    @Column(nullable = false,columnDefinition = "绯荤粺鎺ュ彛oid")
+    private String sysinfooid;
+
+    /**
+     * 绯荤粺id
+     */
+    @Column(nullable = false,columnDefinition = "绯荤粺oid")
+    private String systemoid;
+
+    /**
+     * 绯荤粺缂栧彿
+     */
+    @Column(nullable = false,columnDefinition = "绯荤粺缂栧彿")
+    private String systemcode;
+
+    /**
+     * 绯荤粺鍚嶇О
+     */
+    @Column(nullable = false,columnDefinition = "绯荤粺鍚嶇О")
+    private String systemname;
+
+    /**
+     * 鍒嗙被oid
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被oid")
+    private String classifyoid;
+
+    /**
+     * 鍒嗙被id
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被id")
+    private String classifyid;
+
+    /**
+     * 鍒嗙被鍚嶇О
+     */
+    @Column(nullable = false,columnDefinition = "鍒嗙被鍚嶇О")
+    private String classifyname;
+
+    /**
+     * 涓氬姟绫诲瀷鏁版嵁oid
+     */
+    @Column(nullable = false,columnDefinition = "涓氬姟绫诲瀷鏁版嵁oid")
+    private String btmoid;
+
+    /**
+     * 涓氬姟绫诲瀷鏁版嵁id
+     */
+    @Column(nullable = false,columnDefinition = "涓氬姟绫诲瀷鏁版嵁id")
+    private String btmid;
+
+    /**
+     * 鍞竴鏍囪瘑
+     */
+    @Column(columnDefinition = "鍞竴鏍囪瘑")
+    private String uniquecode;
+
+    /**
+     * 鍙戦�佺被鍨�
+     */
+    @Column(nullable = false,columnDefinition = "鍙戦�佺被鍨�")
+    private String sendtype;
+
+    /**
+     * 鏄惁鍙戦�佹垚鍔�
+     */
+    @Column(nullable = false,columnDefinition = "鏄惁鍙戦�佹垚鍔�")
+    private String sendflag;
+
+    /**
+     * dockingdata鐨刼id
+     */
+    @Column(nullable = false,columnDefinition = "dockingdata鐨刼id")
+    private String dataoid;
+
+    public String getSendtype() {
+        return sendtype;
+    }
+
+    public void setSendtype(String sendtype) {
+        this.sendtype = sendtype;
+    }
+
+    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 getSysinfooid() {
+        return sysinfooid;
+    }
+
+    public void setSysinfooid(String sysinfooid) {
+        this.sysinfooid = sysinfooid;
+    }
+
+    public String getUniquecode() {
+        return uniquecode;
+    }
+
+    public void setUniquecode(String uniquecode) {
+        this.uniquecode = uniquecode;
+    }
+    public String getDataoid() {
+        return dataoid;
+    }
+
+    public void setDataoid(String dataoid) {
+        this.dataoid = dataoid;
+    }
+
+
+    @Override
+    public String toString() {
+        return "DockingTaskDO{" +
+                "sysinfooid='" + sysinfooid + '\'' +
+                ", systemoid='" + systemoid + '\'' +
+                ", systemcode='" + systemcode + '\'' +
+                ", systemname='" + systemname + '\'' +
+                ", classifyoid='" + classifyoid + '\'' +
+                ", classifyid='" + classifyid + '\'' +
+                ", classifyname='" + classifyname + '\'' +
+                ", btmoid='" + btmoid + '\'' +
+                ", btmid='" + btmid + '\'' +
+                ", sendflag='" + sendflag + '\'' +
+                ", uniquecode='" + uniquecode + '\'' +
+                ", sendtype='" + sendtype + '\'' +
+                ", dataoid='" + dataoid + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntAuthorityDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntAuthorityDO.java
new file mode 100644
index 0000000..e9bd2c4
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntAuthorityDO.java
@@ -0,0 +1,159 @@
+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;
+
+/**
+ * Description: 绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+ *
+ * @author: LiHang
+ * @date: Created on 2022/3/7
+ */
+@VciBtmType(name = MdmBtmTypeConstant.SYS_INT_AUTHORITY,text = "绯荤粺闆嗘垚鎺ュ彛鐨勮璇�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE,startStatus = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class SysIntAuthorityDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1144067849291882385L;
+
+    /**
+     * 璁よ瘉缂栧彿
+     */
+    @Column(columnDefinition = "璁よ瘉缂栧彿")
+    private String id;
+
+    /**
+     * 璁よ瘉鍚嶇О
+     */
+    @Column(columnDefinition = "璁よ瘉鍚嶇О")
+    private String name;
+
+    /**
+     * 绯荤粺鎻忚堪
+     */
+    @Column(columnDefinition = "璁よ瘉鎻忚堪")
+    private String description;
+
+    /**
+     * 璁よ瘉鏂瑰紡
+     */
+    @Column(columnDefinition = "璁よ瘉鏂瑰紡",nullable = false)
+    @VciUseEnum(value = MdmEnumIdConstant.SYS_INTEGRATION_AUTHORITY_TYPE,showTextField = "typeText")
+    private String type;
+
+    /**
+     * 璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+     */
+    @Transient()
+    private String typeText;
+
+    /**
+     * 楠岃瘉鐢ㄦ埛
+     */
+    @Column(columnDefinition = "楠岃瘉鐢ㄦ埛")
+    private String userAccount;
+
+    /**
+     * 楠岃瘉瀵嗙爜
+     */
+    @Column(columnDefinition = "楠岃瘉瀵嗙爜")
+    private String userCode;
+
+    /**
+     * 楠岃瘉浠ょ墝
+     */
+    @Column(columnDefinition = "楠岃瘉浠ょ墝")
+    private String token;
+
+    @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;
+    }
+
+    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;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    @Override
+    public String toString() {
+        return "SysIntegrationAuthorityDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                ", type='" + type + '\'' +
+                ", typeText='" + typeText + '\'' +
+                ", userAccount='" + userAccount + '\'' +
+                ", userCode='" + userCode + '\'' +
+                ", token='" + token + '\'' +
+                '}' + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntBaseDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntBaseDO.java
new file mode 100644
index 0000000..5333ac6
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntBaseDO.java
@@ -0,0 +1,78 @@
+package org.springblade.code.model;
+
+
+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;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * Description:绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+ *
+ * @author: LiHang
+ * @date: Created on 2022/3/7
+ */
+@VciBtmType(name = MdmBtmTypeConstant.SYS_INT_BASE,text = "绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE,startStatus = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class SysIntBaseDO extends BaseModel {
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -5910713918419137900L;
+    /**
+     * 绯荤粺缂栧彿
+     */
+    @Column(columnDefinition = "绯荤粺缂栧彿",nullable = false)
+    private String id;
+
+    /**
+     * 绯荤粺鍚嶇О
+     */
+    @Column(columnDefinition = "绯荤粺鍚嶇О",nullable = false)
+    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 "SysIntegrationBaseDO{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", description='" + description + '\'' +
+                '}' + super.toString();
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntHeaderDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntHeaderDO.java
new file mode 100644
index 0000000..54e1298
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntHeaderDO.java
@@ -0,0 +1,90 @@
+package org.springblade.code.model;
+
+
+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;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * Description: 绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+ *
+ * @author: wangyi
+ * @date: Created on 2022/3/7
+ */
+@VciBtmType(name = MdmBtmTypeConstant.SYS_INT_HEADER,text = "绯荤粺闆嗘垚鎺ュ彛鐨勮璇�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE,startStatus = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class SysIntHeaderDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1144067849291882385L;
+
+    /**
+     * SysIntInfoDO 鐨刼id
+     */
+    @Column(columnDefinition = "鎺ュ彛oid")
+    private String infoOid;
+
+    /**
+     * 鍙傛暟key
+     */
+    @Column(columnDefinition = "鍙傛暟key")
+    private String headerkey;
+
+    /**
+     * 鍙傛暟value
+     */
+    @Column(columnDefinition = "鍙傛暟value")
+    private String headeralue;
+
+    /**
+     * 鏄惁浣跨敤
+     */
+    @Column(columnDefinition = "鏄惁浣跨敤")
+    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/blade-code/src/main/java/org/springblade/code/model/SysIntInfoDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntInfoDO.java
new file mode 100644
index 0000000..3b7e93d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntInfoDO.java
@@ -0,0 +1,656 @@
+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;
+
+/**requesturl
+ * Description: 绯荤粺闆嗘垚鎺ュ彛鍩虹淇℃伅
+ *
+ * @author LiHang
+ * @date Created on 2022/3/7
+ */
+@VciBtmType(name = MdmBtmTypeConstant.SYS_INT_INFO,text = "绯荤粺闆嗘垚鍩虹淇℃伅",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE,startStatus = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class SysIntInfoDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -6867365039736279037L;
+
+    /**
+     * 鍚敤銆佸仠鐢╰rue/false锛屼笉鐢ㄥ钩鍙扮殑鏋氫妇锛屽噺灏戝骞冲彴鐨勮�﹀悎
+     */
+    @Column(columnDefinition = "鍚敤鍋滅敤")
+    private String usedflag;
+
+    /**
+     * 鍒嗙被oid
+     */
+    @Column(columnDefinition = "鍒嗙被oid")
+    private String classifyoid;
+
+    /**
+     * 鍒嗙被id
+     */
+    @Column(columnDefinition = "鍒嗙被id")
+    private String classifyid;
+
+    /**
+     * 鍒嗙被鍚嶇О
+     */
+    @Column(columnDefinition = "鍒嗙被鍚嶇О")
+    private String classifyname;
+
+    /**
+     * 鎺ㄩ�佺郴缁無id
+     */
+    @Column(columnDefinition = "鎺ㄩ�佺郴缁無id")
+    private String sysbaseoid;
+
+    /**
+     * 鎺ㄩ�佺郴缁熺紪鍙�
+     */
+    @Column(columnDefinition = "鎺ㄩ�佺郴缁熺紪鍙�")
+    private String sysbaseid;
+
+    /**
+     * 鎺ㄩ�佺郴缁熷悕绉�
+     */
+    @Column(columnDefinition = "鎺ㄩ�佺郴缁熷悕绉�")
+    private String sysbasename;
+
+    /**
+     * 鎺ュ彛鍑芥暟
+     */
+    @Column(columnDefinition = "鎺ュ彛鍑芥暟")
+    private String interfaceFunction;
+
+    /**
+     * 鍛藉悕绌洪棿
+     */
+    @Column(columnDefinition = "鍛藉悕绌洪棿")
+    private String namespace;
+
+    /**
+     * soapAction
+     */
+    @Column(columnDefinition = "soapAction")
+    private String soapaction;
+
+    /**
+     * 鍙傛暟鍚嶇О
+     */
+    @Column(columnDefinition = "鍙傛暟鍚嶇О")
+    private String targName;
+
+    /**
+     * cxfaxis
+     */
+    @Column(columnDefinition = "cxfaxis")
+    private String cxfaxis;
+
+    /**
+     * 璇锋眰鍦板潃
+     */
+    @Column(columnDefinition = "璇锋眰鍦板潃")
+    private String requestUrl;
+
+    /**
+     * 鎺ュ彛绫诲瀷
+     */
+    @Column(columnDefinition = "鎺ュ彛绫诲瀷")
+    @VciUseEnum(value = MdmEnumIdConstant.SYS_INTEGRATION_REQUEST_TYPE,showTextField = "interfaceTypeText")
+    private String interfaceType;
+
+    /**
+     * 鎺ュ彛绫诲瀷鏄剧ず鏂囨湰
+     */
+    @Transient()
+    private String interfaceTypeText;
+
+    /**
+     * 鍙傛暟绫诲瀷
+     */
+    @Column(columnDefinition = "鍙傛暟绫诲瀷")
+    @VciUseEnum(value = MdmEnumIdConstant.SYS_INTEGRATION_PARAM_AND_RETURN_TYPE,showTextField = "paramTypeText")
+    private String paramType;
+
+    /**
+     * 鍙傛暟绫诲瀷鏄剧ず鏂囨湰
+     */
+    @Transient()
+    private String paramTypeText;
+
+    /**
+     * 杩斿洖鍊肩被鍨�
+     */
+    @Column(columnDefinition = "杩斿洖鍊肩被鍨�")
+    @VciUseEnum(value = MdmEnumIdConstant.SYS_INTEGRATION_PARAM_AND_RETURN_TYPE,showTextField = "returnTypeText")
+    private String returnType;
+
+    /**
+     * 杩斿洖鍊肩被鍨嬫樉绀烘枃鏈�
+     */
+    @Transient()
+    private String returnTypeText;
+
+    //===================================浠ヤ笅鏆傛椂涓嶇敤
+
+    /**
+     * 瀛樺偍鐨勪笟鍔$被鍨�
+     */
+    @Column(columnDefinition = "涓氬姟绫诲瀷鐨勭紪鍙�")
+    private String btmTypeId;
+
+    /**
+     * 瀛樺偍鐨勪笟鍔$被鍨嬬殑涓枃鍚嶇О
+     */
+    @Column(columnDefinition = "涓氬姟绫诲瀷鐨勫悕绉�")
+    private String btmTypeName;
+
+    /**
+     * 鏉ユ簮绯荤粺涓婚敭
+     */
+    @Column(columnDefinition = "鏉ユ簮绯荤粺涓婚敭")
+    @VciUseRefer(MdmBtmTypeConstant.SYS_INT_BASE)
+    private String sourceSystemOid;
+
+    /**
+     * 婧愮郴缁熷悕绉�
+     */
+    //@Transient(referColumn = "sourceSystemOid.name")
+    private String sourceSysName;
+
+    /**
+     * 婧愮郴缁熸爣璇�
+     */
+    //@Transient(referColumn = "sourceSystemOid.id")
+    private String sourceSysId;
+
+    /**
+     * 鐩爣绯荤粺涓婚敭
+     */
+    @Column(columnDefinition = "鐩爣绯荤粺涓婚敭")
+    @VciUseRefer(MdmBtmTypeConstant.SYS_INT_BASE)
+    private String targetSystemOid;
+
+    /**
+     * 鐩爣绯荤粺鍚嶇О
+     */
+    //@Transient(referColumn = "targetSystemOid.name")
+    private String targetSysName;
+
+    /**
+     * 鐩爣绯荤粺鏍囪瘑
+     */
+    //@Transient(referColumn = "targetSystemOid.id")
+    private String targetSysId;
+
+    /**
+     * 璇锋眰鏂瑰紡
+     */
+    @Column(columnDefinition = "璇锋眰鏂瑰紡")
+    @VciUseEnum(value = MdmEnumIdConstant.SYS_INTEGRATION_REQUEST_METHOD_TYPE,showTextField = "requestMethodText")
+    private String requestMethod;
+
+    /**
+     * 璇锋眰鏂瑰紡鏄剧ず鏂囨湰
+     */
+    @Transient()
+    private String requestMethodText;
+
+    /**
+     * 璁よ瘉鏂瑰紡涓婚敭
+     */
+    @Column(columnDefinition = "璁よ瘉鏂瑰紡涓婚敭")
+    @VciUseRefer(MdmBtmTypeConstant.SYS_INT_AUTHORITY)
+    private String authorityOid;
+
+    /**
+     * 璁よ瘉鏂瑰紡
+     */
+    @Transient(referColumn = "authorityOid.type")
+    @VciUseEnum(value = MdmEnumIdConstant.SYS_INTEGRATION_AUTHORITY_TYPE,showTextField = "authorityTypeText")
+    private String authorityType;
+
+    /**
+     * 璁よ瘉鏂瑰紡鏄剧ず鏂囨湰
+     */
+    @Transient()
+    private String authorityTypeText;
+
+    /**
+     * 楠岃瘉鐢ㄦ埛
+     */
+    @Transient(referColumn = "authorityOid.userAccount")
+    private String userAccount;
+
+    /**
+     * 楠岃瘉瀵嗙爜
+     */
+    @Transient(referColumn = "authorityOid.userCode")
+    private String userCode;
+
+    /**
+     * 楠岃瘉浠ょ墝
+     */
+    @Transient(referColumn = "authorityOid.token")
+    private String token;
+
+    /**
+     * 鎺ュ彛鎻忚堪
+     */
+    @Column(columnDefinition = "鎺ュ彛鎻忚堪")
+    private String description;
+
+    /**
+     * 绫昏矾寰�
+     */
+    @Column(columnDefinition = "绫昏矾寰�")
+    private String classPath;
+
+    /**
+     * 鏁版嵁娴佸悜鏂瑰紡
+     */
+    @Column(columnDefinition = "鏁版嵁娴佸悜鏂瑰紡")
+    @VciUseEnum(value = MdmEnumIdConstant.SYS_INTEGRATION_DATA_FLOW_TYPE,showTextField = "dataFlowTypeText")
+    private String dataFlowType;
+
+    /**
+     * 鏁版嵁娴佸悜鏂瑰紡鐨勬樉绀哄瓧娈�
+     */
+    @Transient()
+    private String dataFlowTypeText;
+
+    /***
+     * 鎺ㄩ�佺被鍨� 1:鏁版嵁鎺ㄩ��/2鍒嗙被鎺ㄩ�侊紝榛樿鏁版嵁鎺ㄩ��
+     */
+    @Column(columnDefinition = "鎺ㄩ�佺被鍨�")
+    @VciUseEnum(value = MdmEnumIdConstant.SYS_INTEGRATION_PUSH_TYPE,showTextField = "pushTypeText")
+    private String pushType;
+    /***
+     * 鎺ㄩ�佺被鍨嬫樉绀哄��
+     */
+    @Transient()
+    private String pushTypeText;
+
+    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 getClassPath() {
+        return classPath;
+    }
+
+    public void setClassPath(String classPath) {
+        this.classPath = classPath;
+    }
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getSourceSystemOid() {
+        return sourceSystemOid;
+    }
+
+    public void setSourceSystemOid(String sourceSystemOid) {
+        this.sourceSystemOid = sourceSystemOid;
+    }
+
+    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 getTargetSystemOid() {
+        return targetSystemOid;
+    }
+
+    public void setTargetSystemOid(String targetSystemOid) {
+        this.targetSystemOid = targetSystemOid;
+    }
+
+    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;
+    }
+
+    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 getRequestUrl() {
+        return requestUrl;
+    }
+
+    public void setRequestUrl(String requestUrl) {
+        this.requestUrl = requestUrl;
+    }
+
+    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 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 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 getAuthorityOid() {
+        return authorityOid;
+    }
+
+    public void setAuthorityOid(String authorityOid) {
+        this.authorityOid = authorityOid;
+    }
+
+    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;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public String getInterfaceFunction() {
+        return interfaceFunction;
+    }
+
+    public void setInterfaceFunction(String interfaceFunction) {
+        this.interfaceFunction = interfaceFunction;
+    }
+
+    public String getAuthorityType() {
+        return authorityType;
+    }
+
+    public void setAuthorityType(String authorityType) {
+        this.authorityType = authorityType;
+    }
+
+    public String getAuthorityTypeText() {
+        return authorityTypeText;
+    }
+
+    public void setAuthorityTypeText(String authorityTypeText) {
+        this.authorityTypeText = authorityTypeText;
+    }
+
+    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 String getPushType() {
+        return pushType;
+    }
+
+    public void setPushType(String pushType) {
+        this.pushType = pushType;
+    }
+
+    public String getPushTypeText() {
+        return pushTypeText;
+    }
+
+    public void setPushTypeText(String pushTypeText) {
+        this.pushTypeText = pushTypeText;
+    }
+
+    @Override
+    public String toString() {
+        return "SysIntInfoDO{" +
+                "usedflag='" + usedflag + '\'' +
+                ", classifyoid='" + classifyoid + '\'' +
+                ", classifyid='" + classifyid + '\'' +
+                ", classifyname='" + classifyname + '\'' +
+                ", sysbaseoid='" + sysbaseoid + '\'' +
+                ", sysbaseid='" + sysbaseid + '\'' +
+                ", sysbasename='" + sysbasename + '\'' +
+                ", interfaceFunction='" + interfaceFunction + '\'' +
+                ", namespace='" + namespace + '\'' +
+                ", soapaction='" + soapaction + '\'' +
+                ", targName='" + targName + '\'' +
+                ", cxfaxis='" + cxfaxis + '\'' +
+                ", requestUrl='" + requestUrl + '\'' +
+                ", interfaceType='" + interfaceType + '\'' +
+                ", interfaceTypeText='" + interfaceTypeText + '\'' +
+                ", paramType='" + paramType + '\'' +
+                ", paramTypeText='" + paramTypeText + '\'' +
+                ", returnType='" + returnType + '\'' +
+                ", returnTypeText='" + returnTypeText + '\'' +
+                ", btmTypeId='" + btmTypeId + '\'' +
+                ", btmTypeName='" + btmTypeName + '\'' +
+                ", sourceSystemOid='" + sourceSystemOid + '\'' +
+                ", sourceSysName='" + sourceSysName + '\'' +
+                ", sourceSysId='" + sourceSysId + '\'' +
+                ", targetSystemOid='" + targetSystemOid + '\'' +
+                ", targetSysName='" + targetSysName + '\'' +
+                ", targetSysId='" + targetSysId + '\'' +
+                ", requestMethod='" + requestMethod + '\'' +
+                ", requestMethodText='" + requestMethodText + '\'' +
+                ", authorityOid='" + authorityOid + '\'' +
+                ", authorityType='" + authorityType + '\'' +
+                ", authorityTypeText='" + authorityTypeText + '\'' +
+                ", userAccount='" + userAccount + '\'' +
+                ", userCode='" + userCode + '\'' +
+                ", token='" + token + '\'' +
+                ", description='" + description + '\'' +
+                ", classPath='" + classPath + '\'' +
+                ", dataFlowType='" + dataFlowType + '\'' +
+                ", dataFlowTypeText='" + dataFlowTypeText + '\'' +
+                ", pushType='" + pushType + '\'' +
+                ", pushTypeText='" + pushTypeText + '\'' +
+                '}';
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntParamDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntParamDO.java
new file mode 100644
index 0000000..55703c1
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/SysIntParamDO.java
@@ -0,0 +1,89 @@
+package org.springblade.code.model;
+
+
+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;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+
+/**
+ * Description: 绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+ *
+ * @author: wangyi
+ * @date: Created on 2022/3/7
+ */
+@VciBtmType(name = MdmBtmTypeConstant.SYS_INT_PARAMTERY,text = "绯荤粺闆嗘垚鎺ュ彛鐨勮璇�",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE,startStatus = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+public class SysIntParamDO extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = 1144067849291882385L;
+
+    /**
+     * SysIntInfoDO 鐨刼id
+     */
+    @Column(columnDefinition = "鎺ュ彛oid")
+    private String infoOid;
+
+    /**
+     * 鍙傛暟key
+     */
+    @Column(columnDefinition = "鍙傛暟key")
+    private String paramkey;
+
+    /**
+     * 鍙傛暟value
+     */
+    @Column(columnDefinition = "鍙傛暟value")
+    private String paramvalue;
+
+    /**
+     * 鏄惁浣跨敤
+     */
+    @Column(columnDefinition = "鏄惁浣跨敤")
+    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/blade-code/src/main/java/org/springblade/code/model/TaskDuckingDO.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/TaskDuckingDO.java
new file mode 100644
index 0000000..bcb3abc
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/model/TaskDuckingDO.java
@@ -0,0 +1,236 @@
+package org.springblade.code.model;
+
+/**
+ * V5鍙戦�佹秷鎭璞�
+ * @author wangyi
+ * @date 2022-03-14
+ */
+public class TaskDuckingDO {
+
+    /**
+     * 娉ㄥ唽绯荤粺缂栫爜
+     */
+    public String registerCode;
+
+    /**
+     * 绗笁鏂圭郴缁熷緟鍔炰富閿�
+     */
+    public String taskId;
+
+    /**
+     * 寰呭姙鏍囬
+     */
+    public String title;
+
+    /**
+     * 寰呭姙鍙戣捣浜哄鍚�
+     */
+    public String senderName;
+
+    /**
+     * 绫诲埆
+     */
+    public String classify;
+
+    /**
+     * 鍐呭绫诲瀷
+     */
+    public String contentType;
+
+    /**
+     * 鐘舵��0寰呭姙锛�1宸插姙
+     */
+    public String state;
+
+    /**
+     * H5绌块�忓湴鍧�
+     */
+    public String h5url;
+    /**
+     * PC绌块�忓湴鍧�
+     */
+    public String url;
+    /**
+     * 鐧诲綍鍚嶇О/浜哄憳缂栫爜/鎵嬫満鍙�/鐢靛瓙閭欢
+     */
+    public String noneBindingSender;
+    /**
+     * 鐧诲綍鍚嶇О/浜哄憳缂栫爜/鎵嬫満鍙�/鐢靛瓙閭欢
+     */
+    public String noneBindingReceiver;
+
+    /**
+     * 绗笁鏂圭郴缁熷彂閫佽�呬富閿�
+     */
+    public String thirdSenderId;
+
+    /**
+     * 绗笁鏂圭郴缁熸帴鏀朵汉涓婚敭
+     */
+    public String thirdReceiverId;
+
+    /**
+     * 寰呭姙鍙戣捣鏃ユ湡锛屾牸寮弝yyy-MM-dd HH:mm
+     */
+    public String creationDate;
+
+    /**
+     * 鍘熺敓app鐨勪笅杞藉湴鍧�
+     */
+    public String content;
+
+    /**
+     * 澶勭悊鍚庣姸鎬侊細0/1/2/3鍚屾剰宸插姙/涓嶅悓鎰忓凡鍔�/鍙栨秷/椹冲洖
+     */
+    public String subState;
+
+    public String getRegisterCode() {
+        return registerCode;
+    }
+
+    public void setRegisterCode(String registerCode) {
+        this.registerCode = registerCode;
+    }
+
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getSenderName() {
+        return senderName;
+    }
+
+    public void setSenderName(String senderName) {
+        this.senderName = senderName;
+    }
+
+    public String getClassify() {
+        return classify;
+    }
+
+    public void setClassify(String classify) {
+        this.classify = classify;
+    }
+
+    public String getContentType() {
+        return contentType;
+    }
+
+    public void setContentType(String contentType) {
+        this.contentType = contentType;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getH5url() {
+        return h5url;
+    }
+
+    public void setH5url(String h5url) {
+        this.h5url = h5url;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getNoneBindingSender() {
+        return noneBindingSender;
+    }
+
+    public void setNoneBindingSender(String noneBindingSender) {
+        this.noneBindingSender = noneBindingSender;
+    }
+
+    public String getNoneBindingReceiver() {
+        return noneBindingReceiver;
+    }
+
+    public void setNoneBindingReceiver(String noneBindingReceiver) {
+        this.noneBindingReceiver = noneBindingReceiver;
+    }
+
+    public String getThirdSenderId() {
+        return thirdSenderId;
+    }
+
+    public void setThirdSenderId(String thirdSenderId) {
+        this.thirdSenderId = thirdSenderId;
+    }
+
+    public String getThirdReceiverId() {
+        return thirdReceiverId;
+    }
+
+    public void setThirdReceiverId(String thirdReceiverId) {
+        this.thirdReceiverId = thirdReceiverId;
+    }
+
+    public String getCreationDate() {
+        return creationDate;
+    }
+
+    public void setCreationDate(String creationDate) {
+        this.creationDate = creationDate;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getSubState() {
+        return subState;
+    }
+
+    public void setSubState(String subState) {
+        this.subState = subState;
+    }
+
+    @Override
+    public String toString() {
+        return "{" +
+                "registerCode='" + registerCode + '\'' +
+                ", taskId='" + taskId + '\'' +
+                ", title='" + title + '\'' +
+                ", senderName='" + senderName + '\'' +
+                ", classify='" + classify + '\'' +
+                ", contentType='" + contentType + '\'' +
+                ", state='" + state + '\'' +
+                ", h5url='" + h5url + '\'' +
+                ", url='" + url + '\'' +
+                ", noneBindingSender='" + noneBindingSender + '\'' +
+                ", noneBindingReceiver='" + noneBindingReceiver + '\'' +
+                ", thirdSenderId='" + thirdSenderId + '\'' +
+                ", thirdReceiverId='" + thirdReceiverId + '\'' +
+                ", creationDate='" + creationDate + '\'' +
+                ", content='" + content + '\'' +
+                ", subState='" + subState + '\'' +
+                '}';
+    }
+}
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
index 4263f5e..75db4ce 100644
--- 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
@@ -1,15 +1,11 @@
 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.starter.web.pagemodel.*;
 import com.vci.web.pageModel.BatchCBO;
-import com.vci.web.pageModel.KeyValue;
+import org.springblade.code.dto.CodeBasicSecDTO;
+import org.springblade.code.model.CodeBasicSecDO;
 import org.springblade.code.vo.pagemodel.CodeBasicSecVO;
 
 import java.util.Collection;
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
index b2ed736..7e538a8 100644
--- 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
@@ -1,13 +1,13 @@
 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 org.springblade.code.dto.CodeButtonDTO;
+import org.springblade.code.model.CodeButtonDO;
+import org.springblade.code.vo.pagemodel.CodeButtonVO;
 
 import java.util.Collection;
 import java.util.List;
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
index 83a85cb..aa38a9a 100644
--- 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
@@ -1,14 +1,14 @@
 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 org.springblade.code.dto.CodeClassifyProcessTempDTO;
+import org.springblade.code.model.CodeClassifyProcessTempDO;
+import org.springblade.code.vo.pagemodel.CodeClassifyProcessTempVO;
 
 import java.util.Collection;
 import java.util.List;
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
index 2db04f6..3ac7dd0 100644
--- 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
@@ -1,14 +1,14 @@
 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 org.springblade.code.bo.CodeClassifyFullInfoBO;
+import org.springblade.code.dto.CodeClassifyDTO;
+import org.springblade.code.model.CodeClassifyDO;
+import org.springblade.code.vo.pagemodel.CodeClassifyVO;
 
 import java.io.File;
 import java.util.Collection;
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
index 7b6a4f6..d854dd6 100644
--- 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
@@ -1,13 +1,13 @@
 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 org.springblade.code.dto.CodeClassifyTempMapItemDTO;
+import org.springblade.code.model.CodeClassifyTempMapItemDO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTempMapItemVO;
 
 import java.util.Collection;
 import java.util.List;
@@ -36,7 +36,7 @@
      * @return 鏄剧ず瀵硅薄
      * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
-    List<CodeClassifyTempMapItemVO> codeClassifyTempMapItemDO2VOs(Collection<CodeClassifyTempMapItemDO>  codeClassifyTempMapItemDOs) throws VciBaseException;
+    List<CodeClassifyTempMapItemVO> codeClassifyTempMapItemDO2VOs(Collection<CodeClassifyTempMapItemDO> codeClassifyTempMapItemDOs) 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
index e18bdfd..cf1dcfa 100644
--- 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
@@ -1,15 +1,15 @@
 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 org.springblade.code.dto.CodeClassifyTemplateAttrDTO;
+import org.springblade.code.model.CodeClassifyTemplateAttrDO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
 
 import java.util.Collection;
 import java.util.List;
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
index 7d1db22..700e08c 100644
--- 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
@@ -1,14 +1,14 @@
 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 org.springblade.code.dto.CodeClassifyTemplateButtonDTO;
+import org.springblade.code.model.CodeClassifyTemplateButtonDO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
 
 import java.util.Collection;
 import java.util.List;
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
index 6897f16..c327e9e 100644
--- 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
@@ -1,13 +1,13 @@
 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 org.springblade.code.dto.CodeClassifyTemplateMapDTO;
+import org.springblade.code.model.CodeClassifyTemplateMapDO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateMapVO;
 
 import java.util.Collection;
 import java.util.List;
@@ -35,7 +35,7 @@
      * @return 鏄剧ず瀵硅薄
      * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
-    List<CodeClassifyTemplateMapVO> codeClassifyTemplateMapDO2VOs(Collection<CodeClassifyTemplateMapDO>  codeClassifyTemplateMapDOs) throws VciBaseException;
+    List<CodeClassifyTemplateMapVO> codeClassifyTemplateMapDO2VOs(Collection<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOs) 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
index ef98847..d14eed2 100644
--- 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
@@ -1,11 +1,10 @@
 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 org.springblade.code.dto.CodeClassifyTemplateDTO;
+import org.springblade.code.model.CodeClassifyTemplateDO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateVO;
 
 import java.util.Collection;
 import java.util.List;
@@ -39,7 +38,7 @@
      * @return 鏄剧ず瀵硅薄
      * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
-    List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO>  codeClassifyTemplateDOs) throws VciBaseException;
+    List<CodeClassifyTemplateVO> codeClassifyTemplateDO2VOs(Collection<CodeClassifyTemplateDO> codeClassifyTemplateDOs) throws VciBaseException;
 
     /**
      * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
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
index 45916f7..830eaed 100644
--- 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
@@ -1,13 +1,13 @@
 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 org.springblade.code.dto.CodeClassifyValueDTO;
+import org.springblade.code.model.CodeClassifyValueDO;
+import org.springblade.code.vo.pagemodel.CodeClassifyValueVO;
 
 import java.util.Collection;
 import java.util.List;
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
index 0a8f35b..f895be7 100644
--- 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
@@ -1,10 +1,13 @@
 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 org.springblade.code.model.DockingDataDO;
+import org.springblade.code.model.DockingLogeDO;
+import org.springblade.code.model.DockingTaskDO;
+import org.springblade.code.model.SysIntHeaderDO;
 
 import java.util.Map;
 
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
index fb50094..ef3ebc6 100644
--- 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
@@ -1,13 +1,13 @@
 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 org.springblade.code.dto.CodeFixedValueDTO;
+import org.springblade.code.model.CodeFixedValueDO;
+import org.springblade.code.vo.pagemodel.CodeFixedValueVO;
 
 import java.util.Collection;
 import java.util.List;
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
index 9804fa9..d18a60f 100644
--- 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
@@ -1,13 +1,13 @@
 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 org.springblade.code.dto.CodePhaseAttrDTO;
+import org.springblade.code.model.CodePhaseAttrDO;
+import org.springblade.code.vo.pagemodel.CodePhaseAttrVO;
 
 import java.util.Collection;
 import java.util.List;
@@ -36,7 +36,7 @@
      * @return 鏄剧ず瀵硅薄
      * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
-    List<CodePhaseAttrVO> codePhaseAttrDO2VOs(Collection<CodePhaseAttrDO>  codePhaseAttrDOs) throws VciBaseException;
+    List<CodePhaseAttrVO> codePhaseAttrDO2VOs(Collection<CodePhaseAttrDO> codePhaseAttrDOs) throws VciBaseException;
 
     /**
      * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
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
index f0cce62..bf061ec 100644
--- 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
@@ -1,13 +1,12 @@
 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 org.springblade.code.dto.CodeResembleRuleDTO;
+import org.springblade.code.model.CodeResembleRuleDO;
+import org.springblade.code.vo.pagemodel.CodeResembleRuleVO;
 
 import java.util.Collection;
 import java.util.List;
@@ -36,7 +35,7 @@
      * @return 鏄剧ず瀵硅薄
      * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
-    List<CodeResembleRuleVO> codeResembleRuleDO2VOs(Collection<CodeResembleRuleDO>  codeResembleRuleDOs) throws VciBaseException;
+    List<CodeResembleRuleVO> codeResembleRuleDO2VOs(Collection<CodeResembleRuleDO> codeResembleRuleDOs) 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
index 9ef1275..c822141 100644
--- 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
@@ -1,14 +1,14 @@
 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 org.springblade.code.dto.CodeRuleDTO;
+import org.springblade.code.model.CodeRuleDO;
+import org.springblade.code.vo.pagemodel.CodeClassifyVO;
+import org.springblade.code.vo.pagemodel.CodeRuleVO;
 
 import java.util.Collection;
 import java.util.List;
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
index 367212b..fad2385 100644
--- 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
@@ -1,7 +1,7 @@
 package org.springblade.code.service;
 
-import com.vci.mdm.pagemodel.CodeSerialAlgorithmVO;
 import com.vci.starter.web.pagemodel.DataGrid;
+import org.springblade.code.vo.pagemodel.CodeSerialAlgorithmVO;
 
 /**
  * 娴佹按绠楁硶绫�
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
index 1561bc7..9120d9b 100644
--- 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
@@ -1,13 +1,13 @@
 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 org.springblade.code.dto.CodeSynonymDTO;
+import org.springblade.code.model.CodeSynonymDO;
+import org.springblade.code.vo.pagemodel.CodeSynonymVO;
 
 import java.util.Collection;
 import java.util.List;
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
index 8b67b67..cb88e8d 100644
--- 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
@@ -1,16 +1,15 @@
 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 org.springblade.code.dto.CodeTemplatePhaseDTO;
+import org.springblade.code.model.CodeClassifyTemplateAttrDO;
+import org.springblade.code.model.CodeTemplatePhaseDO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import org.springblade.code.vo.pagemodel.CodeTemplatePhaseVO;
 
 import java.util.Collection;
 import java.util.List;
@@ -39,7 +38,7 @@
      * @return 鏄剧ず瀵硅薄
      * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
-    List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhaseDO>  codeTemplatePhaseDOs) throws VciBaseException;
+    List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhaseDO> codeTemplatePhaseDOs) throws VciBaseException;
 
     /**
      * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataInfoServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataInfoServiceI.java
new file mode 100644
index 0000000..b8bbd54
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataInfoServiceI.java
@@ -0,0 +1,100 @@
+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.dto.DockingPreApplyDataInfoDTO;
+import org.springblade.code.model.DockingPreApplyDataInfoDO;
+import org.springblade.code.vo.pagemodel.DockingPreApplyDataInfoVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+public interface DockingPreApplyDataInfoServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<DockingPreApplyDataInfoVO> gridDockingPreApplyDataInfo(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param dockingPreApplyDataInfoDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<DockingPreApplyDataInfoVO> dockingPreApplyDataInfoDO2VOs(Collection<DockingPreApplyDataInfoDO> dockingPreApplyDataInfoDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  dockingPreApplyDataInfoDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DockingPreApplyDataInfoVO dockingPreApplyDataInfoDO2VO(DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param dockingPreApplyDataInfoDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    DockingPreApplyDataInfoVO addSave(DockingPreApplyDataInfoDTO dockingPreApplyDataInfoDTO) throws VciBaseException;
+
+    /**
+     * 淇敼璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param dockingPreApplyDataInfoDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    DockingPreApplyDataInfoVO editSave(DockingPreApplyDataInfoDTO dockingPreApplyDataInfoDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param dockingPreApplyDataInfoDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteDockingPreApplyDataInfo(DockingPreApplyDataInfoDTO dockingPreApplyDataInfoDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+    * @param oid 涓婚敭
+    * @return 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    DockingPreApplyDataInfoVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<DockingPreApplyDataInfoVO> listDockingPreApplyDataInfoByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<DockingPreApplyDataInfoVO> refDataGridDockingPreApplyDataInfo(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataServiceI.java
new file mode 100644
index 0000000..d9969b6
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreApplyDataServiceI.java
@@ -0,0 +1,152 @@
+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.dto.CodeOrderDTO;
+import org.springblade.code.dto.DockingPreApplyDataDTO;
+import org.springblade.code.dto.DockingPreApplyDataInfoDTO;
+import org.springblade.code.dto.PreApplyCodeOrderDTO;
+import org.springblade.code.model.DockingPreApplyDataDO;
+import org.springblade.code.vo.pagemodel.DockingPreApplyDataVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏈嶅姟鎺ュ彛
+ *
+ * @author weidy
+ * @date 2022-04-05
+ */
+public interface DockingPreApplyDataServiceI {
+
+
+    /***
+     * 鎵归噺缁存姢鍒嗙被璁剧疆
+     * @param dockingPreApplyDataDTO
+     * @return
+     * @throws VciBaseException
+     */
+    List<DockingPreApplyDataVO> batchSetDataClassId(DockingPreApplyDataDTO dockingPreApplyDataDTO)throws VciBaseException;
+
+    /***
+     * 鏍规嵁閫夋嫨棰濋鐢宠鐨勬暟鎹嬀閫夋暟鎹�
+     * @param codeClassifyOid
+     * @param templateOid
+     * @param btmType
+     * @param dataOids
+     * @return
+     * @throws VciBaseException
+     */
+    DataGrid<Map<String,String>> gridApplyData(String codeClassifyOid,String templateOid,String btmType,String dataOids)throws VciBaseException;
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param dockingPreApplyDataDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<DockingPreApplyDataVO> dockingPreApplyDataDO2VOs(Collection<DockingPreApplyDataDO>  dockingPreApplyDataDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  dockingPreApplyDataDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DockingPreApplyDataVO dockingPreApplyDataDO2VO(DockingPreApplyDataDO dockingPreApplyDataDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param dockingPreApplyDataDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    DockingPreApplyDataVO addSave(DockingPreApplyDataDTO dockingPreApplyDataDTO) throws VciBaseException;
+
+    /**
+     * 鍒犻櫎璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param dockingPreApplyDataDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteDockingPreApplyData(DockingPreApplyDataDTO dockingPreApplyDataDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+    * @param oid 涓婚敭
+    * @return 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    DockingPreApplyDataVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<DockingPreApplyDataVO> listDockingPreApplyDataByOids(Collection<String> oidCollections) throws VciBaseException;
+
+    /**
+     * 鍙傜収璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<DockingPreApplyDataVO> refDataGridDockingPreApplyData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    //==================
+    /**
+     * 鏌ヨ鎵�鏈夌殑璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<DockingPreApplyDataVO> gridDockingPreApplyData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 鎻掑叆data鍜宒atainfo,浼氳嚜鍔ㄦ妸data閲岀殑oid,unique璧嬪�煎埌datainfo閲岃竟鍘�
+     * @param dockingPreApplyDataDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @param dockingPreApplyDataInfoDTOList 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁璇︾粏淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    void addSaveDataAndInfo(DockingPreApplyDataDTO dockingPreApplyDataDTO, List<DockingPreApplyDataInfoDTO> dockingPreApplyDataInfoDTOList) throws VciBaseException;
+
+    /**
+     * 淇敼 datas
+     * @param dockingPreApplyDataDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    BaseResult editSave(DockingPreApplyDataDTO dockingPreApplyDataDTO) throws VciBaseException;
+
+    /**
+     * 鏍规嵁data鐨刼id鏌ヨdata淇℃伅鍜宒atainfo淇℃伅锛屽苟涓旀嫾鎺atainfo涓簃ap
+     * @param dockingPreApplyDataDTO
+     * @return
+     * @throws VciBaseException
+     */
+    BaseResult<Map<String,String>> getDataInfoMap(DockingPreApplyDataDTO dockingPreApplyDataDTO) throws VciBaseException;
+
+    /**
+     * 鎵归噺澶勭悊棰勭敵璇风紪鐮�
+     * 1銆佽皟鐢╡ngineService.addSaveCode(orderDTO)鍏堟彃鍏ラ鐢宠鏁版嵁鍒板搴斾富棰樺簱闈欐�佹暟鎹�
+     * 2銆佷慨鏀筪ockingPreApplyData鐨勫垎绫籵id鍜屽垎绫诲悕绉�
+     */
+    BaseResult applyData(List<PreApplyCodeOrderDTO> preApplyCodeOrderDTOList);
+
+    /**
+     * 鎵归噺澶勭悊棰勭敵璇风紪鐮�
+     * 1銆佽皟鐢╡ngineService.addSaveCode(orderDTO)鍏堟彃鍏ラ鐢宠鏁版嵁鍒板搴斾富棰樺簱闈欐�佹暟鎹�
+     * 2銆佷慨鏀筪ockingPreApplyData鐨勫垎绫籵id鍜屽垎绫诲悕绉�
+     */
+    BaseResult batchApplyDatas(List<CodeOrderDTO> CodeOrderDTOs);
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreAttrMappingSeviceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreAttrMappingSeviceI.java
new file mode 100644
index 0000000..f6182bf
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/DockingPreAttrMappingSeviceI.java
@@ -0,0 +1,48 @@
+package org.springblade.code.service;
+
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import org.springblade.code.dto.DockingPreAttrMappingDTO;
+import org.springblade.code.vo.pagemodel.DockingPreAttrMappingVO;
+import org.springblade.code.vo.pagemodel.DockingPreAttrRangeVO;
+
+import java.util.List;
+import java.util.Map;
+
+public interface DockingPreAttrMappingSeviceI {
+    /***
+     * 灞炴�ф槧灏勯厤缃垪琛�
+     * @param clsfId
+     * @param type
+     * @param conditionMap
+     * @param pageHelper
+     * @return
+     * @throws VciBaseException
+     */
+    DataGrid<DockingPreAttrMappingVO> gridAttrMappings(String clsfId,int type,Map<String, String> conditionMap, PageHelper pageHelper)throws VciBaseException;
+    /***
+     * 鏋氫妇鏄犲皠閰嶇疆鍒楄〃
+     * @param attrkey
+     * @param type
+     * @param conditionMap
+     * @param pageHelper
+     * @return
+     * @throws VciBaseException
+     */
+    DataGrid<DockingPreAttrRangeVO> gridAttrRanges(String attrkey, int type, Map<String, String> conditionMap, PageHelper pageHelper)throws VciBaseException;
+    /**
+     * 淇濆瓨灞炴�ф槧灏勯厤缃粍浠�
+     * @param dockingPreAttrMappingDTOS 灞炴�ф槧灏勯厤缃暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    public  List<DockingPreAttrMappingVO> batchAddSave(List<DockingPreAttrMappingDTO> dockingPreAttrMappingDTOS)throws VciBaseException;
+
+    /***
+     * 鏍规嵁鏉′欢鏌ヨ灞炴�ф槧灏勯厤缃俊鎭�
+     * @param conditionMap
+     * @return
+     * @throws VciBaseException
+     */
+    List<DockingPreAttrMappingVO> selectAttrMappings(Map<String, String> conditionMap)throws VciBaseException;
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmEngineServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmEngineServiceI.java
new file mode 100644
index 0000000..a471b09
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmEngineServiceI.java
@@ -0,0 +1,361 @@
+package org.springblade.code.service;
+
+import com.vci.starter.web.pagemodel.*;
+import com.vci.web.dto.BaseModelDTO;
+import com.vci.web.pageModel.KeyValue;
+import com.vci.web.pageModel.UIFormItemVO;
+import com.vci.web.pageModel.UITableFieldVO;
+import org.springblade.code.bo.CodeClassifyFullInfoBO;
+import org.springblade.code.bo.CodeTemplateAttrSqlBO;
+import org.springblade.code.dto.CodeDeleteBatchDTO;
+import org.springblade.code.dto.CodeOrderDTO;
+import org.springblade.code.vo.pagemodel.*;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓绘暟鎹紩鎿庢湇鍔�
+ * @author weidy
+ * @date 2022-2-21
+ */
+public interface MdmEngineServiceI {
+
+    /**
+     * 浣跨敤鍒嗙被涓婚敭鑾峰彇椤甸潰鐨勫唴瀹癸紝鍖呭惈鎸夐挳
+     * @param codeClassifyOid 涓婚搴撳垎绫讳富閿�
+     * @param functionId 鍔熻兘鐨勭紪鍙�
+     * @return UI鐩稿叧鐨勫唴瀹�
+     */
+    MdmUIInfoVO getUIInfoByClassifyOid(String codeClassifyOid, String functionId);
+
+    /**
+     * 浣跨敤涓婚搴撳垎绫昏幏鍙杣i鐩稿叧鐨勫唴瀹癸紙涓嶅寘鍚寜閽級
+     * @param codeClassifyOid 涓婚搴撶殑鍒嗙被鐨勪富閿�
+     * @return UI鐩稿叧鐨勫唴瀹�
+     */
+    MdmUIInfoVO getTableDefineByClassifyOid(String codeClassifyOid);
+
+    /**
+     * 浣跨敤鍒嗙被鐨勪富閿幏鍙栬〃鏍肩殑瀹氫箟
+     * @param codeClassifyOid 鍒嗙被涓婚敭
+     * @param phase 闃舵鐨勫悕绉�
+     * @return UI鐩稿叧鐨勪俊鎭紙浠呭寘鍚〃鍗�)
+     */
+    MdmUIInfoVO getTableDefineByClassifyOid_v2(String codeClassifyOid,String phase);
+
+    /**
+     * 浣跨敤鍒嗙被鐨勪富閿幏鍙栧彲浠ヤ娇鐢ㄧ殑妯℃澘瀵硅薄
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 妯℃澘鐨勬樉绀哄璞�
+     */
+    CodeClassifyTemplateVO getUsedTemplateByClassifyOid(String codeClassifyOid);
+
+    /**
+     * 浣跨敤鍒嗙被鐨勪富閿幏鍙栧彲浠ヤ娇鐢ㄧ殑妯℃澘瀵硅薄
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param hasAttr 鍖呭惈灞炴��
+     * @return 妯℃澘鐨勬樉绀哄璞�
+     */
+    CodeClassifyTemplateVO getUsedTemplateByClassifyOid(String codeClassifyOid, boolean hasAttr);
+
+    /**
+     * 浣跨敤妯℃澘鐨勪富閿幏鍙栬〃鍗曠殑淇℃伅
+     * @param codeClassifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return ui鐩稿叧鐨勫唴瀹�
+     */
+    MdmUIInfoVO getFormDefineByTemplateOid(String codeClassifyTemplateOid);
+
+    /**
+     * 浣跨敤妯℃澘鐨勪富閿幏鍙栬〃鍗曠殑淇℃伅
+     * @param codeClassifyTemplateOid 妯℃澘鐨勪富閿�
+     * @param codeClassifyOid 浣跨敤妯℃澘鐨勫垎绫荤殑涓婚敭
+     * @return ui鐩稿叧鐨勫唴瀹�
+     */
+    MdmUIInfoVO getFormDefineByTemplateOid(String codeClassifyTemplateOid,String codeClassifyOid);
+
+    /**
+     * 浣跨敤涓婚搴撳垎绫荤殑涓婚敭鑾峰彇琛ㄥ崟鐨勪俊鎭�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return ui鐩稿叧鐨勫唴瀹�
+     */
+    MdmUIInfoVO getFormDefineByClassifyOid(String codeClassifyOid);
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇ui鐩稿叧鐨勫唴瀹�
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @return ui鐩稿叧鐨勫唴瀹�
+     */
+    MdmUIInfoVO getTableDefineByTemplateOid(String templateOid);
+
+    /**
+     * 浣跨敤鍒嗙被涓婚敭鑾峰彇宸ュ叿鏍忎腑鐨勬寜閽俊鎭�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鎸夐挳鐨勪俊鎭紝浼氭寜鐓ф帓搴忓彿杩涜鎺掑簭
+     */
+    List<CodeButtonVO> listButtonInToolbarByClassifyOid(String codeClassifyOid);
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇宸ュ叿鏍忎腑鐨勬寜閽俊鎭�
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @return 鎸夐挳鐨勪俊鎭紝浼氭寜鐓ф帓搴忓彿杩涜鎺掑簭
+     */
+    List<CodeButtonVO> listButtonInToolbarByTemplateOid(String templateOid);
+
+    /**
+     * 浣跨敤鍒嗙被鑾峰彇瀵瑰簲鐨勬暟鎹�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鐨勫璞�
+     * @return 鏁版嵁锛堝寘鍚笅绾у垎绫伙級
+     */
+    DataGrid<Map<String, String>> gridTableDataByClassifyOid(String codeClassifyOid, String templateOid, Map<String, String> conditionMap, PageHelper pageHelper);
+
+    /**
+     * 鏌ヨ缂栫爜鏁版嵁鐨勫垪琛�
+     * @param btmType 涓氬姟绫诲瀷
+     * @param templateVO 妯℃澘鐨勫璞★紝闇�瑕佸寘鍚ā鏉跨殑灞炴��
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉瀵硅薄
+     * @return 鏁版嵁鍒楄〃
+     */
+    DataGrid<Map<String,String>> queryGrid(String btmType, CodeClassifyTemplateVO templateVO, Map<String, String> conditionMap, PageHelper pageHelper);
+
+    /**
+     * 鏍规嵁妯℃澘灞炴�х敓鎴愮浉搴旂殑sql淇℃伅
+     * @param btmType 涓氬姟绫诲瀷
+     * @param templateVO 妯℃澘鏄剧ず瀵硅薄锛屽繀椤诲寘鍚睘鎬�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴忓璞�
+     * @return sql鐨勭浉鍏充俊鎭�
+     */
+    CodeTemplateAttrSqlBO getSqlByTemplateVO(String btmType, CodeClassifyTemplateVO templateVO, Map<String, String> conditionMap, PageHelper pageHelper);
+
+    /**
+     * 灏佽寮�鍏崇殑鍐呭锛屽父鐢ㄤ簬瀵煎嚭
+     * @param dataMap 鏁版嵁鐨勫唴瀹�
+     * @param templateVO 妯℃澘鐨勬樉绀�
+     */
+    void wrapperBoolean(List<Map<String, String>> dataMap, CodeClassifyTemplateVO templateVO);
+
+    /**
+     * 灏佽鏌ヨ鍑烘潵鐨勬暟鎹�
+     * @param dataMap 鏁版嵁鐨勬槧灏�
+     * @param templateVO 妯℃澘鐨勫睘鎬�
+     * @param onlySelectAttrIdList 浠呬粎鏌ヨ鐨勫睘鎬у瓧娈�
+     * @param form 鏄惁涓鸿〃鍗曪紝琛ㄥ崟涓嶄細杞崲鏃堕棿鏍煎紡
+     */
+    void wrapperData(List<Map<String, String>> dataMap, CodeClassifyTemplateVO templateVO,
+                     Collection<String> onlySelectAttrIdList,boolean form);
+
+    /**
+     * 鑾峰彇鏋氫妇鐨勪笅鎷夐�夐」
+     * @param attrVO 妯℃澘灞炴�х殑瀵硅薄
+     * @return 涓嬫媺閫夐」
+     */
+    List<KeyValue> listComboboxItems(CodeClassifyTemplateAttrVO attrVO);
+
+    /**
+     * 浣跨敤鏁版嵁涓婚敭鑾峰彇鏁版嵁鐨勫叏閮ㄤ俊鎭�
+     * @param oid 涓婚敭
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @return 鏁版嵁鐨勫唴瀹�
+     */
+    BaseResult<Map<String, String>> getDataByOid(String oid, String templateOid);
+
+    /**
+     * 浣跨敤涓婚搴撳垎绫昏幏鍙栫紪鐮佽鍒�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 缂栫爜瑙勫垯鐨勫唴瀹�
+     */
+    CodeRuleVO getCodeRuleByClassifyOid(String codeClassifyOid);
+
+    /**
+     * 浣跨敤鍒嗙被鐨勫叏閮ㄤ俊鎭幏鍙栫紪鐮佽鍒�
+     * @param fullInfoBO 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @return 瑙勫垯鐨勫唴瀹�
+     */
+    CodeRuleVO getCodeRuleByClassifyFullInfo(CodeClassifyFullInfoBO fullInfoBO);
+
+    /**
+     * 浣跨敤鐮佹鐨勪富閿幏鍙栧垎绫荤殑鐮佸�煎唴瀹�
+     * @param classifySecOid 鐮佹鐨勪富閿�
+     * @param parentClassifyValueOid 涓婄骇鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鐮佸�肩殑鍐呭
+     */
+    List<CodeClassifyValueVO> listCodeClassifyValueBySecOid(String classifySecOid, String parentClassifyValueOid);
+
+    /**
+     * 鐢宠鍗曚竴缂栫爜
+     * @param orderDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭
+     * @return 杩斿洖缂栫爜鐨勫唴瀹�
+     */
+    String addSaveCode(CodeOrderDTO orderDTO);
+
+    /**
+     * 淇敼涓婚搴撴暟鎹�
+     * @param orderDTO 鏁版嵁鐨勫唴瀹癸紝涓嶇敤鍖呭惈鐮佹鐨勫唴瀹逛簡
+     */
+    void editSaveCode(CodeOrderDTO orderDTO);
+
+    /**
+     * 鍗囩増鐨勪富棰樺簱鏁版嵁
+     * @param orderDTO 鏁版嵁鐨勫唴瀹癸紝涓嶉渶瑕佸寘鍚爜娈电殑鍐呭
+     */
+    void upSaveCode(CodeOrderDTO orderDTO);
+
+    /**
+     *  淇濆瓨鍙緭鍙�夌殑淇℃伅
+     * @param templateVO 妯℃澘鐨勫璞�
+     * @param cboList 鏁版嵁鐨勫唴瀹�
+     */
+    void batchSaveSelectChar(CodeClassifyTemplateVO templateVO, List<ClientBusinessObject> cboList);
+
+    /**
+     * 鍒犻櫎涓婚搴撴暟鎹�
+     * @param deleteBatchDTO 鏁版嵁鐨勫唴瀹癸紝蹇呴』瑕佹湁涓婚敭鍜屽垎绫讳富閿�
+     */
+    void deleteCode(CodeDeleteBatchDTO deleteBatchDTO);
+
+    /**
+     * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞
+     * @param value 褰撳墠鐨勫��
+     * @param keyRuleVO 鍏抽敭灞炴�х殑鎺у埗瑙勫垯锛屽彲浠ヤ负绌�
+     * @param attrId 灞炴�х殑缂栧彿
+     * @param trim 鏄惁鍘婚櫎绌烘牸
+     * @param ignoreCase 鏄惁涓嶅尯鍒嗗ぇ灏忓啓
+     * @param ignoreWidth 鏄惁蹇界暐鍏ㄥ崐瑙�
+     * @param trimAll 鏄惁蹇界暐鍏ㄩ儴绌烘牸
+     * @param conditionMap 鏌ヨ鏉′欢
+     */
+    void wrapperKeyAttrConditionMap(String value, CodeKeyAttrRepeatRuleVO keyRuleVO, String attrId,
+                                    boolean trim, boolean ignoreCase, boolean ignoreWidth,
+                                    boolean trimAll, Map<String, String> conditionMap);
+
+    /**
+     * 鍒ゆ柇缂栫爜鐨勭爜娈垫槸鍚﹁緭鍏ユ垨鑰呴�夋嫨浜嗙爜鍊�
+     * @param ruleVO 瑙勫垯鐨勬樉绀哄璞�
+     * @param orderDTO 缂栫爜鐢宠鐨勫唴瀹�
+     */
+    void checkSecValueOnOrder(CodeRuleVO ruleVO, CodeOrderDTO orderDTO);
+
+    /**
+     * 浣跨敤鍒嗙被鍜岄樁娈电殑缂栧彿锛岃幏鍙栧寘鍚殑灞炴��
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param phase 闃舵鐨勫悕绉�
+     * @return 灞炴�х殑鑻辨枃鍚嶇О
+     */
+    List<String> listPhaseAttrByClassifyOid(String codeClassifyOid, String phase);
+
+    /**
+     * 璺緞涓婂寘鍚綋鍓嶅垎绫荤殑鎵�鏈夊垎绫讳俊鎭�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鏍�
+     */
+    List<Tree> hasSelfClassifyTree(String codeClassifyOid);
+
+    /**
+     * 鍒嗙被娉ㄥ叆鐨勫唴瀹归瑙�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param codeTemplateOid 妯℃澘鐨勪富閿�
+     * @return key鏄垎绫绘敞鍏ョ殑灞炴�э紝value鏄敞鍏ュ悗鐨勫��
+     */
+    Map<String, String> previewClassify(String codeClassifyOid, String codeTemplateOid);
+
+    /**
+     * 棰勮缁勫悎瑙勫垯
+     * @param orderDTO 鐢宠缂栫爜鐨勪俊鎭�
+     * @return key鏄粍鍚堣鍒欑殑灞炴�с�倂alue鏄粍鍚堝悗鐨勫�硷紝銆傚鏋滅己灏戞煇涓睘鎬х殑鍊硷紝浼氫綔涓簐alue杩斿洖
+     */
+    Map<String,String> previewCompRule(CodeOrderDTO orderDTO);
+
+    /**
+     * 淇敼鐘舵��
+     * @param baseModelDTO 鏁版嵁浼犺緭瀵硅薄
+     */
+    void changeStatus(BaseModelDTO baseModelDTO);
+
+    /**
+     * 鐩镐技椤规煡璇�
+     * @param orderDTO 缂栫爜鐨勭浉鍏充俊鎭�
+     * @return 鏁版嵁鍒楄〃
+     */
+    DataGrid<Map<String, String>> resembleQuery(CodeOrderDTO orderDTO);
+
+    /**
+     * 浣跨敤鍒嗙被涓婚敭鑾峰彇鐩镐技鏌ヨ瑙勫垯
+     * @param codeClassifyOid 鍒嗙被涓婚敭
+     * @return 瑙勫垯锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+     */
+    CodeResembleRuleVO getUseResembleRuleByClassifyOid(String codeClassifyOid);
+    /**
+     * 鑾峰彇浣跨敤鐨勭浉浼兼煡璇㈣鍒�
+     * @param fullInfoBO 绫诲叏閮ㄤ俊鎭�
+     * @param currentClassifyVO 褰撳墠鐨勫垎绫�
+     * @return 瑙勫垯锛屽鏋滀笉瀛樺湪浼氳繑鍥濶ull
+     */
+    CodeResembleRuleVO getUseResembleRule(CodeClassifyFullInfoBO fullInfoBO, CodeClassifyVO currentClassifyVO);
+
+    /**
+     * 浣跨敤娴佺▼妯℃澘鑾峰彇鍦ㄩ〉闈笂鏄剧ず鐨勫睘鎬�
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @param executionId 娴佺▼鎵цid
+     * @param processUse 妯℃澘娴佺▼鐢ㄩ��
+     * @return 鐩稿叧灞炴��
+     */
+    List<String> getFieldByProcessTemplate(String templateOid, String executionId, String processUse);
+
+    /**
+     * 鏍囪娴佺▼涓笟鍔℃暟鎹槸鍚﹂�氳繃
+     * @param oid 涓氬姟鏁版嵁涓婚敭
+     * @param btmName 涓氬姟绫诲瀷
+     * @param pass 鏄惁閫氳繃
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult markDataPassing(String oid, String btmName, Boolean pass);
+
+    /**
+     * 浣跨敤鍒嗙被鐨勪富閿幏鍙栦笟鍔℃暟鎹�
+     * @param btmType 涓氬姟绫诲瀷
+     * @param queryObject 鏌ヨ瀵硅薄
+     * @return 琛ㄦ牸鐨勬樉绀哄璞″��
+     */
+    DataGrid<Map<String, String>> getTableDataByExecutionId(String btmType, BaseQueryObject queryObject);
+
+    /**
+     * 鎵归噺淇濆瓨娴佺▼鎵ц椤甸潰淇敼鐨勫唴瀹�
+     * @param orderDTOList 缂栫爜鐩稿叧鐨勪俊鎭紝涓嶉渶瑕佺爜娈电殑淇℃伅
+     * @return 鎵ц缁撴灉
+     */
+    BaseResult batchUpdateCode(List<CodeOrderDTO> orderDTOList);
+
+    /**
+     * 浣跨敤鍒嗙被鐨勭紪鍙疯矾寰勶紝鑾峰彇琛ㄦ牸鐨勭浉鍏冲畾涔�
+     * @param codeClassifyIdPath 鍒嗙被鐨勭紪鍙疯矾寰勶紝蹇呴』鏄粠椤跺眰鑺傜偣寮�濮嬶紝xxx/yy/zz杩欐牱鐨勬牸寮�
+     * @param functionId 鍔熻兘鐨勭紪鍙�
+     * @return UI鐩稿叧鐨勪俊鎭紙浠呭寘鍚〃鏍�)
+     */
+    MdmUIInfoVO getUIInfoByClassifyIdPath(String codeClassifyIdPath, String functionId);
+
+    /**
+     * 浣跨敤鍒嗙被鐨勭紪鍙疯矾寰勶紝鑾峰彇琛ㄥ崟鐨勭浉鍏冲畾涔�
+     * @param idPath 缂栧彿鐨勮矾寰勶紝蹇呴』浠庨《灞傝妭鐐瑰紑濮嬶紝xx/yyy/zz
+     * @return UI鐩稿叧鐨勪俊鎭紙浠呭寘鍚〃鍗�)
+     */
+    MdmUIInfoVO getFormDefineByClassifyIdPath(String idPath);
+
+    /**
+     * 妯℃澘灞炴�ц浆鎹负琛ㄥ崟鐨勫瓧娈�
+     *
+     * @param attrVO  妯℃澘灞炴��
+     * @param btmType 涓氬姟绫诲瀷
+     * @return 琛ㄥ崟鐨勫瓧娈�
+     */
+    UIFormItemVO templateAttr2FormField(CodeClassifyTemplateAttrVO attrVO, String btmType) ;
+
+    UITableFieldVO templateAttr2TableField(CodeClassifyTemplateAttrVO attrVO, boolean forEdit);
+    void wrapperResembleConditionMap(String value, CodeResembleRuleVO resembleRuleVO, String attrId, Map<String, String> conditionMap);
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmIOServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmIOServiceI.java
new file mode 100644
index 0000000..b147458
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmIOServiceI.java
@@ -0,0 +1,127 @@
+package org.springblade.code.service;
+
+
+import com.vci.starter.poi.bo.SheetDataSet;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import org.springblade.code.dto.CodeExportAttrDTO;
+import org.springblade.code.dto.CodeOrderDTO;
+import org.springblade.code.vo.pagemodel.*;
+import org.springblade.code.vo.universalInter.attrmap.DataObjectVO;
+import org.springblade.code.vo.universalInter.result.xml.XMLResultDataObjectDetailDO;
+
+import java.io.File;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓绘暟鎹鍏ュ鍑烘湇鍔�
+ * @author weidy
+ * @date 2022-3-6
+ */
+public interface MdmIOServiceI {
+
+    /**
+     * 瀵煎嚭涓婚搴撶殑鏁版嵁
+     * @param exportAttrDTO 瀵煎嚭鐩稿叧鐨勯厤缃紝蹇呴』瑕佹湁涓婚搴撳垎绫荤殑涓婚敭
+     * @return 瀵煎嚭鐨別xcel鐨勬枃浠�
+     */
+    String exportCode(CodeExportAttrDTO exportAttrDTO);
+
+    /**
+     * 鐢熸垚瀵煎叆鐨勬枃浠�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param isHistory 鏄惁鍘嗗彶鏁版嵁瀵煎叆
+     * @return excel鐨勬枃浠跺湴鍧�
+     */
+    String createImportExcel(String codeClassifyOid,boolean isHistory);
+
+
+    /**
+     * 鐢熸垚瀵煎叆鐨勬枃浠�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return excel鐨勬枃浠跺湴鍧�
+     */
+    String downloadTopImportExcel(String codeClassifyOid);
+
+
+    /**
+     * 鎵归噺鐢宠缂栫爜鏁版嵁
+     * @param orderDTO 缂栫爜鐢宠淇℃伅锛屽繀椤诲寘鍚垎绫讳富閿拰鐮佹鐨勪俊鎭�
+     * @param file excel鏂囦欢鐨勪俊鎭�
+     * @return 鏈夐敊璇俊鎭殑excel
+     */
+    CodeImProtRusultVO batchImportCode(CodeOrderDTO orderDTO, File file);
+
+    /***
+     *鎵归噺鐢宠缂栫爜鏁版嵁
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param classifyAttr 鍒嗙被璺緞浣跨敤鐨勫睘鎬�
+     * @param file excel鏂囦欢鐨勪俊鎭�
+     * @return 鏈夐敊璇俊鎭殑excel
+     */
+    CodeImProtRusultVO batchTopImportCode(String codeClassifyOid,String classifyAttr, File file);
+    /***
+     * 鎵归噺鐢宠缂栫爜鏁版嵁
+     * @param orderDTO 缂栫爜鐢宠淇℃伅锛屽繀椤诲寘鍚垎绫讳富閿拰鐮佹鐨勪俊鎭�
+     * @param templateVO//妯℃澘瀵硅薄
+     * @param dataSet//鏁版嵁瀵硅薄
+     * @param  isNumType 鏄惁妫�楠屾灇涓�/鍙傜収
+     * @return
+     */
+    List<String> batchImportCode(CodeOrderDTO orderDTO, CodeClassifyTemplateVO templateVO, SheetDataSet dataSet, Map<String,String> errorMap, boolean isNumType);
+
+    /**
+     * 瀵煎叆鍘嗗彶鏁版嵁
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param classifyAttr 鍒嗙被璺緞浣跨敤鐨勫睘鎬�
+     * @param file excel鏂囦欢鐨勪俊鎭�
+     * @return 鏈夐敊璇俊鎭殑excel
+     */
+    CodeImProtRusultVO batchImportHistoryData(String codeClassifyOid,String classifyAttr, File file);
+    /**
+     * 闆嗘垚鎵归噺鐢宠鏁版嵁
+     * @param orderDTO 鍒嗙被鐨勪富閿�
+     * @param dataObjectVO 鏁版嵁淇℃伅
+     * @param resultDataObjectDetailDOs 閿欒淇℃伅
+     * @return 鏈夐敊璇俊鎭殑excel
+     */
+    void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs);
+    /**
+     * 闆嗘垚鎵归噺鏇存敼鏁版嵁
+     * @param codeClassifyVO;
+     * @param dataObjectVO 鏁版嵁淇℃伅
+     * @param resultDataObjectDetailDOs 閿欒淇℃伅
+     * @return 鏈夐敊璇俊鎭殑excel
+     */
+    void batchSyncEditDatas(CodeClassifyVO codeClassifyVO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO>  resultDataObjectDetailDOs);
+    /***
+     * 浠巖edis缂撳瓨閲岃幏鍙栧埌瀵煎叆鐨勬暟鎹�
+     * @param oid
+     * @param redisOid
+     * @return
+     */
+    public DataGrid<Map<String,String>> gridRowResemble(String oid, String redisOid);
+    /***
+     * 浠巖edis缂撳瓨閲岃幏鍙栧埌瀵煎叆鐨勬暟鎹�
+     * @param codeClssifyOid
+     * @param redisOid
+     * @return
+     */
+    DataGrid<Map<String,String>> gridDatas(String codeClssifyOid,String redisOid);
+    /***
+     * 鏍规嵁瀵煎叆缂撳瓨id鑾峰彇鍒嗙被
+     * @param redisOid
+     * @return
+     */
+    public List<CodeImportTemplateVO> gridclassifys(String redisOid);
+
+    /**
+     * 鎵归噺鐢宠
+     * @param codeImprotSaveDatVOList
+     * @param isImprot
+     * @return
+     */
+    public BaseResult batchImportData(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList, String classifyAttr, boolean isImprot);
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmProductCodeServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmProductCodeServiceI.java
new file mode 100644
index 0000000..ab7dd2a
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/MdmProductCodeServiceI.java
@@ -0,0 +1,38 @@
+package org.springblade.code.service;
+
+import com.vci.web.pageModel.BatchCBO;
+import org.springblade.code.bo.CodeClassifyFullInfoBO;
+import org.springblade.code.dto.CodeOrderSecDTO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateVO;
+import org.springblade.code.vo.pagemodel.CodeRuleVO;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 缂栫爜瑙勫垯鐢熸垚鐨勬湇鍔�
+ * @author weidy
+ * @date 2022-3-6
+ */
+public interface MdmProductCodeServiceI {
+
+    /**
+     * 鐢熸垚缂栫爜--骞朵笖淇濆瓨鏁版嵁-鏂规硶鍔犻攣锛屽洜姝や笉鑳借繑鍥瀊atchCBO
+     * @param classifyFullInfoBO 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞�
+     * @param ruleVO 缂栫爜瑙勫垯鐨勬樉绀哄璞�
+     * @param secDTOList 鍚勪釜鐮佹鐨勫��
+     * @param dataCBOList 涓氬姟鏁版嵁
+     */
+    List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO,
+										CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<ClientBusinessObject> dataCBOList);
+
+    /**
+     * 鍥炴敹鐮佸��
+     * @param btmId 涓氬姟鏁版嵁鐨勪笟鍔$被鍨�
+     * @param businessOidCollection 涓氬姟鏁版嵁鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鏁版嵁鍐呭
+     */
+    BatchCBO recycleCode(String btmId, Collection<String> businessOidCollection);
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntAuthorityServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntAuthorityServiceI.java
new file mode 100644
index 0000000..b941206
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntAuthorityServiceI.java
@@ -0,0 +1,101 @@
+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.dto.SysIntAuthorityDTO;
+import org.springblade.code.model.SysIntAuthorityDO;
+import org.springblade.code.vo.pagemodel.SysIntAuthorityVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹湇鍔℃帴鍙�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public interface SysIntAuthorityServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<SysIntAuthorityVO> gridSysIntAuthority(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param sysIntAuthorityDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<SysIntAuthorityVO> sysIntAuthorityDO2VOs(Collection<SysIntAuthorityDO> sysIntAuthorityDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  sysIntAuthorityDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    SysIntAuthorityVO sysIntAuthorityDO2VO(SysIntAuthorityDO sysIntAuthorityDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+     * @param sysIntAuthorityDTO 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    SysIntAuthorityVO addSave(SysIntAuthorityDTO sysIntAuthorityDTO) throws VciBaseException;
+
+    /**
+     * 淇敼绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+     * @param sysIntAuthorityDTO 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    SysIntAuthorityVO editSave(SysIntAuthorityDTO sysIntAuthorityDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+     * @param sysIntAuthorityDTO 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteSysIntAuthority(SysIntAuthorityDTO sysIntAuthorityDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+    * @param oid 涓婚敭
+    * @return 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    SysIntAuthorityVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<SysIntAuthorityVO> listSysIntAuthorityByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収绯荤粺闆嗘垚鎺ュ彛鐨勮璇佸垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<SysIntAuthorityVO> refDataGridSysIntAuthority(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntBaseServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntBaseServiceI.java
new file mode 100644
index 0000000..8226f62
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntBaseServiceI.java
@@ -0,0 +1,101 @@
+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.dto.SysIntBaseDTO;
+import org.springblade.code.model.SysIntBaseDO;
+import org.springblade.code.vo.pagemodel.SysIntBaseVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭湇鍔℃帴鍙�
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public interface SysIntBaseServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<SysIntBaseVO> gridSysIntBase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param sysIntBaseDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<SysIntBaseVO> sysIntBaseDO2VOs(Collection<SysIntBaseDO>  sysIntBaseDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  sysIntBaseDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    SysIntBaseVO sysIntBaseDO2VO(SysIntBaseDO sysIntBaseDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+     * @param sysIntBaseDTO 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    SysIntBaseVO addSave(SysIntBaseDTO sysIntBaseDTO) throws VciBaseException;
+
+    /**
+     * 淇敼绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+     * @param sysIntBaseDTO 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    SysIntBaseVO editSave(SysIntBaseDTO sysIntBaseDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+     * @param sysIntBaseDTO 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteSysIntBase(SysIntBaseDTO sysIntBaseDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+    * @param oid 涓婚敭
+    * @return 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞�
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    SysIntBaseVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<SysIntBaseVO> listSysIntBaseByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収绯荤粺闆嗘垚鐨勭郴缁熶俊鎭垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<SysIntBaseVO> refDataGridSysIntBase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntInfoServiceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntInfoServiceI.java
new file mode 100644
index 0000000..e4b384a
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/SysIntInfoServiceI.java
@@ -0,0 +1,159 @@
+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.dto.SysIntInfoDTO;
+import org.springblade.code.dto.UpdateSysInfoStatusDTO;
+import org.springblade.code.model.SysIntHeaderDO;
+import org.springblade.code.model.SysIntInfoDO;
+import org.springblade.code.model.SysIntParamDO;
+import org.springblade.code.vo.pagemodel.SysIntInfoVO;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 绯荤粺闆嗘垚鍩虹淇℃伅鏈嶅姟鎺ュ彛
+ *
+ * @author lihang
+ * @date 2022-03-07
+ */
+public interface SysIntInfoServiceI {
+    /**
+     * 鏌ヨ鎵�鏈夌殑绯荤粺闆嗘垚鍩虹淇℃伅
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    DataGrid<SysIntInfoVO> gridSysIntInfo(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    List<SysIntInfoDO> selectAll(Map conditonMap);
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param sysIntInfoDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    List<SysIntInfoVO> sysIntInfoDO2VOs(Collection<SysIntInfoDO> sysIntInfoDOs) throws VciBaseException;
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  sysIntInfoDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    SysIntInfoVO sysIntInfoDO2VO(SysIntInfoDO sysIntInfoDO) throws VciBaseException;
+
+    /**
+     * 澧炲姞绯荤粺闆嗘垚鍩虹淇℃伅
+     * @param sysIntInfoDTO 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    SysIntInfoVO addSave(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException;
+
+    /**
+     * 淇敼绯荤粺闆嗘垚鍩虹淇℃伅
+     * @param sysIntInfoDTO 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    SysIntInfoVO editSave(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException;
+
+
+    /**
+     * 鍒犻櫎绯荤粺闆嗘垚鍩虹淇℃伅
+     * @param sysIntInfoDTO 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    BaseResult deleteSysIntInfo(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException;
+
+    /**
+    * 涓婚敭鑾峰彇绯荤粺闆嗘垚鍩虹淇℃伅
+    * @param oid 涓婚敭
+    * @return 绯荤粺闆嗘垚鍩虹淇℃伅鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    SysIntInfoVO getObjectByOid(String oid) throws VciBaseException;
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇绯荤粺闆嗘垚鍩虹淇℃伅
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 绯荤粺闆嗘垚鍩虹淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    Collection<SysIntInfoVO> listSysIntInfoByOids(Collection<String> oidCollections) throws VciBaseException;
+
+
+
+    /**
+     * 鍙傜収绯荤粺闆嗘垚鍩虹淇℃伅鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 绯荤粺闆嗘垚鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     DataGrid<SysIntInfoVO> refDataGridSysIntInfo(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+    /**
+     * 褰撳墠鎺ュ彛淇℃伅鏄惁鏈変娇鐢ㄧ洰鏍囦俊鎭�
+     * @param sysOid 绯荤粺Oid
+     * @param authorityOid 璁よ瘉鏂瑰紡Oid
+     * @return true = 鍦ㄤ娇鐢� 锛沠alse = 鏈娇鐢�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+     boolean isAlreadyUse (String sysOid,String authorityOid) throws VciBaseException;
+
+     //=========浠ヤ笅绯荤粺鍙傛暟鍜岄獙璇佷俊鎭�
+
+    /**
+     * 鏍规嵁绯荤粺淇℃伅鏌ヨ鎺ュ彛鎵�鏈塸aram
+     * @param sysInfoOid
+     * @return
+     */
+    List<SysIntParamDO> getParamsBySystemInfoOid(String sysInfoOid);
+
+    /**
+     * 1銆佸厛鍒犻櫎浠ュ墠鎵�鏈塸aram
+     * 2銆佸啀鏌ヨ浼犲叆鐨勬墍鏈塸aram
+     * @return
+     */
+    BaseResult updateParams(String sysInfoOid,List<SysIntParamDO> params);
+
+    /**
+     * 鏍规嵁绯荤粺淇℃伅鏌ヨ鎺ュ彛鎵�鏈塰eader
+     * @param sysInfoOid
+     * @return
+     */
+    List<SysIntHeaderDO> getHeadersBySystemInfoOid(String sysInfoOid);
+
+    /**
+     * 1銆佸厛鍒犻櫎浠ュ墠鎵�鏈塰eader
+     * 2銆佸啀鏌ヨ浼犲叆鐨勬墍鏈塰eader
+     * @return
+     */
+    BaseResult updateHeaders(String sysInfoOid,List<SysIntHeaderDO> params);
+
+    /**
+     * 鏍规嵁鍒嗙被oid鏌ヨ鎵�鏈夎鎺ㄩ�佽繖涓垎绫绘暟鎹殑鎺ュ彛淇℃伅
+     * @param classifyOids
+     * @return
+     */
+    List<SysIntInfoDO> getSysInfoByClassifyOid(String[] classifyOids);
+
+    /***
+     * 鏇存柊鎺ュ彛閰嶇疆淇℃伅鐘舵��
+     * @param sysInfoStatusDTO
+     * @return
+     */
+    public BaseResult updateStatus(UpdateSysInfoStatusDTO sysInfoStatusDTO);
+    BaseResult pushData(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException;
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/UniversalInterfaceI.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/UniversalInterfaceI.java
new file mode 100644
index 0000000..e9ff043
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/UniversalInterfaceI.java
@@ -0,0 +1,47 @@
+package org.springblade.code.service;
+
+import javax.jws.WebService;
+
+/**
+ * 缁熶竴鎺ュ彛
+ *
+ * @author xiejun
+ * @date 2022-11-27
+ */
+@WebService(targetNamespace = "http://code.web.vci.com/",name = "universalInterface")
+public interface UniversalInterfaceI {
+    /**
+     *缁熶竴鐢宠缂栫爜鎺ュ彛
+     * @param data 浼犻�掔殑鏁版嵁鍙傛暟
+     * @param dataType 鏍囪瘑data鏄痻ml鏍煎紡杩樻槸json鏍煎紡锛屾帴鍙h繑鍥炴暟鎹篃鏄寜鐓ц繖涓牸寮忥紝浠ヤ笅鎺ュ彛绫诲悓
+     * @return xml鏍煎紡/json鏍煎紡
+     * @throws Throwable
+     */
+    public String applyCode(String data,String dataType)throws Throwable;
+
+    /***
+     * 缁熶竴鏇存柊鎺ュ彛
+     * @param data
+     * @param dataType
+     * @return
+     * @throws Throwable
+     */
+    public String syncEditData(String data,String dataType)throws Throwable;
+
+    /***
+     * 鏌ヨ鍒嗙被鍙�
+     * @param data
+     * @param dataType
+     * @throws Throwable
+     */
+    public String  queryClassify(String data,String dataType)throws Throwable;
+
+    /***
+     * 鏌ヨ鏁版嵁
+     * @param data
+     * @param dataType
+     * @throws Throwable
+     */
+    public String  queryData(String data,String dataType)throws Throwable;
+
+}
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
index 07fe3f7..777d11a 100644
--- 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
@@ -1,22 +1,8 @@
 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;
@@ -28,14 +14,31 @@
 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.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.dao.CodeBasicSecDaoI;
+import org.springblade.code.dao.CodeClassifyValueDaoI;
+import org.springblade.code.dao.CodeFixedValueDaoI;
+import org.springblade.code.dto.CodeBasicSecDTO;
+import org.springblade.code.enumpack.CodeSecTypeEnum;
+import org.springblade.code.lifecycle.CodeRuleLC;
+import org.springblade.code.model.CodeBasicSecDO;
+import org.springblade.code.model.CodeClassifyValueDO;
+import org.springblade.code.model.CodeFixedValueDO;
+import org.springblade.code.service.CodeBasicSecServiceI;
+import org.springblade.code.service.CodeClassifyValueServiceI;
+import org.springblade.code.service.CodeFixedValueServiceI;
+import org.springblade.code.service.CodeRuleServiceI;
+import org.springblade.code.vo.pagemodel.CodeBasicSecVO;
+import org.springblade.code.vo.pagemodel.CodeClassifyValueVO;
+import org.springblade.code.vo.pagemodel.CodeFixedValueVO;
+import org.springblade.code.vo.pagemodel.CodeRuleVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -414,7 +417,7 @@
         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);
+            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());
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
index 24b92e5..a6b7620 100644
--- 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
@@ -1,11 +1,6 @@
 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;
@@ -19,6 +14,11 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.CodeButtonDaoI;
+import org.springblade.code.dto.CodeButtonDTO;
+import org.springblade.code.model.CodeButtonDO;
+import org.springblade.code.service.CodeButtonServiceI;
+import org.springblade.code.vo.pagemodel.CodeButtonVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -34,7 +34,7 @@
  * @date 2022-01-24
  */
 @Service
-public class CodeButtonServiceImpl implements CodeButtonServiceI{
+public class CodeButtonServiceImpl implements CodeButtonServiceI {
 
     /**
     * 鏃ュ織
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
index 2ceeb4e..b9aeebb 100644
--- 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
@@ -1,10 +1,6 @@
 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;
@@ -16,9 +12,14 @@
 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.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.CodeClassifyProcessTempDaoI;
+import org.springblade.code.dto.CodeClassifyProcessTempDTO;
+import org.springblade.code.model.CodeClassifyProcessTempDO;
+import org.springblade.code.service.CodeClassifyProcessTempServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyProcessTempVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -27,7 +28,7 @@
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
 
 /**
  * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎湇鍔�
@@ -35,7 +36,7 @@
  * @date 2022-01-24
  */
 @Service
-public class CodeClassifyProcessTempServiceImpl implements CodeClassifyProcessTempServiceI{
+public class CodeClassifyProcessTempServiceImpl implements CodeClassifyProcessTempServiceI {
 
     /**
     * 鏃ュ織
@@ -70,7 +71,7 @@
      * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
      */
     @Override
-    public DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+    public DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
         if (pageHelper == null) {
             pageHelper = new PageHelper(-1);
         }
@@ -91,7 +92,7 @@
      * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
     @Override
-    public List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOs) throws VciBaseException{
+    public List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTempDO> codeClassifyProcessTempDOs) throws VciBaseException{
         List<CodeClassifyProcessTempVO> voList = new ArrayList<CodeClassifyProcessTempVO>();
         if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOs)){
             codeClassifyProcessTempDOs.forEach(temp -> {
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
index 1945b58..326d0a0 100644
--- 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
@@ -1,17 +1,6 @@
 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;
@@ -32,10 +21,24 @@
 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.commons.lang.StringUtils;
 import org.apache.poi.hssf.util.HSSFColor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.bo.CodeClassifyFullInfoBO;
+import org.springblade.code.dao.CodeClassifyDaoI;
+import org.springblade.code.dao.CodeClassifyTemplateDaoI;
+import org.springblade.code.dto.CodeClassifyDTO;
+import org.springblade.code.model.CodeClassifyDO;
+import org.springblade.code.model.CodeClassifyTemplateDO;
+import org.springblade.code.po.CodeClassifyPO;
+import org.springblade.code.service.CodeClassifyServiceI;
+import org.springblade.code.service.CodeDuckingServiceI;
+import org.springblade.code.service.CodeKeyAttrRepeatRuleServiceI;
+import org.springblade.code.service.CodeRuleServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyVO;
+import org.springblade.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
+import org.springblade.code.vo.pagemodel.CodeRuleVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -45,8 +48,8 @@
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
 import static com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant.*;
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
 
 /**
  * 涓婚搴撳垎绫绘湇鍔�
@@ -54,7 +57,7 @@
  * @date 2022-01-20
  */
 @Service
-public class CodeClassifyServiceImpl implements CodeClassifyServiceI{
+public class CodeClassifyServiceImpl implements CodeClassifyServiceI {
 
     /**
     * 鏃ュ織
@@ -126,7 +129,7 @@
      * @throws VciBaseException 鏌ヨ鏉′欢涓嶇鍚堣姹傜殑鏃跺�欎細鎶涘嚭寮傚父
      */
     @Override
-    public List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject) throws VciBaseException{
+    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));
@@ -194,7 +197,7 @@
      * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
     @Override
-    public List<CodeClassifyVO> codeClassifyDO2VOs(Collection<CodeClassifyDO>  codeClassifyDOs) throws VciBaseException{
+    public List<CodeClassifyVO> codeClassifyDO2VOs(Collection<CodeClassifyDO> codeClassifyDOs) throws VciBaseException{
         List<CodeClassifyVO> voList = new ArrayList<CodeClassifyVO>();
         if(!CollectionUtils.isEmpty(codeClassifyDOs)){
            for(CodeClassifyDO s: codeClassifyDOs){
@@ -1004,7 +1007,7 @@
 
     /***
      * 鏍规嵁涓婄骇鑺傜偣鑾峰彇涓嬬骇鑺傜偣浠e彿璺緞鍜屽悕绉拌矾寰�
-     * @param classifyId
+     * @param codeClassifyId
      * @param enable
      * @return
      */
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
index 33a6cc0..35e9895 100644
--- 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
@@ -1,12 +1,5 @@
 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;
@@ -19,6 +12,13 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.CodeClassifyTempMapItemDaoI;
+import org.springblade.code.dto.CodeClassifyTempMapItemDTO;
+import org.springblade.code.model.CodeClassifyTempMapItemDO;
+import org.springblade.code.service.CodeClassifyTempMapItemServiceI;
+import org.springblade.code.service.CodeClassifyTemplateAttrServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyTempMapItemVO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -35,7 +35,7 @@
  * @date 2022-03-10
  */
 @Service
-public class CodeClassifyTempMapItemServiceImpl implements CodeClassifyTempMapItemServiceI{
+public class CodeClassifyTempMapItemServiceImpl implements CodeClassifyTempMapItemServiceI {
 
     /**
     * 鏃ュ織
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
index 03b952c..983d2ee 100644
--- 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
@@ -1,17 +1,6 @@
 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;
@@ -33,6 +22,17 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.dao.CodeClassifyTemplateAttrDaoI;
+import org.springblade.code.dao.CodeClassifyTemplateDaoI;
+import org.springblade.code.dto.CodeClassifyTemplateAttrDTO;
+import org.springblade.code.enumpack.CodeLevelTypeEnum;
+import org.springblade.code.model.CodeClassifyTemplateAttrDO;
+import org.springblade.code.model.CodeClassifyTemplateDO;
+import org.springblade.code.service.CodeClassifyTemplateAttrServiceI;
+import org.springblade.code.service.CodeTemplatePhaseServiceI;
+import org.springblade.code.utils.PatternUtil;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -49,7 +49,7 @@
  * @date 2022-01-24
  */
 @Service
-public class CodeClassifyTemplateAttrServiceImpl implements CodeClassifyTemplateAttrServiceI{
+public class CodeClassifyTemplateAttrServiceImpl implements CodeClassifyTemplateAttrServiceI {
 
     /**
     * 鏃ュ織
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
index baa6098..a6c74f8 100644
--- 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
@@ -1,12 +1,5 @@
 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;
@@ -20,6 +13,13 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.CodeClassifyTemplateButtonDaoI;
+import org.springblade.code.dto.CodeClassifyTemplateButtonDTO;
+import org.springblade.code.model.CodeClassifyTemplateButtonDO;
+import org.springblade.code.service.CodeButtonServiceI;
+import org.springblade.code.service.CodeClassifyTemplateButtonServiceI;
+import org.springblade.code.vo.pagemodel.CodeButtonVO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -35,7 +35,7 @@
  * @date 2022-01-24
  */
 @Service
-public class CodeClassifyTemplateButtonServiceImpl implements CodeClassifyTemplateButtonServiceI{
+public class CodeClassifyTemplateButtonServiceImpl implements CodeClassifyTemplateButtonServiceI {
 
     /**
     * 鏃ュ織
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
index 5d88566..4d1918d 100644
--- 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
@@ -1,10 +1,6 @@
 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;
@@ -14,9 +10,14 @@
 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.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.CodeClassifyTemplateMapDaoI;
+import org.springblade.code.dto.CodeClassifyTemplateMapDTO;
+import org.springblade.code.model.CodeClassifyTemplateMapDO;
+import org.springblade.code.service.CodeClassifyTemplateMapServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateMapVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -24,7 +25,7 @@
 import javax.annotation.Resource;
 import java.util.*;
 
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
 
 /**
  * 涓婚搴撴ā鏉挎槧灏勮鍒欐湇鍔�
@@ -32,7 +33,7 @@
  * @date 2022-01-24
  */
 @Service
-public class CodeClassifyTemplateMapServiceImpl implements CodeClassifyTemplateMapServiceI{
+public class CodeClassifyTemplateMapServiceImpl implements CodeClassifyTemplateMapServiceI {
 
     /**
     * 鏃ュ織
@@ -66,7 +67,7 @@
      * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
      */
     @Override
-    public DataGrid<CodeClassifyTemplateMapVO> gridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+    public DataGrid<CodeClassifyTemplateMapVO> gridCodeClassifyTemplateMap(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
         if (pageHelper == null) {
             pageHelper = new PageHelper(-1);
         }
@@ -88,7 +89,7 @@
      * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
     @Override
-    public List<CodeClassifyTemplateMapVO> codeClassifyTemplateMapDO2VOs(Collection<CodeClassifyTemplateMapDO>  codeClassifyTemplateMapDOs) throws VciBaseException{
+    public List<CodeClassifyTemplateMapVO> codeClassifyTemplateMapDO2VOs(Collection<CodeClassifyTemplateMapDO> codeClassifyTemplateMapDOs) throws VciBaseException{
         List<CodeClassifyTemplateMapVO> voList = new ArrayList<CodeClassifyTemplateMapVO>();
         if(!CollectionUtils.isEmpty(codeClassifyTemplateMapDOs)){
            for(CodeClassifyTemplateMapDO s: codeClassifyTemplateMapDOs){
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
index afe04f8..643a696 100644
--- 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
@@ -2,13 +2,6 @@
 
 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;
@@ -24,6 +17,13 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.*;
+import org.springblade.code.dto.CodeClassifyTemplateDTO;
+import org.springblade.code.lifecycle.CodeClassifyTemplateLC;
+import org.springblade.code.model.*;
+import org.springblade.code.service.*;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -43,7 +43,7 @@
  * @date 2022-01-24
  */
 @Service
-public class CodeClassifyTemplateServiceImpl implements CodeClassifyTemplateServiceI{
+public class CodeClassifyTemplateServiceImpl implements CodeClassifyTemplateServiceI {
 
     /**
     * 鏃ュ織
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
index 17b2161..17b09b4 100644
--- 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
@@ -1,13 +1,6 @@
 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;
@@ -24,6 +17,13 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.CodeBasicSecDaoI;
+import org.springblade.code.dao.CodeClassifyValueDaoI;
+import org.springblade.code.dto.CodeClassifyValueDTO;
+import org.springblade.code.model.CodeBasicSecDO;
+import org.springblade.code.model.CodeClassifyValueDO;
+import org.springblade.code.service.CodeClassifyValueServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyValueVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -41,7 +41,7 @@
  * @date 2022-01-24
  */
 @Service
-public class CodeClassifyValueServiceImpl implements CodeClassifyValueServiceI{
+public class CodeClassifyValueServiceImpl implements CodeClassifyValueServiceI {
 
     /**
     * 鏃ュ織
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
index 4154597..96c720e 100644
--- 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
@@ -3,14 +3,6 @@
 
 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;
@@ -25,9 +17,18 @@
 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.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.constant.MdmDuckingConstant;
+import org.springblade.code.dao.*;
+import org.springblade.code.dto.DockingPreApplyDataDTO;
+import org.springblade.code.dto.DockingPreApplyDataInfoDTO;
+import org.springblade.code.model.*;
+import org.springblade.code.service.*;
+import org.springblade.code.utils.*;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateVO;
+import org.springblade.code.vo.pagemodel.SysIntInfoVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
@@ -47,9 +48,8 @@
 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;
-
+import static org.springblade.code.constant.MdmDuckingConstant.*;
+import static org.springblade.code.utils.DateUtils.DATE_TO_STRING_DETAIAL_PATTERN;
 
 /**
  * 涓婚搴撻泦鎴愭湇鍔�
@@ -172,7 +172,7 @@
 
         //璁板綍杩欐鏁版嵁淇℃伅,骞朵笖鎶妜mldata鍐欏叆鏂囦欢
         String currentDate = DateUtils.getCurrentDate(DATE_TO_STRING_DETAIAL_PATTERN);
-        File preXmlFile = new File(preXmlTemp+File.separator+systemid+"-"+currentDate+".xml");
+        File preXmlFile = new File(preXmlTemp+ File.separator+systemid+"-"+currentDate+".xml");
 
         try {
             FileUtils.write(preXmlFile, xmlDatas);
@@ -519,7 +519,7 @@
 
         //鏌ヨ鍝簺浠诲姟杩樻病鏈夋墽琛屽畬鎴�
         VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
-        queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
+        queryWrapper.addQueryMap("sendFlag", MdmDuckingConstant.SEND_FLAG_FALSE);
         List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);
 
         //姣忎釜task渚濇鎵ц鎺ㄩ��
@@ -888,7 +888,7 @@
     }
 
     @Override
-    public DataGrid<DockingDataDO> gridData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+    public DataGrid<DockingDataDO> gridData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
         if (pageHelper == null) {
             pageHelper = new PageHelper(-1);
         }
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
index 4c75416..b1f3a19 100644
--- 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
@@ -4,25 +4,6 @@
 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;
@@ -37,6 +18,31 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.constant.MdmDuckingConstant;
+import org.springblade.code.dao.CodeClassifyDaoI;
+import org.springblade.code.dao.DockingDataDaoI;
+import org.springblade.code.dao.DockingLogeDaoI;
+import org.springblade.code.dao.DockingTaskDaoI;
+import org.springblade.code.dto.datapush.classify.JsonRootDataDTO;
+import org.springblade.code.dto.datapush.classify.NodeClassifyDTO;
+import org.springblade.code.dto.datapush.classify.NodeDataDTO;
+import org.springblade.code.dto.datapush.classify.NodeLibraryDTO;
+import org.springblade.code.dto.datapush.data.NodeJosnDTO;
+import org.springblade.code.dto.datapush.data.NodeObjectDTO;
+import org.springblade.code.dto.datapush.data.NodeProDTO;
+import org.springblade.code.dto.datapush.data.NodedataDTO;
+import org.springblade.code.dto.datapush.result.ResultJsonDTO;
+import org.springblade.code.dto.datapush.result.ResultNodeDataDTO;
+import org.springblade.code.dto.datapush.result.ResultNodeObjectDTO;
+import org.springblade.code.model.*;
+import org.springblade.code.service.CodeDuckingSyncServiceI;
+import org.springblade.code.service.MdmEngineServiceI;
+import org.springblade.code.service.SysIntInfoServiceI;
+import org.springblade.code.utils.HttpUtils;
+import org.springblade.code.utils.WsErpClientUtil;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateVO;
+import org.springblade.code.vo.pagemodel.SysIntInfoVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
@@ -49,7 +55,7 @@
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.vci.mdm.constant.MdmDuckingConstant.*;
+import static org.springblade.code.constant.MdmDuckingConstant.*;
 
 
 /**
@@ -294,7 +300,7 @@
         initSysadmin();
         //鏌ヨ鍝簺浠诲姟杩樻病鏈夋墽琛屽畬鎴�
         VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
-        queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
+        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);
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
index abe5d49..d2bb07b 100644
--- 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
@@ -1,10 +1,5 @@
 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;
@@ -20,6 +15,11 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.CodeFixedValueDaoI;
+import org.springblade.code.dto.CodeFixedValueDTO;
+import org.springblade.code.model.CodeFixedValueDO;
+import org.springblade.code.service.CodeFixedValueServiceI;
+import org.springblade.code.vo.pagemodel.CodeFixedValueVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -36,7 +36,7 @@
  * @date 2022-01-24
  */
 @Service
-public class CodeFixedValueServiceImpl implements CodeFixedValueServiceI{
+public class CodeFixedValueServiceImpl implements CodeFixedValueServiceI {
 
     /**
     * 鏃ュ織
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
index acf38a5..a3524ad 100644
--- 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
@@ -1,11 +1,5 @@
 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;
@@ -20,6 +14,12 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.dao.CodePhaseAttrDaoI;
+import org.springblade.code.dto.CodePhaseAttrDTO;
+import org.springblade.code.model.CodePhaseAttrDO;
+import org.springblade.code.service.CodePhaseAttrServiceI;
+import org.springblade.code.vo.pagemodel.CodePhaseAttrVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -36,7 +36,7 @@
  * @date 2022-01-24
  */
 @Service
-public class CodePhaseAttrServiceImpl implements CodePhaseAttrServiceI{
+public class CodePhaseAttrServiceImpl implements CodePhaseAttrServiceI {
 
     /**
     * 鏃ュ織
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
index 8e955ab..d5d1042 100644
--- 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
@@ -1,11 +1,6 @@
 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;
@@ -18,6 +13,11 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.CodeResembleRuleDaoI;
+import org.springblade.code.dto.CodeResembleRuleDTO;
+import org.springblade.code.model.CodeResembleRuleDO;
+import org.springblade.code.service.CodeResembleRuleServiceI;
+import org.springblade.code.vo.pagemodel.CodeResembleRuleVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -33,7 +33,7 @@
  * @date 2022-04-10
  */
 @Service
-public class CodeResembleRuleServiceImpl implements CodeResembleRuleServiceI{
+public class CodeResembleRuleServiceImpl implements CodeResembleRuleServiceI {
 
     /**
     * 鏃ュ織
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
index 4470af6..443dd6a 100644
--- 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
@@ -1,34 +1,38 @@
 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.KeyValue;
 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.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.dao.CodeBasicSecDaoI;
+import org.springblade.code.dao.CodeRuleDaoI;
+import org.springblade.code.dto.CodeBasicSecDTO;
+import org.springblade.code.dto.CodeRuleDTO;
+import org.springblade.code.lifecycle.CodeRuleLC;
+import org.springblade.code.model.CodeAllCodeDO;
+import org.springblade.code.model.CodeBasicSecDO;
+import org.springblade.code.model.CodeClassifyDO;
+import org.springblade.code.model.CodeRuleDO;
+import org.springblade.code.service.CodeBasicSecServiceI;
+import org.springblade.code.service.CodeClassifyServiceI;
+import org.springblade.code.service.CodeRuleServiceI;
+import org.springblade.code.vo.pagemodel.CodeBasicSecVO;
+import org.springblade.code.vo.pagemodel.CodeClassifyVO;
+import org.springblade.code.vo.pagemodel.CodeRuleVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -39,7 +43,7 @@
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
 
 /**
  * 涓绘暟鎹紪鐮佽鍒欐湇鍔�
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
index 2a54f8d..20ce987 100644
--- 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
@@ -1,11 +1,12 @@
 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.springblade.code.annotation.MdmSerialAlgorithm;
+import org.springblade.code.service.CodeSerialAlgorithmServiceI;
+import org.springblade.code.vo.pagemodel.CodeSerialAlgorithmVO;
 import org.springframework.aop.framework.Advised;
 import org.springframework.stereotype.Service;
 
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
index c4ad91b..6cd157b 100644
--- 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
@@ -1,10 +1,6 @@
 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;
@@ -14,9 +10,14 @@
 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.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.dao.CodeSynonymDaoI;
+import org.springblade.code.dto.CodeSynonymDTO;
+import org.springblade.code.model.CodeSynonymDO;
+import org.springblade.code.service.CodeSynonymServiceI;
+import org.springblade.code.vo.pagemodel.CodeSynonymVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -24,7 +25,7 @@
 import javax.annotation.Resource;
 import java.util.*;
 
-import static com.vci.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
 
 /**
  * 鍚屼箟璇嶉厤缃湇鍔�
@@ -32,7 +33,7 @@
  * @date 2022-02-17
  */
 @Service
-public class CodeSynonymServiceImpl implements CodeSynonymServiceI{
+public class CodeSynonymServiceImpl implements CodeSynonymServiceI {
 
     /**
     * 鏃ュ織
@@ -66,7 +67,7 @@
      * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
      */
     @Override
-    public DataGrid<CodeSynonymVO> gridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+    public DataGrid<CodeSynonymVO> gridCodeSynonym(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
         if (pageHelper == null) {
             pageHelper = new PageHelper(-1);
         }
@@ -87,7 +88,7 @@
      * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
     @Override
-    public List<CodeSynonymVO> codeSynonymDO2VOs(Collection<CodeSynonymDO>  codeSynonymDOs) throws VciBaseException{
+    public List<CodeSynonymVO> codeSynonymDO2VOs(Collection<CodeSynonymDO> codeSynonymDOs) throws VciBaseException{
         List<CodeSynonymVO> voList = new ArrayList<CodeSynonymVO>();
         if(!CollectionUtils.isEmpty(codeSynonymDOs)){
            for(CodeSynonymDO s: codeSynonymDOs){
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
index 047da6c..a4129b5 100644
--- 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
@@ -1,17 +1,6 @@
 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;
@@ -27,6 +16,18 @@
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.dao.CodePhaseAttrDaoI;
+import org.springblade.code.dao.CodeTemplatePhaseDaoI;
+import org.springblade.code.dto.CodeTemplatePhaseDTO;
+import org.springblade.code.model.CodeClassifyTemplateAttrDO;
+import org.springblade.code.model.CodePhaseAttrDO;
+import org.springblade.code.model.CodeTemplatePhaseDO;
+import org.springblade.code.service.CodeClassifyTemplateAttrServiceI;
+import org.springblade.code.service.CodePhaseAttrServiceI;
+import org.springblade.code.service.CodeTemplatePhaseServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import org.springblade.code.vo.pagemodel.CodeTemplatePhaseVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -43,7 +44,7 @@
  * @date 2022-01-24
  */
 @Service
-public class CodeTemplatePhaseServiceImpl implements CodeTemplatePhaseServiceI{
+public class CodeTemplatePhaseServiceImpl implements CodeTemplatePhaseServiceI {
 
     /**
     * 鏃ュ織
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataInfoServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataInfoServiceImpl.java
new file mode 100644
index 0000000..ca63ecc
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataInfoServiceImpl.java
@@ -0,0 +1,275 @@
+package org.springblade.code.service.impl;
+
+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.springblade.code.dao.DockingPreApplyDataInfoDaoI;
+import org.springblade.code.dto.DockingPreApplyDataInfoDTO;
+import org.springblade.code.model.DockingPreApplyDataInfoDO;
+import org.springblade.code.service.DockingPreApplyDataInfoServiceI;
+import org.springblade.code.vo.pagemodel.DockingPreApplyDataInfoVO;
+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-05
+ */
+@Service
+public class DockingPreApplyDataInfoServiceImpl implements DockingPreApplyDataInfoServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private DockingPreApplyDataInfoDaoI dockingPreApplyDataInfoMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<DockingPreApplyDataInfoVO> gridDockingPreApplyDataInfo(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<DockingPreApplyDataInfoDO> doList = dockingPreApplyDataInfoMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<DockingPreApplyDataInfoVO> dataGrid=new DataGrid<DockingPreApplyDataInfoVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(dockingPreApplyDataInfoDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingPreApplyDataInfoMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param dockingPreApplyDataInfoDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<DockingPreApplyDataInfoVO> dockingPreApplyDataInfoDO2VOs(Collection<DockingPreApplyDataInfoDO>  dockingPreApplyDataInfoDOs) throws VciBaseException{
+        List<DockingPreApplyDataInfoVO> voList = new ArrayList<DockingPreApplyDataInfoVO>();
+        if(!CollectionUtils.isEmpty(dockingPreApplyDataInfoDOs)){
+           for(DockingPreApplyDataInfoDO s: dockingPreApplyDataInfoDOs){
+                DockingPreApplyDataInfoVO vo =  dockingPreApplyDataInfoDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  dockingPreApplyDataInfoDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  DockingPreApplyDataInfoVO dockingPreApplyDataInfoDO2VO(DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO) throws VciBaseException{
+              DockingPreApplyDataInfoVO vo = new DockingPreApplyDataInfoVO();
+        if(dockingPreApplyDataInfoDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreApplyDataInfoDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param dockingPreApplyDataInfoDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public DockingPreApplyDataInfoVO addSave(DockingPreApplyDataInfoDTO dockingPreApplyDataInfoDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(dockingPreApplyDataInfoDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO = new DockingPreApplyDataInfoDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreApplyDataInfoDTO,dockingPreApplyDataInfoDO);
+        dockingPreApplyDataInfoMapper.insert(dockingPreApplyDataInfoDO);
+        return dockingPreApplyDataInfoDO2VO(dockingPreApplyDataInfoDO);
+    }
+
+    /**
+     * 淇敼璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param dockingPreApplyDataInfoDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public DockingPreApplyDataInfoVO editSave(DockingPreApplyDataInfoDTO dockingPreApplyDataInfoDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(dockingPreApplyDataInfoDTO,"鏁版嵁瀵硅薄",dockingPreApplyDataInfoDTO.getOid(),"璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅涓婚敭");
+         //灏咲TO杞崲涓篋O
+         DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO = selectByOid(dockingPreApplyDataInfoDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(dockingPreApplyDataInfoDTO,dockingPreApplyDataInfoDO);
+         dockingPreApplyDataInfoMapper.updateByPrimaryKey(dockingPreApplyDataInfoDO);
+         return dockingPreApplyDataInfoDO2VO(dockingPreApplyDataInfoDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param dockingPreApplyDataInfoDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param dockingPreApplyDataInfoDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(DockingPreApplyDataInfoDTO dockingPreApplyDataInfoDTO, DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO) {
+            DockingPreApplyDataInfoDO tsDO = new DockingPreApplyDataInfoDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreApplyDataInfoDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(dockingPreApplyDataInfoDO.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 dockingPreApplyDataInfoDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteDockingPreApplyDataInfo(DockingPreApplyDataInfoDTO dockingPreApplyDataInfoDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(dockingPreApplyDataInfoDTO,"璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄",dockingPreApplyDataInfoDTO.getOid(),"璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鐨勪富閿�");
+        DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO = selectByOid(dockingPreApplyDataInfoDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(dockingPreApplyDataInfoDTO,dockingPreApplyDataInfoDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = dockingPreApplyDataInfoMapper.deleteByPrimaryKey(dockingPreApplyDataInfoDO.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  DockingPreApplyDataInfoVO getObjectByOid(String oid) throws VciBaseException{
+        return dockingPreApplyDataInfoDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private DockingPreApplyDataInfoDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO = dockingPreApplyDataInfoMapper.selectByPrimaryKey(oid.trim());
+        if(dockingPreApplyDataInfoDO == null || StringUtils.isBlank(dockingPreApplyDataInfoDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return dockingPreApplyDataInfoDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<DockingPreApplyDataInfoVO> listDockingPreApplyDataInfoByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<DockingPreApplyDataInfoDO> dockingPreApplyDataInfoDOList = listDockingPreApplyDataInfoDOByOidCollections(oidCollections);
+        return dockingPreApplyDataInfoDO2VOs(dockingPreApplyDataInfoDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<DockingPreApplyDataInfoDO> listDockingPreApplyDataInfoDOByOidCollections(Collection<String> oidCollections){
+        List<DockingPreApplyDataInfoDO> dockingPreApplyDataInfoDOList = new ArrayList<DockingPreApplyDataInfoDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<DockingPreApplyDataInfoDO> tempDOList =  dockingPreApplyDataInfoMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        dockingPreApplyDataInfoDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  dockingPreApplyDataInfoDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<DockingPreApplyDataInfoVO> refDataGridDockingPreApplyDataInfo(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridDockingPreApplyDataInfo(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataServiceImpl.java
new file mode 100644
index 0000000..ccd0a87
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreApplyDataServiceImpl.java
@@ -0,0 +1,1116 @@
+package org.springblade.code.service.impl;
+
+import com.alibaba.cloud.commons.io.FileUtils;
+import com.vci.starter.poi.bo.SheetDataSet;
+import com.vci.starter.poi.bo.SheetRowData;
+import com.vci.starter.poi.bo.WriteExcelData;
+import com.vci.starter.poi.bo.WriteExcelOption;
+import com.vci.starter.poi.util.ExcelUtil;
+import com.vci.starter.revision.service.RevisionModelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.enumpck.ResultCodeEnum;
+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.*;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.pageModel.KeyValue;
+import com.vci.web.pageModel.UITableFieldVO;
+import com.vci.web.redis.RedisService;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.commons.lang.StringUtils;
+import org.dom4j.Attribute;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.code.constant.MdmDuckingConstant;
+import org.springblade.code.dao.DockingPreApplyDataDaoI;
+import org.springblade.code.dao.DockingPreApplyDataInfoDaoI;
+import org.springblade.code.dto.CodeOrderDTO;
+import org.springblade.code.dto.DockingPreApplyDataDTO;
+import org.springblade.code.dto.DockingPreApplyDataInfoDTO;
+import org.springblade.code.dto.PreApplyCodeOrderDTO;
+import org.springblade.code.lifecycle.CodeDefaultLC;
+import org.springblade.code.model.DockingPreApplyDataDO;
+import org.springblade.code.model.DockingPreApplyDataInfoDO;
+import org.springblade.code.service.*;
+import org.springblade.code.utils.AttributeMapConfig;
+import org.springblade.code.utils.EnumVO;
+import org.springblade.code.vo.pagemodel.*;
+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 plm.bs.bom.clientobject.ClientBusinessObject;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
+import static org.springblade.code.constant.MdmDuckingConstant.*;
+import static org.springblade.code.constant.MdmEngineConstant.DEFAULT_SYNC_ATTR_LIST;
+
+/**
+ * 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏈嶅姟
+ * @author weidy
+ * @date 2022-04-05
+ */
+@Service
+public class DockingPreApplyDataServiceImpl implements DockingPreApplyDataServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private DockingPreApplyDataDaoI dockingPreApplyDataMapper;
+
+    /**
+     * 鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private DockingPreApplyDataInfoDaoI dockingPreApplyDataInfoMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+     * 瀵硅薄鐨勬搷浣�
+     */
+    @Autowired
+    private DockingPreApplyDataInfoServiceI dockingPreApplyDataInfoServiceI;
+
+    /**
+     * 妯℃澘鐨勬湇鍔�
+     */
+    @Autowired
+    private CodeClassifyTemplateServiceI templateService;
+    /**
+     * 鍒嗙被鎿嶄綔鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyServiceImpl codeClassifyService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 瀵硅薄鐨勬搷浣�
+     */
+    @Autowired
+    private CodeClassifyServiceI codeClassifyServiceI;
+
+    /**
+     * 棰勭敵璇锋暟鎹紝灞炴�ф槧灏勬ā鏉垮瓨鏀捐矾寰�
+     */
+    @Value("${docking.templateDir:D:\\desktop}")
+    public String preApplyTemplate;
+
+    @Value("${docking.tuhao:tuhao}")
+    public String tuhao;
+    /**
+     * 涓绘暟鎹紩鎿庢湇鍔�
+     */
+    @Autowired(required = false)
+    @Lazy
+    private MdmEngineServiceI engineService;
+
+    /**
+     * 涓绘暟鎹紩鎿庢湇鍔�
+     */
+    @Autowired(required = false)
+    @Lazy
+    private MdmIOServiceI mdmIOService;
+
+    @Autowired
+    private RedisService redisService;
+
+    @Autowired
+    private DockingPreAttrMappingSeviceI dockingPreAttrMappingSeviceI;
+
+    /***
+     * 鑾峰彇MAP鏋氫妇鍊�
+     */
+
+    @Autowired
+    private AttributeMapConfig attributeMapConfig;
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param dockingPreApplyDataDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    public List<DockingPreApplyDataVO> dockingPreApplyDataDO2VOs(Collection<DockingPreApplyDataDO> dockingPreApplyDataDOs, boolean iscontainAttr) throws VciBaseException {
+        List<DockingPreApplyDataVO> voList = new ArrayList<DockingPreApplyDataVO>();
+        if(!CollectionUtils.isEmpty(dockingPreApplyDataDOs)){
+            for(DockingPreApplyDataDO s: dockingPreApplyDataDOs){
+                DockingPreApplyDataVO vo =  dockingPreApplyDataDO2VO(s,iscontainAttr);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    private  DockingPreApplyDataVO dockingPreApplyDataDO2VO(DockingPreApplyDataDO dockingPreApplyDataDO,boolean iscontainAttr) throws VciBaseException{
+        DockingPreApplyDataVO vo = new DockingPreApplyDataVO();
+        if(dockingPreApplyDataDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreApplyDataDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+           if(iscontainAttr) {
+               List<DockingPreApplyDataInfoDO> dockingPreApplyDataInfoDOS = redisService.getCacheList(vo.getOid() + "_attr");
+               if (CollectionUtils.isEmpty(dockingPreApplyDataInfoDOS)) {
+                   //鏌ヨ鏁版嵁鐨勫睘鎬у搴斿�间俊鎭�
+                   VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(DockingPreApplyDataInfoDO.class);
+                   queryWrapperForDO.addQueryMap("dataoid",dockingPreApplyDataDO.getOid());
+                   dockingPreApplyDataInfoDOS= boService.selectByQueryWrapper(queryWrapperForDO,DockingPreApplyDataInfoDO.class);
+               }
+               List<DockingPreApplyDataInfoVO> dockingPreApplyDataInfoVOS = dockingPreApplyDataInfoServiceI.dockingPreApplyDataInfoDO2VOs(dockingPreApplyDataInfoDOS);
+               vo.setDockingPreApplyDataInfoVOs(dockingPreApplyDataInfoVOS);
+           }
+        }
+        return vo;
+    }
+
+
+    @Override
+    public List<DockingPreApplyDataVO> batchSetDataClassId(DockingPreApplyDataDTO dockingPreApplyDataDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(dockingPreApplyDataDTO,"鏁版嵁瀵硅薄",dockingPreApplyDataDTO.getOid(),"璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅涓婚敭");
+        List<String> oidList=  VciBaseUtil.str2List(dockingPreApplyDataDTO.getOid());
+        String classOid=dockingPreApplyDataDTO.getClassifyoid();
+        List<DockingPreApplyDataDO> dockingPreApplyDataDOS=dockingPreApplyDataMapper.selectByPrimaryKeyCollection(oidList);
+        dockingPreApplyDataDOS.stream().forEach(dockingPreApplyDataDO -> {
+            dockingPreApplyDataDO.setClassifyoid(classOid);
+        });
+        dockingPreApplyDataMapper.batchUpdate(dockingPreApplyDataDOS);
+        List<DockingPreApplyDataVO> dockingPreApplyDataVOS= dockingPreApplyDataDO2VOs(dockingPreApplyDataDOS);
+        return dockingPreApplyDataVOS;
+    }
+
+    /***
+     * 杩斿洖淇℃伅
+     * @param codeClassifyOid
+     * @param templateOid
+     * @param btmType
+     * @param dataOids
+     * @return
+     * @throws VciBaseException
+     */
+    @Override
+    public DataGrid<Map<String, String>> gridApplyData(String codeClassifyOid, String templateOid, String btmType, String dataOids) throws VciBaseException {
+        VciBaseUtil.alertNotNull(codeClassifyOid,"鏁版嵁瀵硅薄",codeClassifyOid,"鍒嗙被涓婚敭");
+        VciBaseUtil.alertNotNull(templateOid,"鏁版嵁瀵硅薄",templateOid,"鍒嗙被妯℃澘");
+        VciBaseUtil.alertNotNull(dataOids,"鏁版嵁瀵硅薄",dataOids,"鏁版嵁涓婚敭");
+        CodeClassifyVO topClassifyVO = codeClassifyService.getTopClassifyVO(codeClassifyOid);
+        String btmTypeId = topClassifyVO.getBtmtypeid();
+        if (StringUtils.isBlank(btmTypeId)) {
+            return new DataGrid<>("杩欎釜鍒嗙被鎵�灞為《灞傚垎绫绘病鏈夋坊鍔犱笟鍔$被鍨�");
+        }
+        boolean iccheckHasChild=codeClassifyService.checkHasChild(codeClassifyOid);
+        if(iccheckHasChild){
+            throw new VciBaseException("璇烽�夋嫨鍙跺瓙鍒嗙被鑺傜偣鐢宠鏁版嵁锛�");
+        }
+        CodeClassifyTemplateVO templateVO= engineService.getUsedTemplateByClassifyOid(codeClassifyOid);
+        Map<String, String> classifyDevlevMap= engineService.previewClassify(codeClassifyOid,templateOid);
+        List<CodeClassifyTemplateAttrVO> templateAttrVOS=templateVO.getAttributes();
+        Map<String,CodeClassifyTemplateAttrVO> attrTemplateAttrMap=templateAttrVOS.stream().collect(Collectors.toMap(s -> s.getId(), t -> t, (o1, o2) -> o2));
+        Map<String,String> condtionMappingMap=new HashMap<>();
+        condtionMappingMap.put("jviewModeId", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(VciBaseUtil.str2List(templateOid).toArray(new String[]{})) + ")");
+        //condtionMappingMap.put("jSourceClsfId",codeClassifyOid);
+        //鑾峰彇灞炴�ф槧灏勫叧绯�
+        List<DockingPreAttrMappingVO> dockingPreAttrMappingVOList=dockingPreAttrMappingSeviceI.selectAttrMappings(condtionMappingMap);
+        if(CollectionUtils.isEmpty(dockingPreAttrMappingVOList)){
+            return new DataGrid<>("鏈幏鍙栧埌鐩稿叧灞炴�ф槧灏勯厤缃�");
+        }
+        List<DockingPreApplyDataDO> dockingPreApplyDataDOS=this.dockingPreApplyDataMapper.selectByPrimaryKeyCollection(VciBaseUtil.str2List(dataOids));
+        List<DockingPreApplyDataVO> dockingPreApplyDataVOS= dockingPreApplyDataDO2VOs(dockingPreApplyDataDOS,true);
+        List<Map> maps=new ArrayList<>();
+
+        dockingPreApplyDataVOS.stream().forEach(dockingPreApplyDataVO -> {
+            List<DockingPreApplyDataInfoVO> dockingPreApplyDataInfoVOS=  dockingPreApplyDataVO.getDockingPreApplyDataInfoVOs();
+            Map<String/**oid**/, DockingPreApplyDataInfoVO/**瀵硅薄**/> attrMappingMap=new HashMap<>();
+            if(!CollectionUtils.isEmpty(dockingPreApplyDataInfoVOS)) {
+               attrMappingMap = dockingPreApplyDataInfoVOS.stream().collect(Collectors.toMap(s -> s.getKey(), t -> t, (o1, o2) -> o2));
+            }
+            Map<String,String> attributMap=new HashMap<>();
+            Map<String, DockingPreApplyDataInfoVO> finalAttrMappingMap = attrMappingMap;
+            dockingPreAttrMappingVOList.stream().forEach(dockingPreAttrMappingVO -> {
+                String innerName=dockingPreAttrMappingVO.getJsourceAttrKey();
+                String jtargetAttrKey=dockingPreAttrMappingVO.getJtargetAttrKey().toLowerCase(Locale.ROOT);
+                final String[] defaulValue = {dockingPreAttrMappingVO.getJdefaultValue()};
+                CodeClassifyTemplateAttrVO templateAttr= attrTemplateAttrMap.get(innerName);
+
+                if(innerName.equalsIgnoreCase(tuhao.toLowerCase(Locale.ROOT))){//灞炴�ф槧灏勪腑鏄浘鍙风殑搴斿綋鍗曠嫭鍔�
+                    attributMap.put(tuhao,dockingPreApplyDataVO.getUniquecode());
+                }else{
+                    if (StringUtils.isNotBlank(jtargetAttrKey) && finalAttrMappingMap.containsKey(jtargetAttrKey)) {
+                        DockingPreApplyDataInfoVO dataInfoVO = finalAttrMappingMap.get(jtargetAttrKey);
+                        String value = dataInfoVO.getValue();
+                        List<DockingPreAttrRangeVO> dockingPreAttrRangeVOList = dockingPreAttrMappingVO.getDockingPreAttrRangeVOS();
+                        //Map<String/**闆嗘垚灞炴�у彇鍊艰寖鍥寸殑鍐呴儴鍊�**/, String/**涓绘暟鎹睘鎬у彇鍊艰寖鍥村唴閮ㄥ��**/> attrNameIdMap=new HashMap<>();
+                        if (StringUtils.isNotBlank(value)) {
+                            defaulValue[0] = value;
+                        }
+                        if (!CollectionUtils.isEmpty(dockingPreAttrRangeVOList)) {
+                            // attrNameIdMap = dockingPreAttrRangeVOList.stream().collect(Collectors.toMap(s -> s.getJtargeNumTextValue(), t -> t.getJnumTextValue().toLowerCase(Locale.ROOT),(o1, o2)->o2));
+                            dockingPreAttrRangeVOList.stream().forEach(dockingPreAttrRangeVO -> {
+                                String jtargeNumTextValue = dockingPreAttrRangeVO.getJtargeNumTextValue();
+                                List<String> valueList = VciBaseUtil.str2List(jtargeNumTextValue);
+                                if (valueList.contains(value)) {
+                                    defaulValue[0] = dockingPreAttrRangeVO.getJnumTextValue();
+                                }
+                            });
+                        }
+                    }
+                    //鍒ゆ柇妯℃澘灞炴�ц缃鍒欓粯璁ゅ��
+                    if (StringUtils.isBlank(defaulValue[0]) && templateAttr != null && StringUtils.isNotBlank(templateAttr.getClassifyinvokelevel())) {
+                        defaulValue[0] = classifyDevlevMap.get(innerName);
+                    }
+
+                    //鍒ゆ柇妯℃澘灞炴�ч粯璁ゅ��
+                    if (StringUtils.isBlank(defaulValue[0]) && templateAttr != null && StringUtils.isNotBlank(templateAttr.getDefaultvalue())) {
+                        defaulValue[0] = templateAttr.getDefaultvalue();
+                    }
+                    if (((StringUtils.isNotBlank(templateAttr.getEnumString())
+                            && !"[]".equalsIgnoreCase(templateAttr.getEnumString())) ||
+                            StringUtils.isNotBlank(templateAttr.getEnumid()))) {
+                        UITableFieldVO fieldVO = engineService.templateAttr2TableField(templateAttr, false);
+                        List<KeyValue> keyValueList = fieldVO.getData();
+                        String text = "";
+                        if (!CollectionUtils.isEmpty(keyValueList)) {
+                            Map<String, String> enumMap = keyValueList.stream().collect(Collectors.toMap(s -> s.getKey(), t -> t.getValue().toLowerCase(Locale.ROOT), (o1, o2) -> o2));
+                            if (enumMap.containsKey(defaulValue[0])) {
+                                text = enumMap.get(defaulValue[0]);
+                            }
+                        }
+                        attributMap.put(fieldVO.getField(), text);
+                    }
+                    attributMap.put(innerName, defaulValue[0]);
+                }
+            });
+            maps.add(attributMap);
+        });
+        DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
+        List<Map<String, String>> dataList = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(maps)) {
+            maps.stream().forEach(map -> {
+                Map<String, String> data = new HashMap<>();
+                map.forEach((key, value) -> {
+                    data.put((String) key, (String) value);
+                });
+                dataList.add(data);
+            });
+        }
+        dataGrid.setData(dataList);
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param dockingPreApplyDataDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<DockingPreApplyDataVO> dockingPreApplyDataDO2VOs(Collection<DockingPreApplyDataDO>  dockingPreApplyDataDOs) throws VciBaseException{
+        List<DockingPreApplyDataVO> voList = new ArrayList<DockingPreApplyDataVO>();
+        if(!CollectionUtils.isEmpty(dockingPreApplyDataDOs)){
+           for(DockingPreApplyDataDO s: dockingPreApplyDataDOs){
+                DockingPreApplyDataVO vo =  dockingPreApplyDataDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  dockingPreApplyDataDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  DockingPreApplyDataVO dockingPreApplyDataDO2VO(DockingPreApplyDataDO dockingPreApplyDataDO) throws VciBaseException{
+              DockingPreApplyDataVO vo = new DockingPreApplyDataVO();
+        if(dockingPreApplyDataDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreApplyDataDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param dockingPreApplyDataDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public DockingPreApplyDataVO addSave(DockingPreApplyDataDTO dockingPreApplyDataDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(dockingPreApplyDataDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        DockingPreApplyDataDO dockingPreApplyDataDO = new DockingPreApplyDataDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreApplyDataDTO,dockingPreApplyDataDO);
+        dockingPreApplyDataMapper.insert(dockingPreApplyDataDO);
+        return dockingPreApplyDataDO2VO(dockingPreApplyDataDO);
+    }
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param dockingPreApplyDataDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param dockingPreApplyDataDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(DockingPreApplyDataDTO dockingPreApplyDataDTO, DockingPreApplyDataDO dockingPreApplyDataDO) {
+            DockingPreApplyDataDO tsDO = new DockingPreApplyDataDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreApplyDataDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(dockingPreApplyDataDO.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 dockingPreApplyDataDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteDockingPreApplyData(DockingPreApplyDataDTO dockingPreApplyDataDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(dockingPreApplyDataDTO,"璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁瀵硅薄",dockingPreApplyDataDTO.getOid(),"璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鐨勪富閿�");
+        DockingPreApplyDataDO dockingPreApplyDataDO = selectByOid(dockingPreApplyDataDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(dockingPreApplyDataDTO,dockingPreApplyDataDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = dockingPreApplyDataMapper.deleteByPrimaryKey(dockingPreApplyDataDO.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  DockingPreApplyDataVO getObjectByOid(String oid) throws VciBaseException{
+        return dockingPreApplyDataDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private DockingPreApplyDataDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        DockingPreApplyDataDO dockingPreApplyDataDO = dockingPreApplyDataMapper.selectByPrimaryKey(oid.trim());
+        if(dockingPreApplyDataDO == null || StringUtils.isBlank(dockingPreApplyDataDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return dockingPreApplyDataDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<DockingPreApplyDataVO> listDockingPreApplyDataByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<DockingPreApplyDataDO> dockingPreApplyDataDOList = listDockingPreApplyDataDOByOidCollections(oidCollections);
+        return dockingPreApplyDataDO2VOs(dockingPreApplyDataDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<DockingPreApplyDataDO> listDockingPreApplyDataDOByOidCollections(Collection<String> oidCollections){
+        List<DockingPreApplyDataDO> dockingPreApplyDataDOList = new ArrayList<DockingPreApplyDataDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<DockingPreApplyDataDO> tempDOList =  dockingPreApplyDataMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        dockingPreApplyDataDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  dockingPreApplyDataDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<DockingPreApplyDataVO> refDataGridDockingPreApplyData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridDockingPreApplyData(conditionMap,pageHelper);
+    }
+
+    //==================
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<DockingPreApplyDataVO> gridDockingPreApplyData(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+
+        //鍙煡璇㈠惎鐢ㄧ殑data锛岃繖鏍峰氨涓嶇敤鍘绘壘鏈�澶х増鏈彿浜嗗啀鏌ヨ
+        conditionMap.put("useddflag","true");
+        List<DockingPreApplyDataDO> doList = dockingPreApplyDataMapper.selectByCondition(conditionMap,pageHelper);
+        Map<String,List<EnumVO>> mpmEnumMap= this.attributeMapConfig.getMpmEnumMap();
+        Map<String,List<String>> typeCodemap =new HashedMap();
+        doList.stream().forEach(dockingPreApplyDataDO -> {
+            String enumValue= dockingPreApplyDataDO.getParttype();
+            String type=dockingPreApplyDataDO.getType();
+            String code=dockingPreApplyDataDO.getNum();
+            if(!CollectionUtils.isEmpty(mpmEnumMap)){
+               if(mpmEnumMap.containsKey("partType")){
+                   List<EnumVO>  partTypeEnumMapList= mpmEnumMap.get("partType");
+                   Map<String, String> enumFieldValueMap = partTypeEnumMapList.stream().collect(Collectors.toMap(EnumVO::getEnumValue, EnumVO::getEnumText, (key1, key2) -> key2));
+                   if(enumFieldValueMap.containsKey(enumValue)){
+                      String enumText= enumFieldValueMap.get(enumValue);
+                       dockingPreApplyDataDO.setParttype(enumText);
+                   }
+               }
+            }
+            if(StringUtils.isNotBlank(code)) {
+                List<String> codeList = new ArrayList<>();
+                codeList.add(code);
+                if (typeCodemap.containsKey(type)) {
+                    List<String> oldCodeList = typeCodemap.get(type);
+                    codeList.addAll(oldCodeList);
+                }
+                typeCodemap.put(type, codeList);
+            }
+        });
+        List<ClientBusinessObject> cbos=new ArrayList<>();
+          if(!CollectionUtils.isEmpty(typeCodemap)) {
+              typeCodemap.forEach((type,codes)->{
+                  Map<String,String> contionMap=new HashedMap();
+                  contionMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codes.toArray(new String[]{})) + ")");
+                  List<ClientBusinessObject> newcbos=boService.queryCBO(type,contionMap);
+                  cbos.addAll(newcbos);
+              });
+          }
+        Map<String, ClientBusinessObject> codeCbosMap = cbos.stream().filter(systeDataObject -> systeDataObject != null && StringUtils.isNotBlank(systeDataObject.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
+        doList.stream().forEach(s->{
+            String code =s.getNum();
+            if(codeCbosMap.containsKey(code)){
+                ClientBusinessObject cbo=  codeCbosMap.get(code);
+                if(!cbo.getLcStatus().equals(CodeDefaultLC.RELEASED.getValue())){//濡傛灉涓嶆槸鍙戝竷鐘舵�佸垯闅愯棌缂栫爜
+                    s.setNum("******");
+                    s.setId("******");
+                    s.setPreapplyoid("******");
+                }
+            }else{
+
+            }
+        });
+
+        DataGrid<DockingPreApplyDataVO> dataGrid=new DataGrid<DockingPreApplyDataVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(dockingPreApplyDataDO2VOs(doList,false));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingPreApplyDataMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎻掑叆data鍜宒atainfo,浼氳嚜鍔ㄦ妸data閲岀殑oid,unique璧嬪�煎埌datainfo閲岃竟鍘�
+     * @param dockingPreApplyDataDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public void addSaveDataAndInfo(DockingPreApplyDataDTO dockingPreApplyDataDTO, List<DockingPreApplyDataInfoDTO> dockingPreApplyDataInfoDTOList) throws VciBaseException{
+        String unique = "";
+        //灏咲TO杞崲涓篋O
+        DockingPreApplyDataDO dockingPreApplyDataDO = new DockingPreApplyDataDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreApplyDataDTO,dockingPreApplyDataDO);
+
+        String dataoid = dockingPreApplyDataDO.getOid();
+        if(StringUtils.isEmpty(dockingPreApplyDataDO.getOid())) {
+            dataoid = redisService.getUUIDEveryDay();
+            dockingPreApplyDataDO.setOid(dataoid);
+        }
+
+        //鏌ヨ浠ュ墠鐨勬暟鎹紝鍑嗗淇敼usedflasg
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(DockingPreApplyDataDO.class);
+        queryWrapperForDO.addQueryMap("uniquecode",dockingPreApplyDataDO.getUniquecode());
+        List<DockingPreApplyDataDO> dockingPreApplyDataDOList = boService.selectByQueryWrapper(queryWrapperForDO,DockingPreApplyDataDO.class);
+
+        //鎵ц鏁版嵁淇濆瓨鎿嶄綔
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+
+        BatchCBO batchUpdateData = new BatchCBO();
+        //淇敼浠ュ墠鐨勬暟鎹畊seddflag=false
+        if (dockingPreApplyDataDOList.size() != 0) {
+            for (DockingPreApplyDataDO dockingPreApplyDataDOi : dockingPreApplyDataDOList) {
+                dockingPreApplyDataDOi.setUseddflag(PRE_APPLY_DATA_USER_FALSE);
+            }
+            batchUpdateData = dockingPreApplyDataMapper.batchUpdate(dockingPreApplyDataDOList);
+        }
+
+        //鏂板鐜板湪鐨刣ata
+        dockingPreApplyDataDO.setUseddflag(MdmDuckingConstant.PRE_APPLY_DATA_USER_TRUE);//鏄渶鏂扮殑
+        BatchCBO batchInsertData = dockingPreApplyDataMapper.insert(dockingPreApplyDataDO);
+        batchUpdateData.copyFromOther(batchInsertData);
+
+        //鏂板dataInfo
+        List<DockingPreApplyDataInfoDO> dockingPreApplyDataInfoDOList = new ArrayList<DockingPreApplyDataInfoDO>();
+        for (DockingPreApplyDataInfoDTO dockingPreApplyDataInfoDTO : dockingPreApplyDataInfoDTOList) {
+            DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO = new DockingPreApplyDataInfoDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreApplyDataInfoDTO, dockingPreApplyDataInfoDO);
+            dockingPreApplyDataInfoDO.setDataoid(dataoid);
+
+            if (StringUtils.isNotEmpty(dockingPreApplyDataDO.getUniquecode())) {
+                dockingPreApplyDataInfoDO.setUniquecode(dockingPreApplyDataDO.getUniquecode());
+            }
+            if (StringUtils.isEmpty(dockingPreApplyDataInfoDO.getOid())) {
+                String datainfooid = redisService.getUUIDEveryDay();
+                dockingPreApplyDataInfoDO.setOid(datainfooid);
+            }
+
+            dockingPreApplyDataInfoDOList.add(dockingPreApplyDataInfoDO);
+        }
+
+        if(dockingPreApplyDataInfoDOList.size()!=0) {
+            BatchCBO batchInsertDataInfo = dockingPreApplyDataInfoMapper.batchInsert(dockingPreApplyDataInfoDOList);
+            batchUpdateData.copyFromOther(batchInsertDataInfo);
+            redisService.setCacheList(dockingPreApplyDataDO.getOid(),dockingPreApplyDataInfoDOList);
+        }
+        WebUtil.setPersistence(true);//鎵ц淇濆瓨
+        boService.persistenceBatch(batchUpdateData);//涓�璧锋墽琛屼繚瀛�
+    }
+
+    /**
+     * 淇敼璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅
+     * @param dockingPreApplyDataDTO 璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public BaseResult editSave(DockingPreApplyDataDTO dockingPreApplyDataDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(dockingPreApplyDataDTO,"鏁版嵁瀵硅薄",dockingPreApplyDataDTO.getOid(),"璁板綍宸ヨ壓鎺ㄩ�佽繃鏉ョ殑鏁版嵁淇℃伅涓婚敭");
+        //灏咲TO杞崲涓篋O
+        DockingPreApplyDataDO dockingPreApplyDataDO = selectByOid(dockingPreApplyDataDTO.getOid());
+        revisionModelUtil.copyFromDTOIgnore(dockingPreApplyDataDTO,dockingPreApplyDataDO);
+        dockingPreApplyDataMapper.updateByPrimaryKey(dockingPreApplyDataDO);
+        return BaseResult.success(dockingPreApplyDataDO2VO(dockingPreApplyDataDO));
+    }
+
+    /**
+     * 鏍规嵁data鐨刼id鏌ヨdata淇℃伅鍜宒atainfo淇℃伅锛屽苟涓旀嫾鎺atainfo涓簃ap
+     * @param dockingPreApplyDataDTO
+     * @return
+     * @throws VciBaseException
+     */
+    @Override
+    public BaseResult<Map<String,String>> getDataInfoMap(DockingPreApplyDataDTO dockingPreApplyDataDTO) throws VciBaseException{
+
+        String dataoid = dockingPreApplyDataDTO.getOid();
+
+        //鏌ヨdata鐨則ype
+        DockingPreApplyDataDO dockingPreApplyDataDO = dockingPreApplyDataMapper.selectByPrimaryKey(dataoid);
+
+        if(dockingPreApplyDataDO == null){
+            String msg = "棰勭敵璇风紪鐮侊紝閫氳繃oid鏌ヨDockingPreApplyDataDO鏈壘鍒版暟鎹�!";
+            logger.error(msg);
+            return BaseResult.fail(msg,null);
+        }
+
+        String type = dockingPreApplyDataDO.getType();
+
+        //鏌ヨdatainfo涓簃ap
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingPreApplyDataInfoDO.class);
+        queryWrapper.addQueryMap("dataoid",dataoid);
+        List<DockingPreApplyDataInfoDO> dockingPreApplyDataInfoDOList = dockingPreApplyDataInfoMapper.selectByWrapper(queryWrapper);
+        Map<String,String> dataInfoMap = new HashMap<String,String>();//鎵�鏈夌殑鍊�
+        for (DockingPreApplyDataInfoDO dockingPreApplyDataInfoDO :dockingPreApplyDataInfoDOList){
+            dataInfoMap.put(dockingPreApplyDataInfoDO.getKey(),dockingPreApplyDataInfoDO.getValue());
+        }
+//鎶奷atainfomap鏍规嵁閰嶇疆鐨勬ā鏉縳ml杞寲涓烘渶缁堝瓨鍏ョ殑鏁版嵁map
+//        String systemid = dockingPreApplyDataDO.getSystemid();//绯荤粺缂栧彿
+//
+//        PreApplyDataTrans preApplyDataTrans = getPreApplyDataTransBySystemIdAndType(systemid,type);
+//        if(preApplyDataTrans == null){
+//            String msg = "璇诲彇棰勭敵璇锋暟鎹厤缃ā鏉挎垚鍔�,浣嗘槸娌℃湁鍖归厤鐨勬ā鏉垮睘鎬�,systemid: "+systemid+",type: "+type;
+//            logger.error(msg);
+//            preApplyDataTrans = new PreApplyDataTrans(systemid,type,new HashMap<String,String>());
+//        }
+//
+//        Map<String, String> attrMap = preApplyDataTrans.getAttrMap();
+//
+//        Map<String, String> outMap = getShowMap(attrMap,dataInfoMap);
+
+        return BaseResult.success(dataInfoMap,"鏌ヨ鎴愬姛");
+    }
+
+    /**
+     * 鏍规嵁systemid鏌ヨ閰嶇疆鐨勫睘鎬фā鏉�
+     * @param systemid  绯荤粺id
+     * @param type  鍒嗙被
+     * @return
+     */
+    public PreApplyDataTrans getPreApplyDataTransBySystemIdAndType(String systemid,String type){
+        String templateXml = null;
+        String fileUrl = "";
+        try {
+            String templatename = systemid;
+            fileUrl = preApplyTemplate+ File.separator+templatename+".xml";
+            templateXml = FileUtils.readFileToString(new File(fileUrl),"utf-8");
+        }catch (Exception e){
+            e.printStackTrace();
+            logger.error("璇诲彇棰勭敵璇峰睘鎬ф槧灏勬ā鏉垮け璐�,fileUrl: "+fileUrl);
+            return null;
+        }
+
+        /**
+         * 閫氳繃閰嶇疆鐨勬ā鏉挎枃浠讹紝杞崲涓哄墠绔鎳傚拰mdmEngineController/getDataByOid鎺ュ彛绫讳技鐨勬暟鎹�
+         */
+        List<PreApplyDataTrans>  preApplyDataTransList = null;
+        try {
+            preApplyDataTransList = readAttrTransfTemplate(templateXml);
+        }catch (Exception e){
+            logger.error("璇诲彇棰勭敵璇锋暟鎹厤缃ā鏉垮け璐�,");
+            return null;
+        }
+
+        PreApplyDataTrans preApplyDataTrans = null;
+        for(PreApplyDataTrans preApplyDataTransi:preApplyDataTransList){
+            String preApplyDataTrans_type = preApplyDataTransi.getType();
+            if(type.equals(preApplyDataTrans_type)){
+                preApplyDataTrans = preApplyDataTransi;
+                break;
+            }
+        }
+        return preApplyDataTrans;
+    }
+
+    /**
+     * 鎶婇鐢宠鐨勫睘鎬ф牴鎹ā鏉縳ml杞寲涓烘渶缁堢殑灞炴�ap
+     * @param attrMap
+     * @param dataInfoMap
+     * @return
+     */
+    public Map<String, String> getShowMap(Map<String, String> attrMap,Map<String, String> dataInfoMap){
+        Map<String, String> outMap = new HashMap<String, String>();//杞崲鐨刱ey鍚庣殑map
+        for (String systemkey:attrMap.keySet()){
+            String mdmKey = attrMap.getOrDefault(systemkey,"");
+            String value = dataInfoMap.getOrDefault(mdmKey,"");
+            if(StringUtils.isNotEmpty(value)){
+                outMap.put(systemkey,value);
+            }
+        }
+        return outMap;
+    }
+    /**
+     * 鎵归噺澶勭悊棰勭敵璇风紪鐮�
+     * 蹇呴』瑕佹湁鍒嗙被oid鍜宒ata
+     */
+    @Override
+    public BaseResult applyData(List<PreApplyCodeOrderDTO> preApplyCodeOrderDTOList) {
+
+        List<Map> retMapList = new ArrayList<Map>();//淇濆瓨杩斿洖鐨勯敊璇痮id鍜屼俊鎭�
+        for (PreApplyCodeOrderDTO preApplyCodeOrderDTO : preApplyCodeOrderDTOList) {
+
+            CodeOrderDTO codeOrderDTO = new CodeOrderDTO();
+            try {
+                //鏍规嵁鍒嗙被oid鏌ヨ妯℃澘oid锛岀紪鐮佽鍒檕id
+                String codeClassfyOid = preApplyCodeOrderDTO.getCodeClassifyOid();
+
+                //鏌ヨdata鐨則ype
+                String dataoid = preApplyCodeOrderDTO.getDataoid();
+                DockingPreApplyDataDO dockingPreApplyDataDO = dockingPreApplyDataMapper.selectByPrimaryKey(dataoid);
+
+                //鏌ヨ缂栫爜瑙勫垯oid
+                String ruleOid = null;
+                try {
+                    CodeRuleVO codeRuleVO = engineService.getCodeRuleByClassifyOid(codeClassfyOid);
+                    ruleOid = codeRuleVO.getOid();
+                }catch (Exception e){
+                    Map retMap = new HashMap<String,String>();
+                    retMap.put("oid",codeOrderDTO.getOid());
+                    retMap.put("msg","閫夋嫨鐨勫垎绫讳互鍙婁笂绾у垎绫绘病鏈夐厤缃紪鐮佽鍒�");
+                    retMapList.add(retMap);
+                    logger.error("鎵归噺澶勭悊棰勭敵璇锋暟鎹け璐�,鏁版嵁: "+preApplyCodeOrderDTO.toString()+",msg: 鏍规嵁鍒嗙被oid鏌ヨ缂栫爜瑙勫垯澶辫触,鍒嗙被oid: "+codeClassfyOid);
+                    continue;
+                }
+
+                //鏌ヨ浣跨敤鐨勬ā鏉縪id
+                String templateOid = null;
+                try {
+                    CodeClassifyTemplateVO codeClassifyTemplateVO = engineService.getUsedTemplateByClassifyOid(codeClassfyOid);
+                    templateOid = codeClassifyTemplateVO.getOid();
+                }catch (Exception e){
+                    Map retMap = new HashMap<String,String>();
+                    retMap.put("oid",codeOrderDTO.getOid());
+                    retMap.put("msg","閫夋嫨鐨勫垎绫讳互鍙婁笂绾у垎绫绘病鏈夐厤缃厤缃ā鏉�");
+                    retMapList.add(retMap);
+                    logger.error("鎵归噺澶勭悊棰勭敵璇锋暟鎹け璐�,鏁版嵁: "+preApplyCodeOrderDTO.toString()+",msg: 鏍规嵁鍒嗙被oid鏌ヨ浣跨敤鐨勬ā鏉垮け璐�,鍒嗙被oid: "+codeClassfyOid);
+                    continue;
+                }
+
+                //鏍规嵁dataoid鏌ヨdataInfoMap
+                Map dataInfoMap = null;
+
+                DockingPreApplyDataDTO dockingPreApplyDataDTO = new DockingPreApplyDataDTO();
+                dockingPreApplyDataDTO.setOid(preApplyCodeOrderDTO.getDataoid());
+                BaseResult baseResult_dataMap = getDataInfoMap(dockingPreApplyDataDTO);
+                if(ResultCodeEnum.SUCCESS.code==baseResult_dataMap.getCode()){
+                    Object datao = baseResult_dataMap.getObj();
+                    if(datao!=null){
+                        dataInfoMap = (Map<String, String>)datao;
+                    }
+                }
+                if(dataInfoMap==null){
+                    Map retMap = new HashMap<String,String>();
+                    retMap.put("oid",codeOrderDTO.getOid());
+                    retMap.put("msg","鏌ヨ鍒版帴鏀剁殑棰勭敵璇锋暟鎹负绌�");
+                    retMapList.add(retMap);
+                    logger.error("鎵归噺澶勭悊棰勭敵璇锋暟鎹け璐�,鏁版嵁: "+preApplyCodeOrderDTO.toString()+",msg: 鏍规嵁DockingPreApplyData_oid鏌ヨ鏁版嵁鎺ユ敹鐨勯鐢宠鏁版嵁澶辫触,DockingPreApplyData_oid: "+preApplyCodeOrderDTO.getDataoid());
+                    continue;
+                }
+
+                //鎶奷atainfomap鏍规嵁閰嶇疆鐨勬ā鏉縳ml杞寲涓烘渶缁堝瓨鍏ョ殑鏁版嵁map
+                String systemid = dockingPreApplyDataDO.getSystemid();//绯荤粺缂栧彿
+                String type = dockingPreApplyDataDO.getType();//type
+
+                PreApplyDataTrans preApplyDataTrans = getPreApplyDataTransBySystemIdAndType(systemid,type);
+                if(preApplyDataTrans == null){
+                    String msg = "璇诲彇棰勭敵璇锋暟鎹厤缃ā鏉挎垚鍔�,浣嗘槸娌℃湁鍖归厤鐨勬ā鏉垮睘鎬�,systemid: "+systemid+",type: "+type;
+                    logger.error(msg);
+                    preApplyDataTrans = new PreApplyDataTrans(systemid,type,new HashMap<String,String>());
+                }
+
+                Map<String, String> attrMap = preApplyDataTrans.getAttrMap();
+
+                Map<String, String> data = getShowMap(attrMap,dataInfoMap);
+                if(data.size()==0){
+                    Map retMap = new HashMap<String,String>();
+                    retMap.put("oid",codeOrderDTO.getOid());
+                    retMap.put("msg","鎺ユ敹鐨勯鐢宠鏁版嵁鏍规嵁閰嶇疆鐨勬ā鏉縳ml杞寲灞炴�уけ璐�");
+                    retMapList.add(retMap);
+                    logger.error("鎵归噺澶勭悊棰勭敵璇锋暟鎹け璐�,鏁版嵁: "+preApplyCodeOrderDTO.toString()+",msg: 鎺ユ敹鐨勯鐢宠鏁版嵁鏍规嵁閰嶇疆鐨勬ā鏉縳ml杞寲灞炴�уけ璐�!");
+                    continue;
+                }
+
+                String name = data.getOrDefault("name","");
+
+                //鎵ц鏁版嵁淇濆瓨
+                codeOrderDTO.setCodeClassifyOid(codeClassfyOid);
+                codeOrderDTO.setTemplateOid(templateOid);
+                codeOrderDTO.setCodeRuleOid(ruleOid);
+                codeOrderDTO.setSecDTOList(preApplyCodeOrderDTO.getSecDTOList());//鐮佹
+                codeOrderDTO.setEditInProcess(preApplyCodeOrderDTO.isEditInProcess());
+                codeOrderDTO.setUpVersion(preApplyCodeOrderDTO.isUpVersion());
+                codeOrderDTO.setName(name);
+                codeOrderDTO.setData(data);
+                engineService.addSaveCode(codeOrderDTO);
+
+                //鍐嶄慨鏀筪ata閲岃竟鐨刢lassifyoid鍜宑lassifuname
+                String classifyoid = preApplyCodeOrderDTO.getCodeClassifyOid();
+                //鏌ヨ鍒嗙被
+                CodeClassifyVO codeClassifyVO = codeClassifyServiceI.getObjectByOid(classifyoid);
+                //璁剧疆鍒嗙被oid,name,flag
+                dockingPreApplyDataDO.setClassifyoid(codeClassifyVO.getOid());
+                dockingPreApplyDataDO.setClassifyname(codeClassifyVO.getName());
+                dockingPreApplyDataMapper.updateByPrimaryKey(dockingPreApplyDataDO);
+            } catch (Exception e) {
+                Map retMap = new HashMap<String,String>();
+                retMap.put("oid",preApplyCodeOrderDTO.getDataoid());
+                retMap.put("msg","澶勭悊澶辫触!");
+                retMapList.add(retMap);
+                logger.error("鎵归噺澶勭悊棰勭敵璇锋暟鎹け璐�,鏁版嵁: "+preApplyCodeOrderDTO.toString()+",msg: "+e.getMessage());
+            }
+        }
+        BaseResult result = BaseResult.success(retMapList);
+        return result;
+    }
+
+    @Override
+    public BaseResult batchApplyDatas(List<CodeOrderDTO> codeOrderDTOs) {
+       if(!CollectionUtils.isEmpty(codeOrderDTOs)){
+           CodeOrderDTO orderDTO=codeOrderDTOs.get(0);
+           Map<String,String> rowsOidMap=new HashMap<>();
+           SheetDataSet dataSet=new SheetDataSet();
+           List<SheetRowData> sheetRowDatas=new ArrayList<>();
+           CodeClassifyTemplateVO codeClassifyTemplateVO = engineService.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid());
+           List<String> colName=new ArrayList<>();
+           List<CodeClassifyTemplateAttrVO> templateAttrVOS=codeClassifyTemplateVO.getAttributes();
+           List<CodeClassifyTemplateAttrVO> attrVOS = templateAttrVOS.stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag())
+           ).collect(Collectors.toList());
+           Map<String/**鑻辨枃鍚嶇О**/, String/**涓枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t.getName(),(o1, o2)->o2));
+           for (int i=0;i<codeOrderDTOs.size();i++) {
+               CodeOrderDTO codeOrderDTO=codeOrderDTOs.get(i);
+               String dataoid = codeOrderDTO.getOid();
+               rowsOidMap.put(i+"",dataoid);//瀛樺偍鏁版嵁oid锛屼竴閬嶈缃�
+
+               SheetRowData sheetRowData=new SheetRowData();
+               Map<String, String> dataMap= codeOrderDTO.getData();
+               sheetRowData.setRowIndex(i+"");
+               Map<Integer,String> indexValueMap=new HashMap<>();
+               int index=0;
+               colName=new ArrayList<>();
+               for (String field: attrNameIdMap.keySet()) {
+                   String outAttrName=attrNameIdMap.get(field);
+                   colName.add(outAttrName);
+                   String value="";
+                  if(dataMap.containsKey(field)){
+                      value=StringUtils.isBlank(dataMap.get(field))?"":dataMap.get(field);
+                  }else{
+                      value="";
+                  }
+                   indexValueMap.put(index++,value);
+               }
+               sheetRowData.setData(indexValueMap);
+               sheetRowDatas.add(sheetRowData);
+           }
+           dataSet.setRowData(sheetRowDatas);
+           dataSet.setColName(colName);
+           Map<String,String> errorMap=new HashMap<>();
+           List<String> codeList=mdmIOService.batchImportCode(orderDTO,codeClassifyTemplateVO,dataSet,errorMap,false);
+           List<SheetRowData> needSaveCboList = dataSet.getRowData().stream().filter(cbo -> {
+               String rowIndex =cbo.getRowIndex();
+               return !errorMap.containsKey(rowIndex);
+           }).collect(Collectors.toList());
+           LinkedList<String> needOIdList=new LinkedList<>();
+           Map<String,String> codeIdMap=new HashMap<>();
+           for(int i=0;i<needSaveCboList.size();i++) {
+               SheetRowData cbo = needSaveCboList.get(i);
+               String rouIndex = cbo.getRowIndex();
+               if (rowsOidMap.containsKey(rouIndex)) {
+                   String dataOid = rowsOidMap.get(rouIndex);
+                   needOIdList.add(dataOid);
+                   codeIdMap.put(dataOid,codeList.get(i));
+               }
+           }
+           if(!CollectionUtils.isEmpty(needOIdList)) {
+               CodeClassifyVO codeClassifyVO = codeClassifyServiceI.getObjectByOid(orderDTO.getCodeClassifyOid());
+               List<DockingPreApplyDataDO> dockingPreApplyDataDOS = dockingPreApplyDataMapper.selectByPrimaryKeys(VciBaseUtil.array2String(needOIdList.toArray(new String[]{})));
+               dockingPreApplyDataDOS.stream().forEach(dockingPreApplyDataDO -> {
+                   //璁剧疆鍒嗙被oid,name,flag
+                   String dataOid=dockingPreApplyDataDO.getOid();
+                   dockingPreApplyDataDO.setClassifyoid(codeClassifyVO.getOid());
+                   dockingPreApplyDataDO.setClassifyname(codeClassifyVO.getName());
+                   if(codeIdMap.containsKey(dataOid)) {//瀛樺叆鏁版嵁缂栫爜
+                       String code= codeIdMap.get(dataOid);
+                       dockingPreApplyDataDO.setId(code);
+                       dockingPreApplyDataDO.setPreapplyoid(code);
+                       dockingPreApplyDataDO.setNum(code);
+                   }
+
+                   dockingPreApplyDataDO.setDatamsg("璧嬬爜鎴愬姛");
+                   dockingPreApplyDataDO.setUseddflag("true");
+               });
+               dockingPreApplyDataMapper.batchUpdate(dockingPreApplyDataDOS);
+           }
+           //濡傛灉鏈夐敊璇垯瀵煎嚭execl
+           if(errorMap.size()>0){
+               List<String> needRowIndexList = new ArrayList<>();
+              String errorFile=returnErrorToExcel(dataSet.getRowData(),errorMap, needRowIndexList,dataSet.getColName());
+               if(StringUtils.isNotBlank(errorFile)){
+                   //鏀惧埌map閲�
+                   BaseResult result = BaseResult.fail("鏈夐儴鍒嗘暟鎹敵璇峰け璐ワ紝璇锋牳瀵�");
+                   result.setObj(ControllerUtil.putErrorFile(errorFile));
+                   return result;
+               }else {
+                   return BaseResult.success("鐢宠鎴愬姛!");
+               }
+
+           }
+
+       }
+
+        return BaseResult.success("鐢宠鎴愬姛!");
+    }
+
+    /**
+     * 閿欒淇℃伅杩斿洖excel
+     * @param rowDataList 鎵�鏈夌殑瀵煎叆鏁版嵁
+     * @param errorMap 閿欒鐨勪俊鎭�
+     * @param needRowIndexList 闇�瑕佸啓鍏ョ殑鏁版嵁鐨勮鍙�
+     * @param titleRowData 鏍囬琛�
+     *
+     * @return 閿欒鐨別xcel鏂囦欢锛屾病鏈夐敊璇細杩斿洖绌�
+     */
+    private String returnErrorToExcel(Collection<SheetRowData> rowDataList,
+                                      Map<String,String> errorMap,
+                                      List<String> needRowIndexList,List<String> titleRowData){
+        if(CollectionUtils.isEmpty(errorMap)){
+            return "";
+        }
+        Map<String, SheetRowData> rowIndexDataMap = rowDataList.stream().filter(s -> !needRowIndexList.contains(s.getRowIndex())).collect(Collectors.toMap(s -> s.getRowIndex(), t -> t));
+        LinkedList<WriteExcelData> errorDataList = new LinkedList<>();
+        errorDataList.add(new WriteExcelData(0,0,"閿欒淇℃伅"));
+        for (int i = 0; i < titleRowData.size(); i++) {
+            //閿欒淇℃伅鍦ㄦ渶鍚�
+            errorDataList.add(new WriteExcelData(0,i+1,titleRowData.get(i)));
+        }
+        Integer[] newRowIndex = new Integer[]{1};
+        errorMap.forEach((index,error)->{
+            //閿欒淇℃伅鍏ㄩ儴缁勫悎鍒颁竴璧�
+            SheetRowData rowData = rowIndexDataMap.getOrDefault(index, null);
+            if(rowData!=null){
+                errorDataList.add(new WriteExcelData(newRowIndex[0],0,error));
+                rowData.getData().forEach((colIndex,value)->{
+                    errorDataList.add(new WriteExcelData(newRowIndex[0],colIndex+1,value));
+                });
+                newRowIndex[0]++;
+            }
+        });
+        String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.xls";
+        WriteExcelOption eo = new WriteExcelOption(errorDataList);
+        try {
+            new File(excelFileName).createNewFile();
+        } catch (IOException e) {
+            throw new VciBaseException(LangBaseUtil.getErrorMsg(e));
+        }
+        ExcelUtil.writeDataToFile(excelFileName,eo);
+        return excelFileName;
+    }
+
+    /**
+     * 瑙f瀽棰勭敵璇锋暟鎹拰鍒嗙被鐨勫睘鎬ц浆鎹㈡ā鏉縮s
+     */
+    public List<PreApplyDataTrans> readAttrTransfTemplate(String templateXml) throws Exception{
+        templateXml = StringUtils.isEmpty(templateXml)?"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+                "<datas systemid=\"oa0001\">\n" +
+                "\t<data type=\"wupin\">\n" +
+                "\t\t<attr systemkey=\"code01\" mdmkey=\"key01\"/>\n" +
+                "\t\t<attr systemkey=\"code02\" mdmkey=\"key02\"/>\n" +
+                "\t</data>\n" +
+                "</datas>":templateXml;
+
+        List<PreApplyDataTrans> preApplyDataTransList = new ArrayList<PreApplyDataTrans>();
+        Document document = DocumentHelper.parseText(templateXml);
+        Element datas_element = document.getRootElement();
+        List<Element> data_elements = datas_element.elements(XML_DATA);
+        for (Element data_element:data_elements){
+            Attribute systemid_attr = data_element.attribute(XML_SYSTEMID);
+            String systemid = systemid_attr==null?"":systemid_attr.getValue();//systemid
+
+            Attribute type_attr = data_element.attribute(XML_TYPE);
+            String type = type_attr==null?"":type_attr.getValue();//type
+
+            List<Element> attr_elements = data_element.elements(XML_ATTR);
+            Map<String,String> attrMap = new HashMap<String,String>();
+            for (Element attr_element:attr_elements){
+                Map<String,Object> dataMap = new HashMap<String,Object>();
+
+                Attribute systemkey_attr = attr_element.attribute(XML_SYSTEMKEY);
+                String systemkey = systemkey_attr==null?"":systemkey_attr.getValue();//systemkey
+
+                Attribute mdmkey_attr = attr_element.attribute(XML_MDMKEY);
+                String mdmkey = mdmkey_attr==null?"":mdmkey_attr.getValue();//mdmkey
+
+                attrMap.put(systemkey,mdmkey);
+                PreApplyDataTrans p = new PreApplyDataTrans(systemid,type,attrMap);
+                preApplyDataTransList.add(p);
+            }
+        }
+        return preApplyDataTransList;
+    }
+
+
+    class PreApplyDataTrans{
+        private String systemid;
+        private String type;
+        private Map<String,String> attrMap;
+
+        public PreApplyDataTrans(String systemid, String type, Map<String, String> attrMap) {
+            this.systemid = systemid;
+            this.type = type;
+            this.attrMap = attrMap;
+        }
+
+        public String getSystemid() {
+            return systemid;
+        }
+
+        public void setSystemid(String systemid) {
+            this.systemid = systemid;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+        public void setType(String type) {
+            this.type = type;
+        }
+
+        public Map<String, String> getAttrMap() {
+            return attrMap;
+        }
+
+        public void setAttrMap(Map<String, String> attrMap) {
+            this.attrMap = attrMap;
+        }
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreAttrMappingSeviceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreAttrMappingSeviceImpl.java
new file mode 100644
index 0000000..99e4da7
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/DockingPreAttrMappingSeviceImpl.java
@@ -0,0 +1,529 @@
+package org.springblade.code.service.impl;
+
+
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.exception.VciBaseException;
+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.OsEnumItemVO;
+import com.vci.web.redis.RedisService;
+import com.vci.web.service.OsEnumServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.dao.DockingPreAttrMappingDaoI;
+import org.springblade.code.dao.DockingPreAttrRangeDaoI;
+import org.springblade.code.dto.DockingPreAttrMappingDTO;
+import org.springblade.code.dto.DockingPreAttrRangeDTO;
+import org.springblade.code.model.DockingPreAttrMappingDO;
+import org.springblade.code.model.DockingPreAttrRangeDO;
+import org.springblade.code.service.CodeClassifyTemplateAttrServiceI;
+import org.springblade.code.service.DockingPreAttrMappingSeviceI;
+import org.springblade.code.service.MdmEngineServiceI;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateVO;
+import org.springblade.code.vo.pagemodel.DockingPreAttrMappingVO;
+import org.springblade.code.vo.pagemodel.DockingPreAttrRangeVO;
+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.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class DockingPreAttrMappingSeviceImpl implements DockingPreAttrMappingSeviceI {
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 闆嗘垚灞炴�ф槧灏勯厤缃湇鍔�
+     */
+    @Resource
+    private DockingPreAttrMappingDaoI dockingPreAttrMappingDaoI;
+    /**
+     * 闆嗘垚灞炴�у彇鍊艰寖鍥撮厤缃湇鍔�
+     */
+    @Resource
+    private DockingPreAttrRangeDaoI dockingPreAttrRangeDODaoI;
+    /**
+     * 鍒嗙被鎿嶄綔鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyServiceImpl codeClassifyService;
+    /**
+     * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+     */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+     * 缂撳瓨鏈嶅姟
+     */
+    @Autowired
+    private RedisService redisService;
+
+    /**
+     * 涓绘暟鎹紩鎿庣殑鏈嶅姟
+     */
+    @Autowired
+    private MdmEngineServiceI engineService;
+    /**
+     *鏋氫妇鏈嶅姟
+     */
+    @Autowired
+    private OsEnumServiceI osEnumService;
+    @Autowired
+    private CodeClassifyTemplateAttrServiceI codeClassifyTemplateAttrServiceI;
+
+    /***
+     * 灞炴�ф槧灏勫垪琛�
+     * @param conditionMap
+     * @param pageHelper
+     * @param type
+     * @return
+     * @throws VciBaseException
+     */
+    @Override
+    public DataGrid<DockingPreAttrMappingVO> gridAttrMappings(String clsfId, int type, Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+
+        }
+        VciBaseUtil.alertNotNull(clsfId,"鍒嗙被涓婚敭");
+        VciBaseUtil.alertNotNull(type,"鎿嶄綔绫诲瀷");
+        //VciBaseUtil.alertNotNull(templateOid,"妯℃澘涓婚敭");
+        if(conditionMap==null){
+            conditionMap=new HashMap<>();
+        }
+
+        /***
+         *  1.棣栧厛鍘绘ā鏉块噷鏌ヨ鏄惁鏈夊鍒犲睘鎬�
+         *  2.濡傛灉鏈夌殑璇濋渶瑕佹牎楠屽睘鎬х殑鍚嶇О鏄惁鏈夊彉鏇�
+         */
+        List<ClientBusinessObject> tempCBO=new ArrayList<>();
+        ClientBusinessObject clssCBO=new ClientBusinessObject();
+        // List<String> templateIds = VciBaseUtil.str2List(templateOid);
+        Map<String,String> cboOidMap=new HashMap<>();
+        String btmName= MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR;
+        CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(clsfId);
+
+        if(StringUtils.isBlank(templateVO.getOid())){
+            return new DataGrid<>();
+        }
+        String templateOid=templateVO.getOid();
+        String clsfBtmName=MdmBtmTypeConstant.CODE_CLASSIFY;
+        String orderbyFiled="";
+        if(type==1) {//浠h〃鐨勬槸wrj
+            orderbyFiled="ordernum";
+            cboOidMap.put("classifytemplateoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(templateVO.getOid()) + ")");
+            btmName=MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR;
+            clsfBtmName=MdmBtmTypeConstant.CODE_CLASSIFY;
+        }else{
+            orderbyFiled="codeattrseq";
+            cboOidMap.put("classifytemplateoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(templateOid) + ")");
+            btmName=MdmBtmTypeConstant.DOCKING_PRE_JMETAATRR;
+            clsfBtmName=MdmBtmTypeConstant.DOCKING_PRE_JCLASS;
+        }
+        //鎸夋ā鏉块『搴忓睍绀哄睘鎬�
+        PageHelper tempPageHelper=new PageHelper();
+        tempPageHelper = new PageHelper(-1);
+        tempPageHelper.addDefaultAsc(orderbyFiled);
+        tempCBO = boService.queryCBO(btmName,cboOidMap,tempPageHelper);
+        if(CollectionUtils.isEmpty(tempCBO)){
+            throw new VciBaseException("鏍规嵁妯℃澘涓婚敭鏈煡璇㈠埌鐩稿簲鐨勫睘鎬т俊鎭�");
+        }
+        clssCBO= boService.selectCBOByOid(clsfId,clsfBtmName);
+        if(clssCBO==null||StringUtils.isBlank(clssCBO.getOid())){
+            throw new VciBaseException("鏍规嵁鍒嗙被涓婚敭鏈煡璇㈠埌鍒嗙被淇℃伅");
+        }
+        pageHelper.addDefaultDesc("createTime");
+        //鏍规嵁婧愬垎绫籭d鍜屾ā鏉縤d鏌ヨ妯℃澘鏄犲皠鏁版嵁
+       // conditionMap.put("jsourceClsfId",clsfId);
+        conditionMap.put("jviewModeId", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(templateOid) + ")");
+
+        List<DockingPreAttrMappingDO> doList = dockingPreAttrMappingDaoI.selectByCondition(conditionMap,pageHelper);
+        Map<String/**涓枃鍚嶇О**/, DockingPreAttrMappingDO/**鏁版嵁瀵硅薄**/> dockingAttrmappingOidToMap = doList.stream().collect(Collectors.toMap(s -> s.getJmetaListId(), t -> t,(o1, o2)->o2));
+        List<DockingPreAttrMappingDO> newDockingPreAttrMappingDOS=new ArrayList<>();
+        ClientBusinessObject finalClssCBO = clssCBO;
+        tempCBO.stream().forEach(cbo ->{
+            DockingPreAttrMappingDO dockingPreAttrMappingDO=new DockingPreAttrMappingDO();
+            String oid=cbo.getOid();//灞炴�id
+            if(dockingAttrmappingOidToMap.containsKey(oid)){
+                dockingPreAttrMappingDO=dockingAttrmappingOidToMap.get(oid);
+            }else{
+                dockingPreAttrMappingDO.setOid(redisService.getUUIDEveryDay());
+                dockingPreAttrMappingDO.setJmetaListId(oid);//婧愮郴缁熺殑灞炴�id
+                dockingPreAttrMappingDO.setJdefaultValue("");//榛樿鍊�
+                dockingPreAttrMappingDO.setJsourceAttrKey(cbo.getId());//婧愮郴缁熷睘鎬у唴閮ㄥ悕绉�
+                dockingPreAttrMappingDO.setJsourceAttrName(cbo.getName());//婧愮郴缁熷睘鎬у悕绉�
+                dockingPreAttrMappingDO.setJsourceClsfId(clsfId);//婧愮郴缁熺殑鍒嗙被oid
+                dockingPreAttrMappingDO.setJsourceClsfName(finalClssCBO.getName());//婧愮郴缁熺殑鍒嗙被鍚嶇О
+                dockingPreAttrMappingDO.setJviewModeId(templateOid);//鏆傛椂涓嶅瓨,妯℃澘瑙嗗浘鐨刼id
+                dockingPreAttrMappingDO.setJviewModeName(templateVO.getName());//鏆傛椂涓嶅瓨锛屾ā鏉垮悕绉�
+                dockingPreAttrMappingDO.setJtargetAttrId("");//鐩爣绯荤粺灞炴�х郴id
+                dockingPreAttrMappingDO.setJtargetAttrName("");//鐩爣绯荤粺灞炴�у悕绉�
+                dockingPreAttrMappingDO.setJtargetAttrKey("");//鐩爣绯荤粺灞炴�у唴閮ㄥ��
+                dockingPreAttrMappingDO.setJtargetClsfId("");//鐩爣绯荤粺鍒嗙被oid
+            }
+            newDockingPreAttrMappingDOS.add(dockingPreAttrMappingDO);
+        } );
+
+        DataGrid<DockingPreAttrMappingVO> dataGrid=new DataGrid<DockingPreAttrMappingVO>();
+        if (!CollectionUtils.isEmpty(newDockingPreAttrMappingDOS)) {
+            dataGrid.setData(dockingPreAttrMappingDO2VOs(newDockingPreAttrMappingDOS));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingPreAttrMappingDaoI.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /***
+     * 鑾峰彇灞炴�ф灇涓�
+     * @param conditionMap
+     * @param pageHelper
+     * @return
+     * @throws VciBaseException
+     */
+    @Override
+    public DataGrid<DockingPreAttrRangeVO> gridAttrRanges(String attrOid, int type, Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+        VciBaseUtil.alertNotNull(attrOid,"灞炴�т富閿�");
+        VciBaseUtil.alertNotNull(type,"鎿嶄綔绫诲瀷");
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        if(conditionMap==null){
+            conditionMap=new HashMap<>();
+        }
+        pageHelper.addDefaultDesc("createTime");
+        conditionMap.put("jmetaListId",attrOid);
+        List<DockingPreAttrRangeDO> doList =dockingPreAttrRangeDODaoI.selectByCondition(conditionMap,pageHelper);
+        Map<String/**鏋氫妇鍐呴儴鍚嶇О**/, DockingPreAttrRangeDO/**鏁版嵁瀵硅薄**/> dockingPreAttrRangeValueMap = doList.stream().collect(Collectors.toMap(s -> s.getJnumTextValue(), t -> t,(o1, o2)->o2));
+        CodeClassifyTemplateAttrVO codeClassifyTemplateAttrVO= codeClassifyTemplateAttrServiceI.getObjectByOid(attrOid);
+        String attrkey= codeClassifyTemplateAttrVO.getId();
+        Map<String,String> cboOidMap=new HashMap<>();
+        List<DockingPreAttrRangeDO> newDockingPreAttrRangeDO=new ArrayList<>();
+        if(type==1){
+            List<OsEnumItemVO> osEnumItemVOList= osEnumService.listEnumByAttriteKey(attrkey);
+            if(!CollectionUtils.isEmpty(osEnumItemVOList)) {
+                osEnumItemVOList.stream().forEach(osEnumItemVO -> {
+                    DockingPreAttrRangeDO dockingPreAttrRangeDO = dockingPreAttrRangeValueMap.get(osEnumItemVO.getId());
+                    if (!dockingPreAttrRangeValueMap.containsKey(osEnumItemVO.getId())) {
+                        dockingPreAttrRangeDO = new DockingPreAttrRangeDO();
+                        dockingPreAttrRangeDO.setOid(redisService.getUUIDEveryDay());
+                        dockingPreAttrRangeDO.setJmetaListId(attrOid);//灞炴�id
+                        dockingPreAttrRangeDO.setJnumText(osEnumItemVO.getName());//灞炴�ф灇涓炬樉绀哄��
+                        dockingPreAttrRangeDO.setJnumTextValue(osEnumItemVO.getId());//鏋氫妇鍐呴儴鍊�
+                        dockingPreAttrRangeDO.setJtargeNumText("");//閰嶇疆鐨勬樉绀哄��
+                        dockingPreAttrRangeDO.setJtargeNumTextValue("");//閰嶇疆鐨勫唴閮ㄥ��
+                    }
+                    newDockingPreAttrRangeDO.add(dockingPreAttrRangeDO);
+                });
+            }
+        }
+        DataGrid<DockingPreAttrRangeVO> dataGrid=new DataGrid<>();
+        if (!CollectionUtils.isEmpty(newDockingPreAttrRangeDO)) {
+            dataGrid.setData(dockingPreAttrRangeDO2VOs(newDockingPreAttrRangeDO));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(dockingPreAttrRangeDODaoI.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /***
+     *淇濆瓨灞炴�ф槧灏勯厤缃粍浠�
+     * @param dockingPreAttrMappingDTOS 灞炴�ф槧灏勯厤缃暟鎹紶杈撳璞�
+     * @return
+     * @throws VciBaseException
+     */
+    @Override
+    public  List<DockingPreAttrMappingVO> batchAddSave(List<DockingPreAttrMappingDTO> dockingPreAttrMappingDTOS) throws VciBaseException {
+        List<DockingPreAttrMappingVO> dockingPreAttrMappingVOS=new ArrayList<>();
+       if(CollectionUtils.isEmpty(dockingPreAttrMappingDTOS)){
+           return new ArrayList<>();
+       }
+        /**
+         * 1.浼犻�掕繃鏉ョ殑鏈夊彲鑳戒富鏁版嵁妯℃澘鏂板灞炴�э紝杩欐牱鐨勯渶瑕佹坊鍔狅紝涔熸湁鍙兘鍒犻櫎鐨勫睘鎬э紝杩欐牱鐨勬槧灏勯渶瑕佸垹闄�
+         * 涔熸湁鏇存柊鐨勮繖鏍峰垯鏇存柊
+         */
+        List<DockingPreAttrMappingDO> newDockingPreAttrMappingDOS=new ArrayList<>();
+        List<String>oidList=new ArrayList<>();
+        List<String>attrIdList=new ArrayList<>();
+        List<String> attributeOidList=new ArrayList<>();
+        List<DockingPreAttrRangeDO> newDockingPreAttrRangeDTOList=new ArrayList<>();
+        dockingPreAttrMappingDTOS.stream().forEach(dockingPreAttrMappingDTO -> {
+            List<DockingPreAttrRangeDTO>dockingPreAttrRangeDTOList=dockingPreAttrMappingDTO.getDockingPreAttrRangeDTOS();
+            DockingPreAttrMappingDO dockingPreAttrMappingDO=new DockingPreAttrMappingDO();
+            oidList.add(dockingPreAttrMappingDTO.getOid());
+            if(!CollectionUtils.isEmpty(dockingPreAttrRangeDTOList)) {
+                attrIdList.add(dockingPreAttrMappingDTO.getJmetaListId());
+                List<DockingPreAttrRangeDO> dockingPreAttrRangeDOList = dockingPreAttrRangeDTO2DOs(dockingPreAttrRangeDTOList);
+                newDockingPreAttrRangeDTOList.addAll(dockingPreAttrRangeDOList);
+            }
+            BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreAttrMappingDTO, dockingPreAttrMappingDO);
+            newDockingPreAttrMappingDOS.add(dockingPreAttrMappingDO);
+        });
+        List<DockingPreAttrRangeDO> dockingPreAttrRangeDOList=new ArrayList<>();
+        if(!CollectionUtils.isEmpty(attrIdList)) {
+            //鑾峰彇瀛樺湪鐨勫睘鎬у彇鍊艰寖鍥�.
+            dockingPreAttrRangeDOList = dockingPreAttrRangeDODaoI.selectByAttrOid(StringUtils.join(attrIdList, ","));
+        }
+        //鑾峰彇瀛樺湪鐨勫睘鎬ф槧灏�.
+        List<DockingPreAttrMappingDO> dataAttrMapping = dockingPreAttrMappingDaoI.selectByOid(StringUtils.join(oidList, ","));
+        Map<String/**oid**/,DockingPreAttrMappingDO/**灞炴�у璞�**/> allSaveAttrMappingMap = newDockingPreAttrMappingDOS.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t,(o1, o2)->o2));
+        Map<String/**oid**/,DockingPreAttrMappingDO/**瀵硅薄**/> oldAttrMappingMap =dataAttrMapping.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t,(o1, o2)->o2));
+
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+        BatchCBO batchCbos = new BatchCBO();
+        //闇�瑕佹柊澧炵殑灞炴�ф槧灏�
+        List<DockingPreAttrMappingDO> needSaveCboList = newDockingPreAttrMappingDOS.stream().filter(cbo -> {
+            String oid =cbo.getOid();
+            return !oldAttrMappingMap.containsKey(oid);
+        }).collect(Collectors.toList());
+        if(needSaveCboList.size()>0) {
+            BatchCBO addCOB = dockingPreAttrMappingDaoI.batchInsert(needSaveCboList);
+            batchCbos.copyFromOther(addCOB);
+        }
+        Map<String/**oid**/,DockingPreAttrMappingDO/**瀵硅薄**/> saveAttrMappingMap = needSaveCboList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t,(o1, o2)->o2));
+        //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛岄渶瑕佹洿鏂扮殑灞炴�ф槧灏�
+        List<DockingPreAttrMappingDO> needEditCboList = newDockingPreAttrMappingDOS.stream().filter(cbo -> {
+            String oid =cbo.getOid();
+            return !saveAttrMappingMap.containsKey(oid);
+        }).collect(Collectors.toList());
+        if(needEditCboList.size()>0) {
+            List<DockingPreAttrMappingDO> editCboList=new ArrayList<>();
+            needEditCboList.stream().forEach(cbo->{
+                String oid=cbo.getOid();
+                if(oldAttrMappingMap.containsKey(oid)){
+                    DockingPreAttrMappingDO dockingPreAttrMappingDO=  oldAttrMappingMap.get(oid);
+                    dockingPreAttrMappingDO.setJtargetAttrKey(cbo.getJtargetAttrKey());
+                    dockingPreAttrMappingDO.setJtargetAttrName(cbo.getJtargetAttrName());
+                    dockingPreAttrMappingDO.setJtargetAttrId(cbo.getJtargetAttrId());
+                    dockingPreAttrMappingDO.setJtargetClsfId(cbo.getJtargetClsfId());
+                    dockingPreAttrMappingDO.setJdefaultValue(cbo.getJdefaultValue());
+                    editCboList.add(dockingPreAttrMappingDO);
+                }
+            });
+            BatchCBO editCOB = dockingPreAttrMappingDaoI.batchUpdate(editCboList);
+            batchCbos.copyFromOther(editCOB);
+        }
+        //闇�瑕佸垹闄ょ殑灞炴�ф槧灏�
+        List<String> deleteIdList=new ArrayList<>();
+         dataAttrMapping.stream().forEach(cbo -> {
+            String oid =cbo.getOid();
+            if(!allSaveAttrMappingMap.containsKey(oid)){
+                deleteIdList.add(oid);
+            }
+        });
+        if(deleteIdList.size()>0) {
+            BatchCBO deleteCBO = dockingPreAttrMappingDaoI.batchDeleteByOids(deleteIdList);
+            batchCbos.copyFromOther(deleteCBO);
+        }
+        //鍙栧�艰寖鍥村鐞�
+        if(!CollectionUtils.isEmpty(newDockingPreAttrRangeDTOList)) {
+            Map<String/**oid**/, DockingPreAttrRangeDO/**灞炴�у璞�**/> allSaveAttrAttrRangeDOMap =newDockingPreAttrRangeDTOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t, (o1, o2) -> o2));
+            Map<String/**oid**/, DockingPreAttrRangeDO/**瀵硅薄**/> oldSaveAttrAttrRangeDOMap = dockingPreAttrRangeDOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t, (o1, o2) -> o2));
+            //闇�瑕佹柊澧炵殑灞炴�у彇鍊艰寖鍥�
+            List<DockingPreAttrRangeDO> needSaveRangeCboList = newDockingPreAttrRangeDTOList.stream().filter(cbo -> {
+                String oid = cbo.getOid();
+                return !oldSaveAttrAttrRangeDOMap.containsKey(oid);
+            }).collect(Collectors.toList());
+            if(needSaveRangeCboList.size()>0) {
+                BatchCBO addRangeCOB = dockingPreAttrRangeDODaoI.batchInsert(needSaveRangeCboList);
+                batchCbos.copyFromOther(addRangeCOB);
+            }
+            //闇�瑕佹洿鏂扮殑灞炴�у彇鍊艰寖鍥�
+            Map<String/**oid**/, DockingPreAttrRangeDO/**瀵硅薄**/> saveRangeMap = needSaveRangeCboList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t, (o1, o2) -> o2));
+            List<DockingPreAttrRangeDO> needEditRangeCboList = newDockingPreAttrRangeDTOList.stream().filter(cbo -> {
+                String oid = cbo.getOid();
+                return !saveRangeMap.containsKey(oid);
+            }).collect(Collectors.toList());
+
+            if(needEditRangeCboList.size()>0) {
+                List<DockingPreAttrRangeDO> editCboList=new ArrayList<>();
+                needEditRangeCboList.stream().forEach(cbo->{
+                        String oid=cbo.getOid();
+                        if(oldSaveAttrAttrRangeDOMap.containsKey(oid)){
+                            DockingPreAttrRangeDO dockingPreAttrRangeDO=  oldSaveAttrAttrRangeDOMap.get(oid);
+                            dockingPreAttrRangeDO.setJtargeNumText(cbo.getJtargeNumText());
+                            dockingPreAttrRangeDO.setJtargeNumTextValue(cbo.getJtargeNumTextValue());
+                            editCboList.add(dockingPreAttrRangeDO);
+                        }
+                    });
+                BatchCBO editRangeCOB = dockingPreAttrRangeDODaoI.batchUpdate(editCboList);
+                batchCbos.copyFromOther(editRangeCOB);
+            }
+            //闇�瑕佸垹闄ょ殑灞炴�у彇鍊艰寖鍥�
+            List<String> deleteRangeIdList = new ArrayList<>();
+            dockingPreAttrRangeDOList.stream().forEach(cbo -> {
+                String oid = cbo.getOid();
+                if (!allSaveAttrAttrRangeDOMap.containsKey(oid)) {
+                    deleteRangeIdList.add(oid);
+                }
+            });
+            if(deleteIdList.size()>0) {
+                BatchCBO deleteRangeCBO = dockingPreAttrRangeDODaoI.batchDeleteByOids(deleteIdList);
+                batchCbos.copyFromOther(deleteRangeCBO);
+            }
+        }
+
+        WebUtil.setPersistence(true);
+        this.boService.persistenceBatch(batchCbos);//鏇存敼鏁版嵁
+        return dockingPreAttrMappingVOS;
+    }
+
+    /***
+     * 鏍规嵁鏉′欢鏌ヨ灞炴�ф槧灏勪俊鎭�
+     * @param conditionMap
+     * @return
+     * @throws VciBaseException
+     */
+    @Override
+    public List<DockingPreAttrMappingVO> selectAttrMappings(Map<String, String> conditionMap) throws VciBaseException {
+        List<DockingPreAttrMappingVO> dockingPreAttrMappingVOList=new ArrayList<>();
+        VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(DockingPreAttrMappingDO.class);
+        queryWrapperForDO.setConditionMap(conditionMap);
+        List<DockingPreAttrMappingDO> dockingPreAttrMappingDOS=dockingPreAttrMappingDaoI.selectByWrapper(queryWrapperForDO);
+       List<String> attributOids=new ArrayList<>();
+        if(!CollectionUtils.isEmpty(dockingPreAttrMappingDOS)){
+            dockingPreAttrMappingDOS.stream().forEach(dockingPreAttrMappingDO -> {
+              String attrOid= dockingPreAttrMappingDO.getJmetaListId();
+                attributOids.add(attrOid);
+            });
+            dockingPreAttrMappingVOList= dockingPreAttrMappingDO2VOs(dockingPreAttrMappingDOS);
+            Map<String/**oid**/,DockingPreAttrMappingVO/**瀵硅薄**/> attrMappingMap = dockingPreAttrMappingVOList.stream().collect(Collectors.toMap(s -> s.getJmetaListId(), t -> t,(o1, o2)->o2));
+
+            VciQueryWrapperForDO queryWrapperForDO2 = new VciQueryWrapperForDO(DockingPreAttrRangeDO.class);
+            Map<String,String> condtionMap=new HashMap<>();
+            condtionMap.put("jmetaListId", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(attributOids.toArray(new String[]{})) + ")");
+            queryWrapperForDO.setConditionMap(conditionMap);
+           List<DockingPreAttrRangeDO> dockingPreAttrRangeDOS=dockingPreAttrRangeDODaoI.selectByWrapper(queryWrapperForDO2);
+           Map<String,List<DockingPreAttrRangeVO>> attribueOidMap=new HashMap<>();
+           if(!CollectionUtils.isEmpty(dockingPreAttrRangeDOS)){
+               dockingPreAttrRangeDOS.stream().forEach(dockingPreAttrRangeDO -> {
+                  String attributeOid= dockingPreAttrRangeDO.getJmetaListId();
+                  List<DockingPreAttrRangeVO> dockingPreAttrRangeVOS=new ArrayList<>();
+                   dockingPreAttrRangeVOS.add(dockingPreAttrRangeDO2VO(dockingPreAttrRangeDO));
+                  if(attribueOidMap.containsKey(attributeOid)){
+                      List<DockingPreAttrRangeVO> oldDockingPreAttrRangeVOS= attribueOidMap.get(attributeOid);
+                      dockingPreAttrRangeVOS.addAll(oldDockingPreAttrRangeVOS);
+                  }
+                   attribueOidMap.put(attributeOid,dockingPreAttrRangeVOS);
+               });
+           }
+           if(!CollectionUtils.isEmpty(attribueOidMap)){
+               attribueOidMap.keySet().forEach(attoributeOid->{
+                   List<DockingPreAttrRangeVO> dockingPreAttrRangeVOList= attribueOidMap.get(attoributeOid);
+                   if(attrMappingMap.containsKey(attoributeOid)){
+                       DockingPreAttrMappingVO dockingPreAttrMappingVO=    attrMappingMap.get(attoributeOid);
+                       dockingPreAttrMappingVO.setDockingPreAttrRangeVOS(dockingPreAttrRangeVOList);
+                   }
+               });
+           }
+        }
+        return dockingPreAttrMappingVOList;
+    }
+
+    /***
+     * 灞炴�ф灇涓惧璞¤浆鎹�
+     * @param doList
+     * @return
+     */
+    private List<DockingPreAttrRangeDO> dockingPreAttrRangeDTO2DOs(List<DockingPreAttrRangeDTO> doList) {
+        List<DockingPreAttrRangeDO> voList = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(doList)){
+            for(DockingPreAttrRangeDTO s: doList){
+                DockingPreAttrRangeDO doBO =  dockingPreAttrRangeDTO2DO(s);
+                if(doBO != null){
+                    voList.add(doBO);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /***
+     * 灞炴�ф灇涓炬槧灏�
+     * @param dockingPreAttrRangeDTO
+     * @return
+     */
+    private DockingPreAttrRangeDO dockingPreAttrRangeDTO2DO(DockingPreAttrRangeDTO dockingPreAttrRangeDTO) {
+        DockingPreAttrRangeDO dockingPreAttrRangeDO = new DockingPreAttrRangeDO();
+        if(dockingPreAttrRangeDTO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreAttrRangeDTO,dockingPreAttrRangeDO);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+        }
+        return dockingPreAttrRangeDO;
+    }
+
+    /***
+     * 灞炴�ф灇涓惧璞¤浆鎹�
+     * @param doList
+     * @return
+     */
+    private List<DockingPreAttrRangeVO> dockingPreAttrRangeDO2VOs(List<DockingPreAttrRangeDO> doList) {
+        List<DockingPreAttrRangeVO> voList = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(doList)){
+            for(DockingPreAttrRangeDO s: doList){
+                DockingPreAttrRangeVO vo =  dockingPreAttrRangeDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /***
+     * 灞炴�ф灇涓炬槧灏�
+     * @param dockingPreAttrRangeDO
+     * @return
+     */
+    private DockingPreAttrRangeVO dockingPreAttrRangeDO2VO(DockingPreAttrRangeDO dockingPreAttrRangeDO) {
+        DockingPreAttrRangeVO vo = new DockingPreAttrRangeVO();
+        if(dockingPreAttrRangeDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreAttrRangeDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+        }
+        return vo;
+    }
+
+    /***
+     * 灞炴�ф槧灏勫璞¤浆鎹�
+     * @param doList
+     * @return
+     */
+    private List<DockingPreAttrMappingVO> dockingPreAttrMappingDO2VOs(List<DockingPreAttrMappingDO> doList) {
+        List<DockingPreAttrMappingVO> voList = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(doList)){
+            for(DockingPreAttrMappingDO s: doList){
+                DockingPreAttrMappingVO vo =  dockingPreAttrMappingDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    private DockingPreAttrMappingVO dockingPreAttrMappingDO2VO(DockingPreAttrMappingDO dockingPreAttrMappingDO) {
+        DockingPreAttrMappingVO vo = new DockingPreAttrMappingVO();
+        if(dockingPreAttrMappingDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(dockingPreAttrMappingDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+        }
+        return vo;
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmEngineServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmEngineServiceImpl.java
new file mode 100644
index 0000000..c027e6d
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmEngineServiceImpl.java
@@ -0,0 +1,2753 @@
+package org.springblade.code.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.corba.common.VCIError;
+import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
+import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant;
+import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.frameworkcore.pagemodel.SmUserVO;
+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.constant.RegExpConstant;
+import com.vci.starter.web.enumpck.BooleanEnum;
+import com.vci.starter.web.enumpck.UserSecretEnum;
+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.toolmodel.DateConverter;
+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.dto.BaseModelDTO;
+import com.vci.web.pageModel.KeyValue;
+import com.vci.web.pageModel.*;
+import com.vci.web.service.*;
+import com.vci.web.service.impl.FormulaServiceImpl;
+import com.vci.web.service.impl.OsEnumServiceImpl;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.code.bo.CodeClassifyFullInfoBO;
+import org.springblade.code.bo.CodeTemplateAttrSqlBO;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.dto.CodeDeleteBatchDTO;
+import org.springblade.code.dto.CodeOrderDTO;
+import org.springblade.code.enumpack.CodeLevelTypeEnum;
+import org.springblade.code.enumpack.CodeSecTypeEnum;
+import org.springblade.code.enumpack.CodeUseButtonPositionTypeEnum;
+import org.springblade.code.lifecycle.CodeDefaultLC;
+import org.springblade.code.model.CodeClassifyTemplateAttrDO;
+import org.springblade.code.model.CodeClassifyTemplateDO;
+import org.springblade.code.service.*;
+import org.springblade.code.utils.DateUtils;
+import org.springblade.code.vo.pagemodel.*;
+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 java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.stream.Collectors;
+
+import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
+import static com.vci.web.constant.EnumIdConstant.LC_STATUS_SUBFIX;
+import static org.springblade.code.constant.MdmEngineConstant.*;
+
+/**
+ * 涓绘暟鎹紩鎿庢湇鍔�
+ *
+ * @author weidy
+ * @date 2022-2-22
+ */
+@Service
+public class MdmEngineServiceImpl implements MdmEngineServiceI {
+
+    /**
+     * 蹇呰緭
+     */
+    public static final String REQUIRED_CHAR = "*";
+    /**
+     * 鏇挎崲瀛楃
+     */
+    public static final String SPECIAL_CHAR  = "VCI";
+    /**
+     * 妯℃澘鐨勬湇鍔�
+     */
+    @Autowired
+    private CodeClassifyTemplateServiceI templateService;
+
+    /**
+     * 妯℃澘鎸夐挳鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyTemplateButtonServiceI templateButtonService;
+
+    /**
+     * 鍒嗙被鐨勬湇鍔�
+     */
+    @Autowired
+    private CodeClassifyServiceI classifyService;
+
+    /**
+     * 涓氬姟鏁版嵁鐨勬湇鍔�
+     */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+     * 鍏紡鐨勬湇鍔�
+     */
+    @Autowired
+    private FormulaServiceImpl formulaService;
+
+    /**
+     * 鏋氫妇鐨勬湇鍔�
+     */
+    @Autowired
+    private OsEnumServiceI enumService;
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+     */
+    @Autowired
+    private OsLifeCycleServiceI lifeCycleService;
+
+    /**
+     * 缂栫爜瑙勫垯鐨勬湇鍔�
+     */
+    @Autowired
+    private CodeRuleServiceI ruleService;
+
+    /**
+     * 鍒嗙被鐮佸�肩殑鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyValueServiceI classifyValueService;
+
+    /**
+     * 鍏抽敭灞炴�х殑閰嶇疆
+     */
+    @Autowired
+    private CodeKeyAttrRepeatRuleServiceI keyRuleService;
+
+
+    /**
+     * 鍔熻兘鎸夐挳鐨勬湇鍔�
+     */
+    @Autowired
+    private SmOperationServiceI operationService;
+
+    /**
+     * 鐢熸垚缂栫爜鐨勬湇鍔�
+     */
+    @Autowired
+    private MdmProductCodeServiceI productCodeService;
+
+    /**
+     * 闃舵鐨勬湇鍔�
+     */
+    @Autowired
+    private CodePhaseAttrServiceI phaseAttrService;
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 瀵嗙骇鐨勬湇鍔�
+     */
+    @Autowired
+    private WebSecretServiceI secretService;
+
+    /**
+     * 鍙緭鍙��
+     */
+    @Autowired
+    private BdSelectInputCharServiceI charService;
+
+    /**
+     * 瀵硅薄鐨勬搷浣�
+     */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 鐩镐技椤规煡璇㈣鍒�
+     */
+    @Autowired
+    private CodeResembleRuleServiceI resembleRuleService;
+
+    /**
+     * 灞炴�х殑鏈嶅姟
+     */
+    @Autowired
+    private OsAttributeServiceI attributeService;
+
+    /**
+     * 鐢ㄦ埛鏌ヨ鐨勬湇鍔�
+     */
+    @Autowired
+    private SmUserQueryServiceI userQueryService;
+
+    /**
+     * 妯℃澘灞炴�х殑鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyTemplateAttrServiceI templateAttrService;
+
+    /**
+     * 鎷疯礉鐨勭増鏈�
+     */
+    public static final String COPY_FROM_VERSION = "copyfromversion";
+
+
+    /**
+     * 浣跨敤鍒嗙被涓婚敭鑾峰彇椤甸潰鐨勫唴瀹癸紝鍖呭惈鎸夐挳
+     *
+     * @param codeClassifyOid 涓婚搴撳垎绫讳富閿�
+     * @param functionId      鍔熻兘鐨勭紪鍙�
+     * @return UI鐩稿叧鐨勫唴瀹�
+     */
+    @Override
+    public MdmUIInfoVO getUIInfoByClassifyOid(String codeClassifyOid, String functionId) {
+        VciBaseUtil.alertNotNull(codeClassifyOid, "涓婚搴撳垎绫讳富閿�");
+        MdmUIInfoVO uiInfoVO = getTableDefineByTemplateVO(getUsedTemplateByClassifyOid(codeClassifyOid));
+        uiInfoVO.setLeaf(classifyService.countChildrenByClassifyOid(codeClassifyOid) == 0);
+        if (StringUtils.isNotBlank(functionId) && !"~".equalsIgnoreCase(functionId)) {
+            List<SmOperationVO> operationVOS = operationService.listButtonByFunctionId(functionId);
+            if (operationVOS == null) {
+                operationVOS = new ArrayList<>();
+            }
+            //鏌ヨ鎵╁睍鎸夐挳
+            List<CodeButtonVO> buttonVOS = listButtonInToolbarByClassifyOid(codeClassifyOid);
+            if (!CollectionUtils.isEmpty(buttonVOS)) {
+                for (int i = 0; i < buttonVOS.size(); i++) {
+                    CodeButtonVO buttonVO = buttonVOS.get(i);
+                    SmOperationVO operationVO = new SmOperationVO();
+                    operationVO.setModuleNo(functionId);
+                    operationVO.setUniqueFlag(buttonVO.getId());
+                    operationVO.setName(buttonVO.getName());
+                    operationVO.setAlias(operationVO.getName());
+                    operationVO.setExecuteJs(buttonVO.getExecutejs());
+                    operationVO.setIconCls(buttonVO.getIconcls());
+                    operationVOS.add(operationVO);
+                }
+            }
+            uiInfoVO.setButtons(operationVOS);
+        }
+        return uiInfoVO;
+    }
+
+
+    /**
+     * 浣跨敤涓婚搴撳垎绫昏幏鍙杣i鐩稿叧鐨勫唴瀹癸紙涓嶅寘鍚寜閽級
+     *
+     * @param codeClassifyOid 涓婚搴撶殑鍒嗙被鐨勪富閿�
+     * @return UI鐩稿叧鐨勫唴瀹�
+     */
+    @Override
+    public MdmUIInfoVO getTableDefineByClassifyOid(String codeClassifyOid) {
+        VciBaseUtil.alertNotNull(codeClassifyOid, "涓婚搴撳垎绫讳富閿�");
+        return getTableDefineByTemplateVO(getUsedTemplateByClassifyOid(codeClassifyOid));
+    }
+
+    /**
+     * 浣跨敤妯℃澘鏄剧ず瀵硅薄杞崲涓鸿〃鏍肩殑淇℃伅锛堝寘鍚墿灞曠殑鎸夐挳锛�
+     *
+     * @param templateVO 妯℃澘鐨勪俊鎭�
+     * @return UI鐩稿叧鐨勫唴瀹癸紙浠呭寘鍚〃鏍间俊鎭級
+     */
+    private MdmUIInfoVO getTableDefineByTemplateVO(CodeClassifyTemplateVO templateVO) {
+        //鍏堢湅杩欎釜鍒嗙被鏈韩鏄惁鏈夋ā鏉�
+        MdmUIInfoVO uiInfoVO = new MdmUIInfoVO();
+        uiInfoVO.setTemplateVO(templateVO);
+        //鎴戜滑闇�瑕佸皢妯℃澘杞崲涓鸿〃鏍肩浉鍏崇殑鏄剧ず淇℃伅
+        uiInfoVO.setTableDefineVO(wrapperTableDefineByTemplate(uiInfoVO.getTemplateVO(),false));
+        //闇�瑕佸幓鐪嬫墿灞曠殑鎸夐挳,鍙湁鍒楄〃閲岄潰鏈韩鎵嶆坊鍔犺繘鍘伙紝宸ュ叿鏍忎笂鐨勫崟鐙幏鍙�
+        List<CodeClassifyTemplateButtonVO> buttonVOS = templateButtonService.listButtonByTemplateOid(templateVO.getOid(), true);
+        if (!CollectionUtils.isEmpty(buttonVOS)) {
+            //鎴戜滑瑕佸垎寮�涓烘寜閽紝杩樻槸鍦ㄦ搷浣滃垪閲岄潰
+            List<CodeClassifyTemplateButtonVO> tableButtonVOs = buttonVOS.stream().filter(s -> CodeUseButtonPositionTypeEnum.TABLE.getValue().equalsIgnoreCase(s.getButtonuse())).collect(Collectors.toList());
+            if (!CollectionUtils.isEmpty(tableButtonVOs)) {
+                UITableFieldVO optionFieldVO = new UITableFieldVO();
+                optionFieldVO.setField("options");
+                optionFieldVO.setTitle("鎿嶄綔");
+                optionFieldVO.setFieldType("text");
+                optionFieldVO.setOptionField(true);
+                List<KeyValue> buttons = new ArrayList<>();
+                Map<String, String> optionJsMap = new HashMap<>();
+                tableButtonVOs.stream().forEach(buttonVO -> {
+                    KeyValue kv = new KeyValue();
+                    kv.setKey(buttonVO.getId());
+                    kv.setValue(buttonVO.getClassifybuttonoidName());
+                    kv.setAttributes(VciBaseUtil.objectToMap(buttonVO));
+                    buttons.add(kv);
+                    optionJsMap.put(buttonVO.getId(), buttonVO.getButtonVO().getExecutejs());
+                });
+                optionFieldVO.setOptionJsMap(optionJsMap);
+                uiInfoVO.getTableDefineVO().getCols().get(0).add(optionFieldVO);
+            }
+        }
+        return uiInfoVO;
+    }
+
+    /**
+     * 浣跨敤鍒嗙被鐨勪富閿幏鍙栧彲浠ヤ娇鐢ㄧ殑妯℃澘瀵硅薄
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 妯℃澘鐨勬樉绀哄璞�
+     */
+    @Override
+    public CodeClassifyTemplateVO getUsedTemplateByClassifyOid(String codeClassifyOid) {
+        return getUsedTemplateByClassifyOid(codeClassifyOid, true);
+    }
+
+    /**
+     * 浣跨敤鍒嗙被鐨勪富閿幏鍙栧彲浠ヤ娇鐢ㄧ殑妯℃澘瀵硅薄
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param hasAttr         鍖呭惈灞炴��
+     * @return 妯℃澘鐨勬樉绀哄璞�
+     */
+    @Override
+    public CodeClassifyTemplateVO getUsedTemplateByClassifyOid(String codeClassifyOid, boolean hasAttr) {
+        List<CodeClassifyTemplateVO> templateVOs = templateService.listReleaseTemplateByClassifyOid(codeClassifyOid, hasAttr);
+        return templateVOs.get(templateVOs.size() - 1);
+    }
+
+    /**
+     * 浣跨敤妯℃澘鐨勪富閿幏鍙栬〃鍗曠殑淇℃伅
+     *
+     * @param codeClassifyTemplateOid 妯℃澘鐨勪富閿�
+     * @return ui鐩稿叧鐨勫唴瀹�
+     */
+    @Override
+    public MdmUIInfoVO getFormDefineByTemplateOid(String codeClassifyTemplateOid) {
+        return getFormDefineByTemplateOid(codeClassifyTemplateOid, null);
+    }
+
+    /**
+     * 浣跨敤妯℃澘鐨勪富閿幏鍙栬〃鍗曠殑淇℃伅
+     *
+     * @param codeClassifyTemplateOid 妯℃澘鐨勪富閿�
+     * @param codeClassifyOid         浣跨敤妯℃澘鐨勫垎绫讳富閿�
+     * @return ui鐩稿叧鐨勫唴瀹�
+     */
+    @Override
+    public MdmUIInfoVO getFormDefineByTemplateOid(String codeClassifyTemplateOid, String codeClassifyOid) {
+        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(codeClassifyTemplateOid);
+        MdmUIInfoVO uiInfoVO = new MdmUIInfoVO();
+        uiInfoVO.setTemplateVO(templateVO);
+        uiInfoVO.setFormDefineVO(wrapperFormDefineByTemplate(templateVO, codeClassifyOid));
+        wrapperResemble(templateVO, uiInfoVO);
+        return uiInfoVO;
+    }
+
+    /**
+     * 灏佽鐩镐技椤规煡璇㈢殑鍒楄〃
+     *
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞�
+     * @param uiInfoVO   椤甸潰鐨勪俊鎭�
+     */
+    private void wrapperResemble(CodeClassifyTemplateVO templateVO, MdmUIInfoVO uiInfoVO) {
+        List<CodeClassifyTemplateAttrVO> resembleAttrList = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getSamerepeatattrflag())
+                || VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(s.getId())).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(resembleAttrList) && resembleAttrList.size() > 1) {
+            UITableDefineVO resembleTable = new UITableDefineVO();
+            resembleTable.setOid(templateVO.getOid());
+            resembleTable.setBtmType(templateVO.getBtmTypeId());
+            resembleTable.setDisplayQueryArea(false);
+            resembleTable.setPageVO(new UITablePageVO());
+            //澶勭悊鎵�鏈夌殑鍒楋紝杩欎釜妯℃澘娌℃湁鍚堝苟鐨勮〃澶寸殑鎯呭喌
+            List<UITableFieldVO> fieldVOList = new ArrayList<>();
+            resembleAttrList.forEach(attrVO -> {
+                UITableFieldVO tableFieldVO = templateAttr2TableField(attrVO,false);
+                tableFieldVO.setHidden(false);
+                fieldVOList.add(tableFieldVO);
+            });
+            List<List<UITableFieldVO>> cols = new ArrayList<>();
+            cols.add(fieldVOList);
+            resembleTable.setCols(cols);
+            uiInfoVO.setResembleTableVO(resembleTable);
+        }
+    }
+
+    /**
+     * 浣跨敤妯℃澘鐨勪富閿幏鍙栬〃鍗曠殑淇℃伅
+     *
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @param executionId 娴佺▼鎵цid
+     * @param processUse  娴佺▼妯℃澘鐨勭敤閫�
+     * @return ui鐩稿叧鐨勫唴瀹�
+     */
+    @Override
+    public List<String> getFieldByProcessTemplate(String templateOid, String executionId, String processUse) {
+        VciBaseUtil.alertNotNull(templateOid, "妯℃澘涓婚敭", executionId, "娴佺▼鐨勬墽琛孖d", processUse, "娴佺▼妯℃澘鐢ㄩ��");
+        while (StringUtils.countMatches(executionId, ".") > 1) {
+            executionId = executionId.substring(0, executionId.lastIndexOf("."));
+        }
+        String sql = "select distinct (t.codetempattrOidArr)\n" +
+                "from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY_PROCESS_TEMPLATE) + " t\n" +
+                "join PLFLOWINSTANCE plfi on t.ID = plfi.PLTEMPLATEPUID\n" +
+                "where plfi.PLEXECUTIONID = '" + executionId + "' and t.CLASSIFYTEMPLATEOID = '" + templateOid + "' and t.CODEPROCESSUSE = '" + processUse + "'";
+        List<ClientBusinessObject> tempAttrOidArr = boService.queryByOnlySql(sql);
+        if (CollectionUtils.isEmpty(tempAttrOidArr) || StringUtils.isBlank(tempAttrOidArr.get(0).getAttributeValue("codetempattroidarr"))) {
+            return new ArrayList<>();
+        }
+        return VciBaseUtil.str2List(tempAttrOidArr.get(0).getAttributeValue("codetempattroidarr"));
+    }
+
+    /**
+     * 浣跨敤涓婚搴撳垎绫荤殑涓婚敭鑾峰彇琛ㄥ崟鐨勪俊鎭�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return ui鐩稿叧鐨勫唴瀹�
+     */
+    @Override
+    public MdmUIInfoVO getFormDefineByClassifyOid(String codeClassifyOid) {
+        MdmUIInfoVO uiInfoVO = new MdmUIInfoVO();
+        CodeClassifyTemplateVO templateVO = getUsedTemplateByClassifyOid(codeClassifyOid);
+        uiInfoVO.setTemplateVO(templateVO);
+        uiInfoVO.setFormDefineVO(wrapperFormDefineByTemplate(templateVO, codeClassifyOid));
+        wrapperResemble(templateVO, uiInfoVO);
+        return uiInfoVO;
+    }
+
+    /**
+     * 浣跨敤鍒嗙被鐨勪富閿幏鍙栬〃鏍肩殑瀹氫箟
+     *
+     * @param codeClassifyOid 鍒嗙被涓婚敭
+     * @param phase           闃舵鐨勫悕绉�
+     * @return UI鐩稿叧鐨勪俊鎭紙浠呭寘鍚〃鍗�)
+     */
+    @Override
+    public MdmUIInfoVO getTableDefineByClassifyOid_v2(String codeClassifyOid, String phase) {
+        MdmUIInfoVO uiInfoVO = new MdmUIInfoVO();
+        CodeClassifyTemplateVO templateVO = getUsedTemplateByClassifyOid(codeClassifyOid);
+        uiInfoVO.setTemplateVO(templateVO);
+        UITableDefineVO uiTableDefineVO = wrapperTableDefineByTemplate(templateVO,true);
+        List<String> phaseAttrIdList = listPhaseAttrByClassifyOid(codeClassifyOid, phase);
+        uiTableDefineVO.getCols().stream().forEach(list -> {
+            List<UITableFieldVO> visiableTableField=new ArrayList<>();
+            if(StringUtils.isNotBlank(phase)) {
+                visiableTableField = list.stream().filter(col ->
+                        phaseAttrIdList.stream().anyMatch(s -> StringUtils.equalsIgnoreCase(col.getField(), s) ||
+                                (StringUtils.equalsIgnoreCase(col.getFieldType(), "combox") && StringUtils.equalsIgnoreCase(col.getSortField(), s))
+                                || (StringUtils.equalsIgnoreCase(col.getFieldType(), "refer") && StringUtils.equalsIgnoreCase(col.getQueryField(), s))
+                        )).collect(Collectors.toList());
+            }else{
+                visiableTableField=  list.stream().filter(col ->
+                        templateVO.getAttributes().stream().anyMatch(s ->
+                                (!s.getReadonlyflag().equalsIgnoreCase("true")&& StringUtils.equalsIgnoreCase(col.getField(), s.getId())) ||
+                                (StringUtils.equalsIgnoreCase(col.getFieldType(), "combox") && StringUtils.equalsIgnoreCase(col.getSortField(), s.getId()))
+                                || (StringUtils.equalsIgnoreCase(col.getFieldType(), "refer") && StringUtils.equalsIgnoreCase(col.getQueryField(), s.getId()))
+                        )).collect(Collectors.toList());
+            }
+
+            visiableTableField.stream().forEach(vo -> {
+                uiTableDefineVO.setHasEditor(true);
+                if ("refer".equalsIgnoreCase(vo.getFieldType())) {
+                    setReferConfig2EditConfig(vo);
+                } else if ("combox".equalsIgnoreCase(vo.getFieldType())) {
+                    setComboxConfig2EditConfig(vo);
+                } else if (StringUtils.isNotBlank(vo.getDateFormate())){
+                    vo.setEdit("date");
+                }else {
+                    vo.setEdit(vo.getFieldType());
+                }
+            });
+        });
+        uiInfoVO.setTableDefineVO(uiTableDefineVO);
+        wrapperResemble(templateVO, uiInfoVO);
+        return uiInfoVO;
+    }
+
+    /**
+     * 鍔犺浇鎴愬弬鐓х殑淇敼閰嶇疆
+     * @param vo 琛ㄦ牸瀛楁鏄剧ず瀵硅薄
+     */
+    private void setReferConfig2EditConfig(UITableFieldVO vo) {
+        if (!CollectionUtils.isEmpty(vo.getReferConfig().getWhere())){
+            vo.getReferConfig().getWhere().keySet().forEach(key -> {
+                vo.getReferConfig().getWhere().put(key, "'" + vo.getReferConfig().getWhere().get(key) + "'");
+            });
+        }
+        if (StringUtils.isNotBlank(vo.getReferConfig().getParentValue())){
+            String parentValue = vo.getReferConfig().getParentValue();
+            parentValue ="\\" +  parentValue.replaceAll("'","{vci-quote}").replaceAll("=","{vci-equals}");
+            vo.getReferConfig().setParentValue(parentValue);
+        }
+        String referConfig = vo.getReferConfig().toString()
+                .replaceAll("=",":")
+                .replaceAll("UITableCustomDefineVO","")
+                .replaceAll("UIFieldSortVO","")
+                .replaceAll("UITablePageVO","")
+                .replaceAll("UITableFieldVO","")
+                .replaceAll("UIFormReferVO","")
+                .replaceAll("\\{vci-equals}","=")
+                .replaceAll("\\{vci-quote}","\\\\'")
+                .replaceAll("'null'","null");
+        referConfig = referConfig + ",fieldMap:{" + vo.getQueryField() + ":'" + vo.getReferConfig().getValueField() + "'}";
+        vo.setEditConfig("{referConfig:" + referConfig + "}");
+        vo.setEdit(vo.getFieldType());
+    }
+
+    /**
+     * 鍔犺浇鎴愪笅鎷夋鐨勪慨鏀归厤缃�
+     * @param vo 琛ㄦ牸瀛楁鏄剧ず瀵硅薄
+     */
+    private void setComboxConfig2EditConfig(UITableFieldVO vo) {
+        vo.setEditConfig("{editable:true,comboxKey:'" + vo.getComboxKey() + "'");
+        if (!CollectionUtils.isEmpty(vo.getData())){
+            vo.setEditConfig(vo.getEditConfig()+", comboxConfig:");
+            for (int i = 0; i < vo.getData().size(); i++) {
+                KeyValue data = vo.getData().get(i);
+                if (i == vo.getData().size() -1){
+                    vo.setEditConfig(vo.getEditConfig() + "{attributes:"+data.getAttributes()+",key:'"+data.getKey()+"',value:'"+data.getValue()+"'}]}");
+                }else if (i == 0){
+                    vo.setEditConfig(vo.getEditConfig() + "{data:[{attributes:"+data.getAttributes()+",key:'"+data.getKey()+"',value:'"+data.getValue()+"'},");
+                }else{
+                    vo.setEditConfig(vo.getEditConfig() + "{attributes:"+data.getAttributes()+",key:'"+data.getKey()+"',value:'"+data.getValue()+"'},");
+                }
+            }
+            vo.setEditConfig(vo.getEditConfig() + ",valueField:'" + vo.getQueryField() + "'");
+        }
+        vo.setEditConfig(vo.getEditConfig() + "}");
+        vo.setEdit(vo.getFieldType());
+    }
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇ui鐩稿叧鐨勫唴瀹�
+     *
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @return ui鐩稿叧鐨勫唴瀹�
+     */
+    @Override
+    public MdmUIInfoVO getTableDefineByTemplateOid(String templateOid) {
+        return getTableDefineByTemplateVO(templateService.getObjectHasAttrByOid(templateOid));
+    }
+
+    /**
+     * 浣跨敤鍒嗙被涓婚敭鑾峰彇宸ュ叿鏍忎腑鐨勬寜閽俊鎭�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鎸夐挳鐨勪俊鎭紝浼氭寜鐓ф帓搴忓彿杩涜鎺掑簭
+     */
+    @Override
+    public List<CodeButtonVO> listButtonInToolbarByClassifyOid(String codeClassifyOid) {
+        CodeClassifyTemplateVO templateVO = getUsedTemplateByClassifyOid(codeClassifyOid);
+        return listButtonInToolbarByTemplateOid(templateVO.getOid());
+    }
+
+    /**
+     * 浣跨敤妯℃澘涓婚敭鑾峰彇宸ュ叿鏍忎腑鐨勬寜閽俊鎭�
+     *
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @return 鎸夐挳鐨勪俊鎭紝浼氭寜鐓ф帓搴忓彿杩涜鎺掑簭
+     */
+    @Override
+    public List<CodeButtonVO> listButtonInToolbarByTemplateOid(String templateOid) {
+        List<CodeClassifyTemplateButtonVO> buttonVOS = templateButtonService.listButtonByTemplateOid(templateOid, true);
+        if (CollectionUtils.isEmpty(buttonVOS)) {
+            return new ArrayList<>();
+        }
+        List<CodeClassifyTemplateButtonVO> toolbarButtons = buttonVOS.stream().filter(s -> CodeUseButtonPositionTypeEnum.TOOLBAR.getValue().equalsIgnoreCase(s.getButtonuse())).collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(toolbarButtons)) {
+            return new ArrayList<>();
+        }
+        List<CodeButtonVO> buttonVOList = new ArrayList<>();
+        for (int i = 0; i < toolbarButtons.size(); i++) {
+            buttonVOList.add(toolbarButtons.get(i).getButtonVO());
+        }
+        return buttonVOList;
+    }
+
+    /**
+     * 浣跨敤鍒嗙被鑾峰彇瀵瑰簲鐨勬暟鎹�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param templateOid     妯℃澘鐨勪富閿�
+     * @param conditionMap    鏌ヨ鏉′欢
+     * @param pageHelper      鍒嗛〉鐨勫璞�
+     * @return 鏁版嵁锛堝寘鍚笅绾у垎绫伙級
+     */
+    @Override
+    public DataGrid<Map<String, String>> gridTableDataByClassifyOid(String codeClassifyOid, String templateOid, Map<String, String> conditionMap, PageHelper pageHelper) {
+        //1. 浣跨敤鍒嗙被鑾峰彇鎵�鏈夌殑涓嬬骇鍒嗙被锛岀劧鍚庢牴鎹垎绫绘煡璇㈠搴旂殑鏁版嵁
+        //2. 鍏ㄩ儴浣跨敤褰撳墠鍒嗙被鐨勫綋鍓嶆ā鏉挎潵灞曠ず鍐呭
+        //3. 濡傛灉妯℃澘涓婃湁鏋氫妇娉ㄥ叆锛岀粍鍚堣鍒欙紝鍜屽弬鐓х殑锛岄渶瑕佹墽琛岃浆鎹�
+        //4. 鏌ヨ鐨勬椂鍊欙紝鐩存帴浣跨敤codeclsfpath鏉ユ煡璇�
+        CodeClassifyVO topClassifyVO = classifyService.getTopClassifyVO(codeClassifyOid);
+        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(templateOid);
+        if (topClassifyVO == null || StringUtils.isBlank(topClassifyVO.getBtmtypeid())) {
+            throw new VciBaseException("褰撳墠涓婚搴撳垎绫绘病鏈夐《灞傚垎绫伙紝鎴栬�呴《灞傚垎绫绘病鏈夎缃笟鍔$被鍨�");
+        }
+        String btmTypeId = topClassifyVO.getBtmtypeid();
+        if (StringUtils.isBlank(btmTypeId)) {
+            return new DataGrid<>("杩欎釜鍒嗙被鎵�灞為《灞傚垎绫绘病鏈夋坊鍔犱笟鍔$被鍨�");
+        }
+        if (conditionMap == null) {
+            conditionMap = new HashMap<>();
+        }
+        //pageHelper.addDefaultDesc("createTime");
+        pageHelper.addDefaultDesc("id");
+        if (!classifyService.checkHasChild(codeClassifyOid)) {
+            conditionMap.put(CODE_CLASSIFY_OID_FIELD, codeClassifyOid);
+        } else {
+            conditionMap.put(CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY)
+                    + " where lcstatus='" + FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED +
+                    "' start with parentCodeClassifyOid = '" + codeClassifyOid + "' CONNECT BY PRIOR OID = parentCodeClassifyOid )");
+        }
+        conditionMap.put("islastr", "1");
+        conditionMap.put("islastv", "1");
+        return queryGrid(btmTypeId, templateVO, conditionMap, pageHelper);
+//        List<String> selectFieldList = templateVO.getAttributes().stream().map(CodeClassifyTemplateAttrVO::getId).collect(Collectors.toList());
+//        //鍙傜収璁╁钩鍙扮洿鎺ユ煡璇㈠氨琛�
+//        List<String> finalSelectFieldList = selectFieldList;
+//        List<CodeClassifyTemplateAttrVO> referAttrVOs = templateVO.getAttributes().stream().filter(
+//                s -> StringUtils.isNotBlank(s.getReferbtmid())
+//                        &&
+//                        (finalSelectFieldList.size() ==0 || finalSelectFieldList.contains(s.getId().toLowerCase(Locale.ROOT)))
+//        ).collect(Collectors.toList());
+//        if(!CollectionUtils.isEmpty(referAttrVOs)){
+//            for (int i = 0; i < referAttrVOs.size(); i++) {
+//                selectFieldList.add(referAttrVOs.get(i).getId() + ".name");
+//            }
+//        }
+//        //鎴戜滑浣跨敤鍜屼笟鍔$被鍨嬬殑鏉ユ煡璇�
+//        DataGrid<Map<String,String>> dataGrid = boService.queryGridByBo(btmTypeId, conditionMap, pageHelper, selectFieldList);
+//        //鎴戜滑闇�瑕佷娇鐢ㄦā鏉挎潵杞崲
+//        if(!CollectionUtils.isEmpty(dataGrid.getData())){
+//            wrapperData(dataGrid.getData(),templateVO,finalSelectFieldList,false);
+//        }
+//        return dataGrid;
+    }
+
+    /**
+     * 鏌ヨ缂栫爜鏁版嵁鐨勫垪琛�
+     *
+     * @param btmType      涓氬姟绫诲瀷
+     * @param templateVO   妯℃澘鐨勫璞★紝闇�瑕佸寘鍚ā鏉跨殑灞炴��
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉瀵硅薄
+     * @return 鏁版嵁鍒楄〃
+     */
+    @Override
+    public DataGrid<Map<String, String>> queryGrid(String btmType, CodeClassifyTemplateVO templateVO, Map<String, String> conditionMap, PageHelper pageHelper) {
+        CodeTemplateAttrSqlBO sqlBO = getSqlByTemplateVO(btmType, templateVO, conditionMap, pageHelper);
+        List<Map> maps = boService.queryByOnlySqlForMap(sqlBO.getSqlHasPage());
+        DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
+        List<Map<String, String>> dataList = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(maps)) {
+            maps.stream().forEach(map -> {
+                Map<String, String> data = new HashMap<>();
+                map.forEach((key, value) -> {
+                    data.put(((String) key).toLowerCase(Locale.ROOT), (String) value);
+                });
+                dataList.add(data);
+            });
+        }
+        dataGrid.setData(dataList);
+        if (!CollectionUtils.isEmpty(dataList)) {
+            wrapperData(dataGrid.getData(), templateVO, sqlBO.getSelectFieldList(), false);
+            dataGrid.setTotal(boService.queryCountBySql(sqlBO.getSqlCount(), new HashMap<>()));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鏍规嵁妯℃澘灞炴�х敓鎴愮浉搴旂殑sql淇℃伅
+     *
+     * @param btmType      涓氬姟绫诲瀷
+     * @param templateVO   妯℃澘鏄剧ず瀵硅薄锛屽繀椤诲寘鍚睘鎬�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper   鍒嗛〉鍜屾帓搴忓璞�
+     * @return sql鐨勭浉鍏充俊鎭�
+     */
+    @Override
+    public CodeTemplateAttrSqlBO getSqlByTemplateVO(String btmType, CodeClassifyTemplateVO templateVO, Map<String, String> conditionMap, PageHelper pageHelper) {
+        //鍥犱负鍙傜収涓嶄竴瀹氭槸鍦ㄥ钩鍙扮殑灞炴�ф睜閲岄潰璁剧疆锛屾墍浠ユ垜浠緱闇�瑕佽嚜琛屽鐞�
+        //鍙傝�僔ciQueryWrapper鏉ュ鐞�
+        //1. 鎵惧埌鎵�鏈夌殑瀛楁锛�
+        Map<String, CodeClassifyTemplateAttrVO> attrVOMap = templateVO.getAttributes().stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        List<String> selectFieldList = attrVOMap.keySet().stream().collect(Collectors.toList());
+
+        //鎵�鏈夌殑鍙傜収鐨勫瓧娈�
+        Map<String/**灞炴�у瓧娈�**/, String> joinTableList = new ConcurrentHashMap<>();
+        List<CodeClassifyTemplateAttrVO> referAttrVOs = templateVO.getAttributes().stream().filter(
+                s -> StringUtils.isNotBlank(s.getReferbtmid()) || StringUtils.isNotBlank(s.getReferConfig())
+        ).collect(Collectors.toList());
+        Map<String/**鍙傜収鐨勫睘鎬�**/, String/**瀹為檯鐨勫瓧娈�**/> referFieldMap = new HashMap<>();
+        if (!CollectionUtils.isEmpty(referAttrVOs)) {
+            referAttrVOs.parallelStream().forEach(attrVO -> {
+                UIFormReferVO referVO = null;
+                if (StringUtils.isNotBlank(attrVO.getReferConfig())) {
+                    referVO = JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class);
+                } else {
+                    referVO = new UIFormReferVO();
+                    referVO.setReferType(attrVO.getReferbtmid());
+                    referVO.setValueField(VciQueryWrapperForDO.OID_FIELD);
+                    referVO.setTextField("name");
+                }
+
+                String referTable = VciBaseUtil.getTableName(referVO.getReferType());
+                String referTableNick = attrVO.getId() + "0";
+                String left = " left join " + referTable + " " + referTableNick + " on " + referTableNick + "." + referVO.getValueField() + " =  t." + attrVO.getId();
+                joinTableList.put(attrVO.getId(), left);
+                String referShowField = attrVO.getId() + "Name";
+                List<String> textFields = VciBaseUtil.str2List(referVO.getTextField());
+                String showFieldInSource = "";
+                if (textFields.contains("name")) {
+                    showFieldInSource = "name";
+                } else {
+                    showFieldInSource = textFields.get(0);
+                }
+                referFieldMap.put(attrVO.getId(), referTableNick + "." + showFieldInSource);
+                selectFieldList.add(referTableNick + "." + showFieldInSource + " as " + referShowField);
+            });
+        }
+        Optional.ofNullable(attributeService.getDefaultAttributeVOMap()).orElseGet(() -> new HashMap<>()).keySet().stream().forEach(attrId -> {
+            if (!selectFieldList.contains(attrId) && !"secretgrade".equalsIgnoreCase(attrId)) {
+                selectFieldList.add(attrId);
+            }
+        });
+        if (!selectFieldList.contains(CODE_FIELD)) {
+            selectFieldList.add(CODE_FIELD);
+        }
+        if (!selectFieldList.contains(CODE_CLASSIFY_OID_FIELD)) {
+            selectFieldList.add(CODE_CLASSIFY_OID_FIELD);
+        }
+        if (!selectFieldList.contains(CODE_TEMPLATE_OID_FIELD)) {
+            selectFieldList.add(CODE_TEMPLATE_OID_FIELD);
+        }
+        if (!selectFieldList.contains(CODE_FULL_PATH_FILED)) {
+            selectFieldList.add(CODE_FULL_PATH_FILED);
+        }
+
+        //澶勭悊鏌ヨ鏉′欢
+        //TODO 楠岃瘉sql娉ㄥ叆
+        List<String> andSql = new ArrayList<>();
+        List<String> orSql = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(conditionMap)) {
+            Map<String, String> orConditionMap = new HashMap<>();
+            Map<String, String> andCondtionMap = new HashMap<>();
+            //鍏堝垎绂籵r鐨勬煡璇㈡潯浠讹紝鍙﹀褰撴煡璇㈡潯浠舵槸绌虹殑鏃跺�欎篃涓嶆煡璇�
+            conditionMap.forEach((k, v) -> {
+                if (StringUtils.isNotBlank(v)) {
+                    if (v.startsWith(QueryOptionConstant.OR)) {
+                        orConditionMap.put(k, v.substring(QueryOptionConstant.OR.length()));
+                    } else {
+                        andCondtionMap.put(k, v);
+                    }
+                }
+            });
+
+            andCondtionMap.forEach((k, v) -> {
+                andSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap));
+            });
+            orConditionMap.forEach((k, v) -> {
+                orSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap));
+            });
+        }
+        //缁勫悎璧锋潵
+        StringBuilder andSb = new StringBuilder();
+        andSql.stream().forEach(s -> {
+            andSb.append(s).append(SPACE).append(QueryOptionConstant.AND).append(SPACE);
+        });
+
+        String andString = andSb.toString().trim();
+        String endWithSql = QueryOptionConstant.AND;
+        if (andString.endsWith(endWithSql)) {
+            andString = andString.substring(0, andString.length() - endWithSql.length());
+        }
+
+        String orString = orSql.stream().collect(Collectors.joining(" or "));
+        String whereSql = "";
+        if (StringUtils.isNotBlank(orString)) {
+            if (StringUtils.isBlank(andString)) {
+                andString = " 1 = 1 ";
+            }
+            whereSql = SPACE + "(" + SPACE + andString + SPACE + ") and (" + SPACE + orString + SPACE + ")" + SPACE;
+        } else {
+            whereSql = andString + SPACE;
+        }
+        if (attrVOMap.keySet().contains("secretgrade")) {
+            Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+            if (userSecret == null || userSecret == 0) {
+                userSecret = secretService.getMinUserSecret();
+            }
+            whereSql += " and ( t.secretGrade <= " + userSecret + ") ";
+        }
+        String tableName = VciBaseUtil.getTableName(btmType);
+        String sql = "select " + selectFieldList.stream().map(s -> (s.contains(".") ? s : ("t." + s))).collect(Collectors.joining(","))
+                + " from " + tableName + SPACE + "t" + SPACE
+                + joinTableList.values().stream().collect(Collectors.joining(SPACE))
+                + (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        //鐪嬬湅鎺掑簭
+        String orderSql = pageHelper.getOrderSql("t");
+        sql += (orderSql == null ? "" : orderSql);
+        String whereSubfixForPage = " ) A where rownum < " + (pageHelper.getLimit() * pageHelper.getPage() + 1) + ") where RN >= "
+                + (pageHelper.getLimit() * (pageHelper.getPage() - 1) + 1);
+        String sqlHasPage = pageHelper.getLimit() > 0 ? ("select * from (select A.*,rownum RN from (" + sql + whereSubfixForPage) : sql;
+        String sqlCount = "select count(1) from " + tableName + SPACE + "t" + SPACE + joinTableList.values().stream().collect(Collectors.joining(SPACE))
+                + (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
+        CodeTemplateAttrSqlBO sqlBO = new CodeTemplateAttrSqlBO();
+        sqlBO.setTableName(tableName);
+        sqlBO.setJoinTable(joinTableList);
+        sqlBO.setNickName("t");
+        sqlBO.setPageHelper(pageHelper);
+        sqlBO.setSqlHasPage(sqlHasPage);
+        sqlBO.setSqlCount(sqlCount);
+        sqlBO.setSqlUnPage(sql);
+        return sqlBO;
+    }
+
+
+    /**
+     * 绌烘牸
+     */
+    public static final String SPACE = " ";
+
+    /**
+     * 缁勫悎鏌ヨ鏉′欢鐨剆ql
+     *
+     * @param key           瀛楁
+     * @param value         鍚嶅瓧
+     * @param referFieldMap 鍙傜収鐨勫瓧娈�
+     * @param attrVOMap     灞炴�х殑鏄犲皠
+     * @return Sql璇彞
+     */
+    private String getConditionSql(String key, String value, Map<String/**鍙傜収鐨勫睘鎬�**/, String/**瀹為檯鐨勫睘鎬�**/> referFieldMap, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
+        if (key.endsWith("_begin")) {
+            //璇存槑鏄�>=鐨勩�傛垜浠渶瑕佸厛鑾峰彇涓�涓�
+            String field = (key.substring(0, key.length() - 6).toLowerCase().trim());
+            if (referFieldMap.containsKey(field)) {
+                //璇存槑杩樻槸鍙傜収閲岄潰鐨勶紝鎴戜滑榛樿杩欑鎯呭喌涓嬮兘鏄瓧绗︿覆鍚э紝鍥犱负鍙傜収鐨勫睘鎬т笉涓�瀹氱敤鐨勫钩鍙扮殑灞炴�ф睜閲岀殑锛屾墍浠ュぇ閮ㄥ垎鎯呭喌涓嬶紝鏄剧ず鐨勫睘鎬ч兘鏄瓧绗︿覆鍚�
+                return referFieldMap.get(field) + SPACE + " >= '" + value + "'" + SPACE;
+            } else {
+                return (field.contains(".") ? "" : "t.") + field + SPACE + " >= " + getStringValueInWhere(value, field, attrVOMap);
+            }
+        } else if (key.endsWith("_end")) {
+            //璇存槑鏄�<=鐨勩�傛垜浠渶瑕佸厛鑾峰彇涓�涓�
+            String field = (key.substring(0, key.length() - 6).toLowerCase().trim());
+            if (referFieldMap.containsKey(field)) {
+                //璇存槑杩樻槸鍙傜収閲岄潰鐨勶紝鎴戜滑榛樿杩欑鎯呭喌涓嬮兘鏄瓧绗︿覆鍚э紝鍥犱负鍙傜収鐨勫睘鎬т笉涓�瀹氱敤鐨勫钩鍙扮殑灞炴�ф睜閲岀殑锛屾墍浠ュぇ閮ㄥ垎鎯呭喌涓嬶紝鏄剧ず鐨勫睘鎬ч兘鏄瓧绗︿覆鍚�
+                return referFieldMap.get(field) + SPACE + " <= '" + value + "'" + SPACE;
+            } else {
+                return (field.contains(".") ? "" : "t.") + field + SPACE + " <= " + getStringValueInWhere(field, value, attrVOMap);
+            }
+        } else {
+            if (referFieldMap.containsKey(key)) {
+                //璇存槑鏄弬鐓х殑锛屾垜浠弬鐓х殑鏌ヨ閮借涓烘槸瀛楃涓诧紝濡傛灉鏄椂闂存牸寮忕殑鏌ヨ鑲畾鏈夐棶棰橈紝
+                String selectKey = referFieldMap.get(key);
+                return getSqlByValue(selectKey, value, null);
+            } else {
+                return getSqlByValue(key, value, attrVOMap);
+            }
+        }
+
+    }
+
+    /**
+     * 灏佽鏈�缁堢殑sql璇彞涓殑鍊奸儴鍒�
+     *
+     * @param selectKey 鏌ヨ鐨勫瓧娈�
+     * @param value     鍊�
+     * @param attrVOMap 灞炴�х殑鏄剧ず瀵硅薄鏄犲皠
+     * @return sql閲岀殑鍊�
+     */
+    private String getSqlByValue(String selectKey, String value, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
+        StringBuilder sql = new StringBuilder();
+        if (!selectKey.contains(".") && (attrVOMap.containsKey(selectKey.toLowerCase(Locale.ROOT)) || attributeService.isDefaultAttr(selectKey) || selectKey.matches(RegExpConstant.LETTER))) {
+            sql.append("t.");
+        }
+        if (value.startsWith(QueryOptionConstant.IN)) {
+            sql.append(selectKey)
+                    .append(SPACE)
+                    .append("in")
+                    .append(SPACE)
+                    .append("(")
+                    .append(value.replace(QueryOptionConstant.IN, ""))
+                    .append(")");
+        } else if (value.startsWith(QueryOptionConstant.NOTIN)) {
+            sql.append(selectKey)
+                    .append(SPACE)
+                    .append("not in")
+                    .append(SPACE)
+                    .append("(")
+                    .append(value.replace(QueryOptionConstant.NOTIN, ""))
+                    .append(")");
+        } else if (value.startsWith(QueryOptionConstant.NOTEQUAL)) {
+            value = value.replace(QueryOptionConstant.NOTEQUAL, "");
+            value = getStringValueInWhere(selectKey, value, attrVOMap);
+            sql.append(selectKey)
+                    .append(SPACE)
+                    .append(QueryOptionConstant.NOTEQUAL)
+                    .append(SPACE)
+                    .append(value);
+        } else if (value.startsWith(QueryOptionConstant.MORETHAN)) {
+            value = value.replace(QueryOptionConstant.MORETHAN, "");
+            value = getStringValueInWhere(selectKey, value, attrVOMap);
+            sql.append(selectKey)
+                    .append(SPACE)
+                    .append(QueryOptionConstant.MORETHAN)
+                    .append(SPACE)
+                    .append(value);
+        } else if (value.startsWith(QueryOptionConstant.MORE)) {
+            value = value.replace(QueryOptionConstant.MORE, "");
+            value = getStringValueInWhere(selectKey, value, attrVOMap);
+            sql.append(selectKey)
+                    .append(SPACE)
+                    .append(QueryOptionConstant.MORE)
+                    .append(SPACE)
+                    .append(value);
+        } else if (value.startsWith(QueryOptionConstant.LESSTHAN)) {
+            value = value.replace(QueryOptionConstant.LESSTHAN, "");
+            value = getStringValueInWhere(selectKey, value, attrVOMap);
+
+            sql.append(selectKey)
+                    .append(SPACE)
+                    .append(QueryOptionConstant.LESSTHAN)
+                    .append(SPACE)
+                    .append(value);
+        } else if (value.startsWith(QueryOptionConstant.LESS)) {
+            value = value.replace(QueryOptionConstant.LESS, "");
+            value = getStringValueInWhere(selectKey, value, attrVOMap);
+
+            sql.append(selectKey)
+                    .append(SPACE)
+                    .append(QueryOptionConstant.LESS)
+                    .append(SPACE)
+                    .append(value);
+        } else if (value.startsWith(QueryOptionConstant.ISNOTNULL)) {
+            sql.append(selectKey)
+                    .append(SPACE)
+                    .append(" is not null");
+        } else if (value.startsWith(QueryOptionConstant.ISNULL)) {
+            sql.append(selectKey)
+                    .append(SPACE)
+                    .append(" is null");
+        } else if (value.contains("*")) {
+            //璇存槑鏄痩ike锛屾垨鑰卨efe like ,right like
+            value = getStringValueInWhere(selectKey, value, attrVOMap);
+            sql.append(selectKey)
+                    .append(SPACE)
+                    .append("like")
+                    .append(SPACE)
+                 //   .append("'")
+                    .append(value.replace("*", "%"))
+                  //  .append("'")
+                    .append(SPACE);
+        } else {
+            value= value.replace(SPECIAL_CHAR,REQUIRED_CHAR);
+            value = getStringValueInWhere(selectKey, value, attrVOMap);
+
+            sql.append(selectKey)
+                    .append(SPACE)
+                    .append(QueryOptionConstant.EQUAL)
+                    .append(SPACE)
+                    .append(value);
+        }
+        sql.append(SPACE);
+        return sql.toString();
+    }
+
+    /**
+     * 榛樿鐨勬椂闂存牸寮�
+     */
+    private static final String DATETIME_FORMAT = "yyyy-mm-dd hh24:mi:ss";
+
+    /**
+     * 鏃ユ湡鏍煎紡
+     */
+    private static final String DATE_FORMAT = "yyyy-mm-dd";
+    /**
+     * 鍙槸sql
+     */
+    public static final String ONLY = "${vcionly}";
+
+    /**
+     * 鑾峰彇鏌ヨ鏉′欢涓殑鍊肩殑锛屽鐞嗕笉鍚岀殑绫诲瀷
+     *
+     * @param value 鍊�
+     * @param field 瀛楁鍚嶇О
+     * @return 鏃ユ湡鎴栬�呮椂闂存牸寮忎細鍖呮嫭to_date锛屽瓧绗︿覆浼氬姞'
+     */
+    private String getStringValueInWhere(String field, String value, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
+        if ((field.contains(".") && !field.toLowerCase(Locale.ROOT).startsWith("t.")) || attrVOMap == null
+                || !field.replace("t.", "").matches(RegExpConstant.LETTER) || value.startsWith(ONLY)) {
+            //璇存槑鍙兘鏄寚瀹氱殑鏌愪釜鏉′欢锛岀洿鎺ヨ繑鍥�
+            if (value.startsWith(ONLY)) {
+                value = value.replace(ONLY, "");
+            }
+            if ((value.startsWith("(") && value.endsWith(")")) || (value.startsWith("'") && value.endsWith("'"))) {
+                return value;
+            }
+            if (field.contains(".") && attrVOMap != null && attrVOMap.containsKey(field.split("\\.")[0].toLowerCase(Locale.ROOT))) {
+                //鏄弬鐓�
+                return "'" + value + "'";
+            } else {
+                return value;
+            }
+        } else {
+            //鐪嬬湅鏄笉鏄繖涓璞¢噷鐨勫睘鎬�
+            if (attrVOMap.containsKey(field)) {
+                VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.valueOf(attrVOMap.get(field).getAttributedatatype());
+                if ("ts".equalsIgnoreCase(field)) {
+                    return "to_timestamp('" + value + "', '" + DATETIME_FORMAT + ".ff')";
+                }
+                DateConverter dateConverter = new DateConverter();
+                if (VciFieldTypeEnum.VTDateTime.equals(fieldTypeEnum)) {
+                    //瀹為檯涓婏紝鏁版嵁搴撻兘鏄痶imestamp鐨勭被鍨�.
+                    dateConverter.setAsText(value);
+                    return "to_date('" + dateConverter.getAsText(VciDateUtil.DateTimeFormat) + "','" + DATETIME_FORMAT + "')";
+                } else if (VciFieldTypeEnum.VTDate.equals(fieldTypeEnum)) {
+                    dateConverter.setAsText(value);
+                    return "to_date('" + dateConverter.getAsText(VciDateUtil.DateFormat) + "','" + DATE_FORMAT + "')";
+                } else if (VciFieldTypeEnum.VTDouble.equals(fieldTypeEnum)
+                        || VciFieldTypeEnum.VTLong.equals(fieldTypeEnum)
+                        || VciFieldTypeEnum.VTInteger.equals(fieldTypeEnum)) {
+                    return value;
+                } else {
+                    return "'" + value + "'";
+                }
+            } else {
+                if ((value.startsWith("(") && value.endsWith(")")) || (value.startsWith("'") && value.endsWith("'"))) {
+                    return value;
+                }
+                return "'" + value + "'";
+            }
+        }
+
+    }
+
+    /**
+     * 灏佽寮�鍏崇殑鍐呭锛屽父鐢ㄤ簬瀵煎嚭
+     * @param dataMap 鏁版嵁鐨勫唴瀹�
+     * @param templateVO 妯℃澘鐨勬樉绀�
+     */
+    @Override
+    public void wrapperBoolean(List<Map<String, String>> dataMap, CodeClassifyTemplateVO templateVO){
+        List<String> booleanAttributes = templateVO.getAttributes().stream().filter(s -> VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(s.getAttributedatatype())).map(s -> s.getId().toLowerCase(Locale.ROOT)).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(booleanAttributes)){
+            dataMap.stream().forEach(data -> {
+                booleanAttributes.stream().forEach(attrId->{
+                    if(data.containsKey(attrId)){
+                        String value = data.get(attrId);
+                        data.put(attrId, BooleanEnum.TRUE.getValue().equalsIgnoreCase(value)?"鏄�":"鍚�");
+                    }
+                });
+            });
+        }
+    }
+
+    /**
+     * 灏佽鏌ヨ鍑烘潵鐨勬暟鎹�
+     *
+     * @param dataMap              鏁版嵁鐨勬槧灏�
+     * @param templateVO           妯℃澘鐨勫睘鎬�
+     * @param onlySelectAttrIdList 浠呬粎鏌ヨ鐨勫睘鎬у瓧娈�
+     * @param form 琛ㄥ崟閲屼娇鐢�
+     */
+    @Override
+    public void wrapperData(List<Map<String, String>> dataMap, CodeClassifyTemplateVO templateVO,
+                            Collection<String> onlySelectAttrIdList, boolean form) {
+        if (onlySelectAttrIdList == null) {
+            onlySelectAttrIdList = new ArrayList<>();
+        }
+        //鍏堣浆鎹竴涓嬫椂闂存牸寮�
+        List<String> finalOnlySelectAttrIdList = onlySelectAttrIdList.stream().collect(Collectors.toList());
+        List<CodeClassifyTemplateAttrVO> dateFormatAttrVOs = templateVO.getAttributes().stream().filter(
+                s -> StringUtils.isNotBlank(s.getCodedateformat()) &&
+                        (finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT)))
+        ).collect(Collectors.toList());
+        //鏋氫妇鐨勫唴瀹�
+        List<CodeClassifyTemplateAttrVO> enumAttrVOs = templateVO.getAttributes().stream().filter(
+                s -> (StringUtils.isNotBlank(s.getEnumid()) || StringUtils.isNotBlank(s.getEnumString()))
+                        &&
+                        (finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT)))
+        ).collect(Collectors.toList());
+
+        List<String> userIds = new ArrayList<>();
+        dataMap.stream().forEach(data -> {
+            //澶勭悊鏃堕棿
+            if (!form) {
+                //琛ㄥ崟鐨勬椂鍊欏彧鑳界敤缁熶竴鐨勬椂闂存牸寮�
+                wrapperDateFormat(dateFormatAttrVOs, data);
+            }
+            //澶勭悊鏋氫妇
+            wrapperEnum(enumAttrVOs, data);
+            String lcstatus = data.get(VciQueryWrapperForDO.LC_STATUS_FIELD);
+            String copyFromVersion = data.getOrDefault(COPY_FROM_VERSION,"");
+            if ((CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(lcstatus) || CodeDefaultLC.AUDITING.getValue().equalsIgnoreCase(lcstatus))
+                    && StringUtils.isBlank(copyFromVersion)
+            ) {
+                data.put(VciQueryWrapperForDO.ID_FIELD, "******");
+            }
+            data.put(VciQueryWrapperForDO.LC_STATUS_FIELD_TEXT.toLowerCase(Locale.ROOT), CodeDefaultLC.getTextByValue(lcstatus));
+            if(CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(lcstatus)
+                    && StringUtils.isNotBlank(copyFromVersion)){
+                data.put(VciQueryWrapperForDO.LC_STATUS_FIELD_TEXT.toLowerCase(Locale.ROOT), "淇敼涓�");
+            }
+            if (data.containsKey("creator")) {
+                userIds.add(data.get("creator"));
+            }
+            if (data.containsKey("lastmodifier")) {
+                userIds.add(data.get("lastmodifier"));
+            }
+        });
+        if (!CollectionUtils.isEmpty(userIds)) {
+			Map<String, SmUserVO> userVOMap = Optional.ofNullable(userQueryService.listUserByUserIds(userIds)).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+            dataMap.stream().forEach(data -> {
+                String creator = data.getOrDefault("creator", null);
+                if (StringUtils.isNotBlank(creator) && userVOMap.containsKey(creator.toLowerCase(Locale.ROOT))) {
+                    data.put("creator", creator + "(" + userVOMap.get(creator.toLowerCase(Locale.ROOT)).getName() + ")");
+                }
+                String lastmodifier = data.getOrDefault("lastmodifier", null);
+                if (StringUtils.isNotBlank(lastmodifier) && userVOMap.containsKey(lastmodifier.toLowerCase(Locale.ROOT))) {
+                    data.put("lastmodifier", lastmodifier + "(" + userVOMap.get(lastmodifier.toLowerCase(Locale.ROOT)).getName() + ")");
+                }
+            });
+        }
+    }
+
+    /**
+     * 澶勭悊鏃堕棿鏍煎紡
+     *
+     * @param dateFormatAttrVOs 鏃堕棿鏍煎紡鐨勫睘鎬�
+     * @param data              褰撳墠琛屾暟鎹�
+     */
+    private void wrapperDateFormat(Collection<CodeClassifyTemplateAttrVO> dateFormatAttrVOs, Map<String, String> data) {
+        if (!CollectionUtils.isEmpty(dateFormatAttrVOs)) {
+            dateFormatAttrVOs.stream().forEach(dateFormatAttrVO -> {
+                String attrId = dateFormatAttrVO.getId().toLowerCase(Locale.ROOT);
+                String oldValue = data.getOrDefault(attrId, null);
+                if (StringUtils.isNotBlank(oldValue)) {
+                    DateConverter dateConverter = new DateConverter();
+                    try {
+                        dateConverter.setAsText(oldValue);
+                        Date value = dateConverter.getValue();
+                        if (value != null) {
+                            data.put(attrId, VciDateUtil.date2Str(value, dateFormatAttrVO.getCodedateformat()));
+                        }
+                    } catch (Throwable e) {
+                        //杞崲鍙兘鏈夐棶棰橈紝杩欏氨浣跨敤鍘熸湰瀛樺偍鐨勫��
+                    }
+                }
+            });
+        }
+    }
+
+    /**
+     * 澶勭悊鏋氫妇鐨勫唴瀹癸紝濡傛灉涓嶅湪鏋氫妇涓紝浼氳繑鍥炲師鏈殑鍊�
+     *
+     * @param enumAttrVOs 鏋氫妇灞炴��
+     * @param data        褰撳墠琛屾暟鎹�
+     */
+    private void wrapperEnum(Collection<CodeClassifyTemplateAttrVO> enumAttrVOs, Map<String, String> data) {
+        //澶勭悊鏋氫妇鐨勫唴瀹癸紝涓轰簡鍏煎浠ュ墠鐨勬暟鎹�,濡傛灉鏁版嵁涓嶈兘浣跨敤鏋氫妇杞崲鐨勮瘽锛岄偅杩樻槸鏄剧ず浠ュ墠鐨勫��
+        if (!CollectionUtils.isEmpty(enumAttrVOs)) {
+            enumAttrVOs.stream().forEach(enumAttrVO -> {
+                String attrId = enumAttrVO.getId().toLowerCase(Locale.ROOT);
+                String oldValue = data.getOrDefault(attrId, null);
+                if (StringUtils.isNotBlank(oldValue)) {
+                    List<KeyValue> comboxKVs = listComboboxItems(enumAttrVO);
+                    String newValue = oldValue;
+                    KeyValue keyValue = Optional.ofNullable(comboxKVs).orElseGet(() -> new ArrayList<>()).stream().filter(s -> s.getKey().equalsIgnoreCase(oldValue)).findFirst().orElseGet(() -> null);
+                    if (keyValue != null) {
+                        newValue = keyValue.getValue();
+                    }
+                    data.put(attrId + "Text", newValue);
+                }
+            });
+        }
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鐨勪笅鎷夐�夐」
+     *
+     * @param attrVO 妯℃澘灞炴�х殑瀵硅薄
+     * @return 涓嬫媺閫夐」
+     */
+    @Override
+    public List<KeyValue> listComboboxItems(CodeClassifyTemplateAttrVO attrVO) {
+        List<KeyValue> comboboxKVs;
+        if (StringUtils.isNotBlank(attrVO.getEnumString())) {
+            comboboxKVs = JSONObject.parseArray(attrVO.getEnumString(), KeyValue.class);
+        } else {
+            comboboxKVs = enumService.getEnum(attrVO.getEnumid());
+        }
+        return comboboxKVs;
+    }
+
+    /**
+     * 澶勭悊缁勫悎瑙勫垯鐨勫唴瀹癸紝濡傛灉涓嶅湪鏋氫妇涓紝浼氳繑鍥炲師鏈殑鍊�
+     *
+     * @param compAttrVOs 缁勫悎瑙勫垯灞炴��
+     * @param data        褰撳墠琛屾暟鎹�
+     */
+    private void wrapperComponentRule(Collection<CodeClassifyTemplateAttrVO> compAttrVOs, Map<String, String> data) {
+        if (!CollectionUtils.isEmpty(compAttrVOs)) {
+            compAttrVOs.stream().forEach(attrVO -> {
+                String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
+                //鐢ㄥ叕寮忓幓璁$畻
+                //鍏堢敤褰撳墠鏁版嵁鏇挎崲涓�涓�
+                String calculatedValue = formulaService.getValueByFormula(data, attrVO.getComponentrule());
+                data.put(attrId, calculatedValue);
+            });
+        }
+    }
+
+
+    /**
+     * 浣跨敤鏁版嵁涓婚敭鑾峰彇鏁版嵁鐨勫叏閮ㄤ俊鎭�
+     *
+     * @param oid         涓婚敭
+     * @param templateOid 妯℃澘鐨勪富閿�
+     * @return 鏁版嵁鐨勫唴瀹�
+     */
+    @Override
+    public BaseResult<Map<String, String>> getDataByOid(String oid, String templateOid) {
+        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(templateOid);
+        //涓轰簡闃叉妯℃澘涓婄殑涓氬姟绫诲瀷涓庡垎绫讳笂涓嶅搴�
+        CodeClassifyVO topClassifyVO = classifyService.getTopClassifyVO(templateVO.getCodeclassifyoid());
+        String btmId = topClassifyVO.getBtmtypeid();
+        //鏌ヨ鏁版嵁
+        Map<String, String> conditionMap = WebUtil.getOidQuery(oid);
+        CodeTemplateAttrSqlBO sqlBO = getSqlByTemplateVO(btmId, templateVO, conditionMap, new PageHelper(-1));
+        //鎴戜滑浣跨敤鍜屼笟鍔$被鍨嬬殑鏉ユ煡璇�
+        List<ClientBusinessObject> cbos = boService.queryByOnlySql(sqlBO.getSqlUnPage());
+        if (CollectionUtils.isEmpty(cbos)) {
+            throw new VciBaseException("鏁版嵁鍦ㄧ郴缁熶腑涓嶅瓨鍦紝鏄惁鍥犱负淇敼杩囦笟鍔$被鍨嬶紵");
+        }
+        Map<String, String> data = new HashMap<>();
+        ClientBusinessObject cbo = cbos.get(0);
+        WebUtil.copyValueToMapFromCbos(cbo, data);
+        List<Map<String, String>> dataList = new ArrayList<>();
+        dataList.add(data);
+        wrapperData(dataList, templateVO, sqlBO.getSelectFieldList(), true);
+        BaseResult<Map<String, String>> result = BaseResult.success(data);
+        //鎴戜滑瑕佺湅鏄惁涓嶆槸鍗囩増鐨勶紝鍗囩増鐨勮瘽锛岄渶瑕佸姣斾笉鐩哥瓑鐨勫睘鎬�
+        String copy = cbo.getCopyFromVersion();
+        if (StringUtils.isBlank(copy)) {
+            copy = cbo.getAttributeValue("copyfromversion");
+        }
+        if (StringUtils.isNotBlank(copy)) {
+            //璇存槑鏈夊彉鏇寸殑鍐呭
+
+            CodeTemplateAttrSqlBO oldSqlBO = getSqlByTemplateVO(btmId, templateVO, WebUtil.getOidQuery(copy), new PageHelper(-1));
+            //鎴戜滑浣跨敤鍜屼笟鍔$被鍨嬬殑鏉ユ煡璇�
+            List<ClientBusinessObject> oldCbos = boService.queryByOnlySql(oldSqlBO.getSqlUnPage());
+            if (!CollectionUtils.isEmpty(oldCbos)) {
+                Map<String, String> newData = new HashMap<>();
+                WebUtil.copyValueToMapFromCbos(cbo, newData);
+                Map<String, String> oldData = new HashMap<>();
+                WebUtil.copyValueToMapFromCbos(oldCbos.get(0), oldData);
+                Map<String, String> difFieldMap = new HashMap<>();
+                newData.forEach((key, value) -> {
+                    String oldValue = oldData.getOrDefault(key, "");
+                    if (value == null) {
+                        value = "";
+                    }
+                    if (oldValue == null) {
+                        oldValue = "";
+                    }
+                    if (!value.equalsIgnoreCase(oldValue)) {
+                        difFieldMap.put(key, oldValue);
+                    }
+                });
+                List<Map<String, String>> difFieldList = new ArrayList<>();
+                difFieldList.add(difFieldMap);
+                result.setData(difFieldList);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 浣跨敤涓婚搴撳垎绫昏幏鍙栫紪鐮佽鍒�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 缂栫爜瑙勫垯鐨勫唴瀹�
+     */
+    @Override
+    public CodeRuleVO getCodeRuleByClassifyOid(String codeClassifyOid) {
+        VciBaseUtil.alertNotNull(codeClassifyOid, "鍒嗙被鐨勪富閿�");
+        CodeClassifyVO classifyVO = classifyService.getObjectByOid(codeClassifyOid);
+        String codeRuleOid = classifyVO.getCoderuleoid();
+        if (StringUtils.isBlank(codeRuleOid)) {
+            //寰�涓婃壘
+            CodeClassifyFullInfoBO fullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
+            return getCodeRuleByClassifyFullInfo(fullInfo);
+        }
+        //鎴戜滑鏌ヨ缂栫爜瑙勫垯
+        return ruleService.getObjectHasSecByOid(codeRuleOid);
+    }
+
+    /**
+     * 浣跨敤鍒嗙被鐨勫叏閮ㄤ俊鎭幏鍙栫紪鐮佽鍒�
+     *
+     * @param fullInfoBO 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @return 瑙勫垯鐨勫唴瀹�
+     */
+    @Override
+    public CodeRuleVO getCodeRuleByClassifyFullInfo(CodeClassifyFullInfoBO fullInfoBO) {
+        //寰�涓婃壘
+        String codeRuleOid = "";
+        if (StringUtils.isNotBlank(fullInfoBO.getCurrentClassifyVO().getCoderuleoid())) {
+            codeRuleOid = fullInfoBO.getCurrentClassifyVO().getCoderuleoid();
+        } else {
+            if (CollectionUtils.isEmpty(fullInfoBO.getParentClassifyVOs())) {
+                //璇存槑宸茬粡鏄渶楂樺眰绾�,
+                throw new VciBaseException("褰撳墠涓婚搴撳垎绫伙紝浠ュ強瀹冪殑鎵�鏈夌殑涓婄骇鍒嗙被閮芥病鏈夎缃紪鐮佽鍒�");
+            }
+            List<CodeClassifyVO> parentClassifyVOList = fullInfoBO.getParentClassifyVOs().stream().sorted((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel())).collect(Collectors.toList());
+            //浠庢渶楂樼殑level寮�濮嬭幏鍙�
+            for (int i = 0; i < parentClassifyVOList.size(); i++) {
+                CodeClassifyVO record = parentClassifyVOList.get(i);
+                if (StringUtils.isNotBlank(record.getCoderuleoid())) {
+                    codeRuleOid = record.getCoderuleoid();
+                    break;
+                }
+            }
+            if (StringUtils.isBlank(codeRuleOid)) {
+                throw new VciBaseException("褰撳墠涓婚搴撳垎绫伙紝浠ュ強瀹冪殑鎵�鏈夌殑涓婄骇鍒嗙被閮芥病鏈夎缃紪鐮佽鍒�");
+            }
+        }
+        return ruleService.getObjectHasSecByOid(codeRuleOid);
+    }
+
+    /**
+     * 浣跨敤鐮佹鐨勪富閿幏鍙栧垎绫荤殑鐮佸�煎唴瀹�
+     *
+     * @param classifySecOid         鐮佹鐨勪富閿�
+     * @param parentClassifyValueOid 涓婄骇鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鐮佸�肩殑鍐呭
+     */
+    @Override
+    public List<CodeClassifyValueVO> listCodeClassifyValueBySecOid(String classifySecOid, String parentClassifyValueOid) {
+        return classifyValueService.listCodeClassifyValueBySecOid(classifySecOid, parentClassifyValueOid);
+    }
+
+    /**
+     * 鐢宠鍗曚竴缂栫爜
+     *
+     * @param orderDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭
+     * @return 杩斿洖缂栫爜鐨勫唴瀹�
+     */
+    @Override
+    public String addSaveCode(CodeOrderDTO orderDTO) {
+        VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭",
+                orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�", orderDTO.getCodeRuleOid(), "缂栫爜瑙勫垯鐨勪富閿�");
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+        CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(orderDTO.getCodeRuleOid());
+        //1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈�
+        checkSecValueOnOrder(ruleVO, orderDTO);
+        //2.鍒ゆ柇蹇呰緭椤�
+        checkRequiredAttrOnOrder(templateVO, orderDTO);
+        //3.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
+        switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
+        //4.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
+        switchComponentAttrOnOrder(templateVO, orderDTO);
+        //5.鏍¢獙瑙勫垯
+        checkVerifyOnOrder(templateVO, orderDTO);
+        //6.鍏抽敭灞炴��
+        checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
+        //7.鏋氫妇杞崲
+        checkEnumOnOrder(templateVO, orderDTO);
+        //8.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
+        switchDateAttrOnOrder(templateVO, orderDTO);
+        //9.鐢熸垚缂栫爜鐨勪俊鎭�
+        ClientBusinessObject cbo = boService.createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
+        //榛樿鐨勫睘鎬ч兘涓嶇敤浠庡墠绔嫹璐�
+        //璁剧疆缂栫爜闇�瑕佺殑榛樿灞炴�х殑鍐呭
+        copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, false);
+        //TODO:鍥犱负榛樿鐨勫睘鎬ч兘涓嶆嫹璐濓紝鐩墠闆嗗洟鐮佸彨name锛屽苟娌℃湁浠嶥TO鎷疯礉鍒癱bo閲屻�傚鍔犱竴涓崟鐙鐞嗭紝浠ュ悗鍐嶇湅瑕佷笉瑕佽皟鏁�
+        cbo.setName(orderDTO.getName() == null ? "" : orderDTO.getName());
+        //end -- modify by lihang @20220407
+        List<ClientBusinessObject> cboList = new ArrayList<>();
+
+        //澶囨敞
+        cbo.setDescription(orderDTO.getDescription()==null?"":orderDTO.getDescription());
+
+        cboList.add(cbo);
+        List<String> codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), cboList);
+        batchSaveSelectChar(templateVO, cboList);
+        return codeList.size() > 0 ? codeList.get(0) : "";
+    }
+
+    /**
+     * 淇敼涓婚搴撴暟鎹�
+     *
+     * @param orderDTO 鏁版嵁鐨勫唴瀹癸紝涓嶇敤鍖呭惈鐮佹鐨勫唴瀹逛簡
+     */
+    @Override
+    public void editSaveCode(CodeOrderDTO orderDTO) {
+        VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬х殑鍐呭閮戒负绌�", orderDTO.getOid(), "鏁版嵁涓婚敭",
+                orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭");
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+        //鎵句笟鍔$被鍨嬶紝鐒跺悗浣跨敤涓婚敭鍘昏幏鍙栨暟鎹簱閲岀殑鏁版嵁
+        List<ClientBusinessObject> cbos = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), WebUtil.getOidQuery(orderDTO.getOid()));
+        if (CollectionUtils.isEmpty(cbos)) {
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        ClientBusinessObject cbo = cbos.get(0);
+        if (!cbo.getTs().contains(VciDateUtil.date2Str(orderDTO.getTs(), VciDateUtil.DateTimeFormat))) {
+            throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯");
+        }
+        if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) {
+            throw new VciBaseException("鏁版嵁涓嶆槸{0}鐨勭姸鎬侊紝涓嶅厑璁镐慨鏀�", new String[]{CodeDefaultLC.EDITING.getText()});
+        }
+
+        //娉ㄦ剰妯℃澘涓嶈兘浣跨敤鏁版嵁瀛樺偍鐨勬椂鍊欑殑妯℃澘锛屽洜涓哄彲鑳戒細鍙樺寲
+
+        //1. 鍒ゆ柇蹇呰緭椤�
+        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+        checkRequiredAttrOnOrder(templateVO, orderDTO);
+        //2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
+        switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
+        //3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
+        switchComponentAttrOnOrder(templateVO, orderDTO);
+        //4.鏍¢獙瑙勫垯
+        checkVerifyOnOrder(templateVO, orderDTO);
+        //5.鍒ゆ柇鍏抽敭灞炴��
+        checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
+        //6.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭�
+        checkEnumOnOrder(templateVO, orderDTO);
+        //7.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
+        switchDateAttrOnOrder(templateVO, orderDTO);
+        //榛樿鐨勫唴瀹逛笉鑳藉彉锛屾墍浠ュ彧闇�瑕佹嫹璐濊嚜瀹氫箟鐨勭浉鍏冲睘鎬у嵆鍙�
+        copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
+        //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀�
+        cbo.setDescription(orderDTO.getDescription()==null?"":orderDTO.getDescription());
+        cbo.setName(orderDTO.getName()==null?"":orderDTO.getName());
+        try {
+            cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
+            cbo.setAttributeValue("name", orderDTO.getName());
+        } catch (VCIError e) {
+            e.printStackTrace();
+        }
+        //淇敼鐨勬椂鍊欙紝缂栫爜鏄笉鍙樼殑
+        BatchCBO batchCBO = new BatchCBO();
+        batchCBO.getUpdateCbos().add(cbo);
+        List<ClientBusinessObject> cboList = new ArrayList<>();
+        cboList.add(cbo);
+        boService.persistenceBatch(batchCBO);
+        batchSaveSelectChar(templateVO, cboList);
+    }
+
+    /**
+     * 鍗囩増鐨勪富棰樺簱鏁版嵁
+     *
+     * @param orderDTO 鏁版嵁鐨勫唴瀹癸紝涓嶉渶瑕佸寘鍚爜娈电殑鍐呭
+     */
+    @Override
+    public void upSaveCode(CodeOrderDTO orderDTO) {
+        VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬х殑鍐呭涓虹┖", orderDTO.getCopyFromVersion(), "鍘熷鏁版嵁鐨勪富閿�",
+                orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭");
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+        //鎵句笟鍔$被鍨嬶紝鐒跺悗浣跨敤涓婚敭鍘昏幏鍙栨暟鎹簱閲岀殑鏁版嵁
+        List<ClientBusinessObject> cbos = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), WebUtil.getOidQuery(orderDTO.getCopyFromVersion()));
+        if (CollectionUtils.isEmpty(cbos)) {
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        ClientBusinessObject oldCbo = cbos.get(0);
+        if (!CodeDefaultLC.RELEASED.getValue().equalsIgnoreCase(oldCbo.getLcStatus())) {
+            throw new VciBaseException("鏁版嵁涓嶆槸{0}鐨勭姸鎬侊紝涓嶅厑璁告暟鎹洿鏀�", new String[]{CodeDefaultLC.RELEASED.getText()});
+        }
+        //闇�瑕佸崌鐗�
+        ClientBusinessObjectOperation cboOperation = new ClientBusinessObjectOperation();
+        ClientBusinessObject cbo = null;
+        try {
+            //cbo = cboOperation.createBusinessObjectVersion(oldCbo,VciBaseUtil.getCurrentUserId());
+            cbo = cboOperation.reviseBusinessObject(oldCbo, "");
+        } catch (VCIError e) {
+            throw new VciBaseException("鍒濆鍖栫浉鍏崇殑鍐呭鍑虹幇浜嗛敊璇�", new String[0], e);
+        }
+        //1. 鍒ゆ柇蹇呰緭椤�
+        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+        checkRequiredAttrOnOrder(templateVO, orderDTO);
+        //2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
+        switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
+        //3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
+        switchComponentAttrOnOrder(templateVO, orderDTO);
+        //4.鏍¢獙瑙勫垯
+        checkVerifyOnOrder(templateVO, orderDTO);
+        //5.鍒ゆ柇鍏抽敭灞炴��
+        checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
+        //6.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭�
+        checkEnumOnOrder(templateVO, orderDTO);
+        //7.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
+        switchDateAttrOnOrder(templateVO, orderDTO);
+        //榛樿鐨勫唴瀹逛笉鑳藉彉锛屾墍浠ュ彧闇�瑕佹嫹璐濊嚜瀹氫箟鐨勭浉鍏冲睘鎬у嵆鍙�
+        copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
+        //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀�
+//        cbo.setDescription(orderDTO.getDescription());
+//        cbo.setName(orderDTO.getName());
+        cbo.setDescription(orderDTO.getDescription()==null?"":orderDTO.getDescription());
+        cbo.setName(orderDTO.getName()==null?"":orderDTO.getName());
+        try {
+            cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
+            cbo.setAttributeValue("name", orderDTO.getName());
+        } catch (VCIError e) {
+            e.printStackTrace();
+        }
+        //鏁版嵁鐨勬椂鍊欙紝缂栫爜鏄笉鍙樼殑
+        cbo.setCreateTime(DateUtils.convert2String(new Date(Long.parseLong(cbo.getCreateTime())), "yyyy-MM-dd HH:mm:ss"));
+        cbo.setLastModifyTime(DateUtils.convert2String(new Date(Long.parseLong(cbo.getLastModifyTime())), "yyyy-MM-dd HH:mm:ss"));
+        List<ClientBusinessObject> cboList = new ArrayList<>();
+        cboList.add(cbo);
+        try {
+            cboOperation.saveRevisionBuinessObject(cbo);
+        } catch (VCIError vciError) {
+            throw new VciBaseException("鏁版嵁鏇存敼淇濆瓨鍑洪敊浜�", new String[0], vciError);
+        }
+        batchSaveSelectChar(templateVO, cboList);
+    }
+
+    /**
+     * 淇濆瓨鍙緭鍙�夌殑淇℃伅
+     *
+     * @param templateVO 妯℃澘鐨勫璞�
+     * @param cboList    鏁版嵁鐨勫唴瀹�
+     */
+    @Override
+    public void batchSaveSelectChar(CodeClassifyTemplateVO templateVO, List<ClientBusinessObject> cboList) {
+        if (templateVO != null && !CollectionUtils.isEmpty(cboList)) {
+            //鏄紓姝ョ殑锛屾墍浠ョ洿鎺ュ惊鐜�
+            List<CodeClassifyTemplateAttrVO> selectAttrVOs = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getLibraryIdentification())).collect(Collectors.toList());
+            if (!CollectionUtils.isEmpty(selectAttrVOs)) {
+                SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+                selectAttrVOs.parallelStream().forEach(attrVO -> {
+                    List<String> valuesList = new CopyOnWriteArrayList<>();
+                    cboList.parallelStream().forEach(cbo -> {
+                        String value = cbo.getAttributeValue(attrVO.getId());
+                        if (StringUtils.isNotBlank(value)) {
+                            valuesList.add(value);
+                        }
+                    });
+                    if (!CollectionUtils.isEmpty(valuesList)) {
+                        charService.saveBySameNamespaceAndFlag(templateVO.getBtmTypeId(), attrVO.getLibraryIdentification(), valuesList, sessionInfo);
+                    }
+                });
+            }
+        }
+    }
+
+    /**
+     * 鍒犻櫎涓婚搴撴暟鎹�
+     *
+     * @param deleteBatchDTO 鏁版嵁鐨勫唴瀹癸紝蹇呴』瑕佹湁涓婚敭鍜屽垎绫讳富閿�
+     */
+    @Override
+    public void deleteCode(CodeDeleteBatchDTO deleteBatchDTO) {
+        VciBaseUtil.alertNotNull(deleteBatchDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬у拰鐮佹鐨勫唴瀹归兘涓虹┖", deleteBatchDTO.getOidList(), "鏁版嵁涓婚敭",
+                deleteBatchDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭");
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(deleteBatchDTO.getCodeClassifyOid());
+        //鎵句笟鍔$被鍨嬶紝鐒跺悗浣跨敤涓婚敭鍘昏幏鍙栨暟鎹簱閲岀殑鏁版嵁
+        Collection<Collection<String>> oidCollection = VciBaseUtil.switchCollectionForOracleIn(deleteBatchDTO.getOidList());
+        List<ClientBusinessObject> cboList = new ArrayList<>();
+        oidCollection.stream().forEach(oids -> {
+            Map<String, String> conditionMap = new HashMap<>();
+            conditionMap.put("oid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(oids.toArray(new String[0])) + ")");
+            List<ClientBusinessObject> cbos = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), conditionMap);
+            cboList.addAll(cbos);
+        });
+        if (CollectionUtils.isEmpty(cboList)) {
+            throw new VciBaseException("鏁版嵁鍏ㄩ儴鍦ㄧ郴缁熶腑涓嶅瓨鍦�");
+        }
+        List<ClientBusinessObject> editCBOs = cboList.stream().filter(s -> !CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(s.getLcStatus())).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(editCBOs)) {
+            ClientBusinessObject cbo = editCBOs.get(0);
+            throw new VciBaseException("缂栫爜涓簕0}绛夊叡{1}鏉℃暟鎹殑鐘舵�佷笉鏄痆{2}]锛屼笉鍏佽鍒犻櫎", new String[]{cbo.getId(), String.valueOf(editCBOs.size()), CodeDefaultLC.EDITING.getText()});
+        }
+
+        //鍙兘鍒犻櫎鑷繁鍒涘缓鐨勬暟鎹�
+        String userId = WebUtil.getCurrentUserId();
+        for (ClientBusinessObject clientBusinessObject:cboList){
+            String creator = clientBusinessObject.getCreator();
+            if(!userId.equalsIgnoreCase(creator)){
+                throw new VciBaseException("缂栫爜涓�"+clientBusinessObject.getId()+"鐨勬暟鎹笉鏄綋鍓嶇敤鎴峰垱寤猴紝涓嶈兘鍒犻櫎锛�");
+            }
+
+        }
+        BatchCBO batchCBO = new BatchCBO();
+        batchCBO.getDeleteCbos().addAll(cboList);
+        WebUtil.setPersistence(false);
+        batchCBO.copyFromOther(productCodeService.recycleCode(classifyFullInfo.getCurrentClassifyVO().getBtmtypeid(), deleteBatchDTO.getOidList()));
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+    }
+
+    /**
+     * 鎷疯礉鏁版嵁鍒癱bo瀵硅薄涓�
+     *
+     * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param cbo              涓氬姟鏁版嵁
+     * @param orderDTO         缂栫爜鐢宠鐨勪俊鎭�
+     * @param templateVO       妯℃澘鐨勬樉绀哄璞�
+     * @param edit             鏄惁涓轰慨鏀�
+     */
+    private void copyValueToCBO(CodeClassifyFullInfoBO classifyFullInfo, ClientBusinessObject cbo,
+                                CodeOrderDTO orderDTO, CodeClassifyTemplateVO templateVO,
+                                boolean edit) {
+        String fullPath = "";
+        if (!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())) {
+            fullPath = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel())))
+                    .map(CodeClassifyVO::getOid).collect(Collectors.joining("##"));
+        } else {
+            fullPath = classifyFullInfo.getCurrentClassifyVO().getOid();
+        }
+        orderDTO.getData().forEach((key, value) -> {
+            if (!edit || (!boService.checkUnAttrUnEdit(key) &&
+                    !VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(key))) {
+                try {
+                    cbo.setAttributeValue(key, value);
+                } catch (VCIError e) {
+                    logger.error("璁剧疆灞炴�х殑鍊奸敊璇�", e);
+                }
+            }
+        });
+        try {
+            cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid());
+            cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD, templateVO.getOid());
+            cbo.setAttributeValue(CODE_FULL_PATH_FILED, fullPath);
+            if (!edit && StringUtils.isBlank(orderDTO.getLcStatus())) {
+                //鎵剧敓鍛藉懆鏈熺殑璧峰鐘舵�侊紝
+                if (StringUtils.isNotBlank(cbo.getLctId())) {
+                    OsLifeCycleVO lifeCycleVO = lifeCycleService.getLifeCycleById(cbo.getLctId());
+                    if (lifeCycleVO != null) {
+                        cbo.setLcStatus(lifeCycleVO.getStartStatus());
+                    } else {
+                        cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+                    }
+                } else {
+                    cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+                }
+
+            }
+            int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
+            if (secret == 0 || !secretService.checkDataSecret(secret)) {
+                Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+                cbo.setAttributeValue(SECRET_FIELD, String.valueOf((userSecret == null || userSecret == 0) ? UserSecretEnum.NONE.getValue() : userSecret));
+            }
+        } catch (Throwable e) {
+            logger.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�", e);
+        }
+    }
+
+
+    /**
+     * 杞崲缁勫悎瑙勫垯鐨勫��
+     *
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬�
+     * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+     */
+    private void switchComponentAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) {
+        Map<String, CodeClassifyTemplateAttrVO> compAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getComponentrule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(compAttrVOMap)) {
+            Map<String, String> dataMap = WebUtil.objectToMapString(orderDTO);
+
+            Map<String, String> dataLowMap = new HashMap<>();
+            if (!CollectionUtils.isEmpty(dataMap)) {
+                dataMap.forEach((key, value) -> {
+                    dataLowMap.put(key.toLowerCase(Locale.ROOT), value);
+                });
+            }
+            dataLowMap.putAll(orderDTO.getData());
+            compAttrVOMap.forEach((attrId, attrVO) -> {
+                dataLowMap.put(attrId, formulaService.getValueByFormula(dataLowMap, attrVO.getComponentrule()));
+            });
+            dataLowMap.forEach((key, value) -> {
+                setValueToOrderDTO(orderDTO, key, value);
+            });
+        }
+    }
+
+    /**
+     * 澶勭悊鍒嗙被娉ㄥ叆鐨勪俊鎭�
+     *
+     * @param templateVO         妯℃澘鐨勬樉绀哄璞★紝蹇呴』瑕佸悗妯℃澘鐨勫睘鎬�
+     * @param classifyFullInfoBO 鍒嗙被鐨勫叏璺緞
+     * @param orderDTO           缂栫爜鐢宠鐨勪俊鎭�
+     */
+    private void switchClassifyLevelOnOrder(CodeClassifyTemplateVO templateVO, CodeClassifyFullInfoBO classifyFullInfoBO, CodeOrderDTO orderDTO) {
+        Map<String, CodeClassifyTemplateAttrVO> classifyAttrVOMap = templateVO.getAttributes().stream().filter(
+                s -> StringUtils.isNotBlank(s.getClassifyinvokeattr()) && StringUtils.isNotBlank(s.getClassifyinvokelevel())
+        ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (classifyFullInfoBO.getTopClassifyVO() == null) {
+            //闇�瑕侀噸鏂版煡璇竴涓嬶紝鍥犱负杩欎釜鏄寚瀹氱殑鍒嗙被杩涙潵鐨�
+
+        }
+        if (!CollectionUtils.isEmpty(classifyAttrVOMap)) {
+            classifyAttrVOMap.forEach((attrId, attrVO) -> {
+                //鍒嗙被娉ㄥ叆鐨勭紪鍙锋垨鑰呭悕绉帮紝
+                //灞傜骇鍖呭惈鎸囧畾灞傚拰鏈�灏忓眰
+                CodeClassifyVO classifyVO = null;
+                if (!CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(attrVO.getClassifyinvokelevel()) && !"min".equalsIgnoreCase(attrVO.getClassifyinvokelevel())) {
+                    //鎸囧畾浜嗗眰绾х殑
+                    //娉ㄦ剰锛屽洜涓烘煡璇笂绾у垎绫诲嚭鏉ョ殑灞傜骇鏄�掑簭鐨勶紝鍗抽《灞傝妭鐐规槸鏈�澶х殑鍊�
+                    List<CodeClassifyVO> classifyVOS = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList());
+                    int level = VciBaseUtil.getInt(attrVO.getClassifyinvokelevel());
+                    if (classifyVOS.size() >= level && level > 0) {
+                        classifyVO = classifyVOS.get(level - 1);
+                    }
+                } else {
+                    //褰撳墠鐨勫垎绫�
+                    classifyVO = classifyFullInfoBO.getCurrentClassifyVO();
+                }
+                if (classifyVO == null) {
+                    //璇存槑灞傜骇鏈夎
+                    orderDTO.getData().put(attrId, "鍒嗙被鏍戜笂娌℃湁灞傜骇[" + attrVO.getClassifyinvokelevel() + "]");
+                    // classifyVO = classifyFullInfoBO.getCurrentClassifyVO();
+                } else {
+                    Map<String, String> classifyDataMap = VciBaseUtil.objectToMapString(classifyVO);
+                    String value = classifyDataMap.getOrDefault(attrVO.getClassifyinvokeattr(), "");
+                    orderDTO.getData().put(attrId, value);
+                }
+            });
+        }
+    }
+
+    /**
+     * 杞崲鏃堕棿鐨勬牸寮�
+     *
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬�
+     * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+     */
+    private void switchDateAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) {
+        Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getCodedateformat())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(dateAttrVOMap)) {
+            dateAttrVOMap.forEach((attrId, attrVO) -> {
+                String value = getValueFromOrderDTO(orderDTO, attrId);
+                if (StringUtils.isNotBlank(value)) {
+                    DateConverter dateConverter = new DateConverter();
+                    dateConverter.setAsText(value);
+                    value = VciDateUtil.date2Str(dateConverter.getValue(), VciDateUtil.DateTimeMillFormat);
+                    setValueToOrderDTO(orderDTO, attrId, value);
+                }
+            });
+        }
+    }
+
+    /**
+     * 鏍¢獙鏋氫妇鐨勫唴瀹�
+     *
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬�
+     * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+     */
+    private void checkEnumOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) {
+        //濡傛灉鏋氫妇鍙互淇敼锛屽垯涓嶉渶瑕佹牎楠屾槸鍚︾鍚堟灇涓剧殑閫夐」
+        Map<String, CodeClassifyTemplateAttrVO> enumAttrVOMap = templateVO.getAttributes().stream().filter(s -> (StringUtils.isNotBlank(s.getEnumString()) || StringUtils.isNotBlank(s.getEnumid())) && !VciBaseUtil.getBoolean(s.getEnumeditflag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(enumAttrVOMap)) {
+            enumAttrVOMap.forEach((attrId, attrVO) -> {
+                String value = getValueFromOrderDTO(orderDTO, attrId);
+                if (StringUtils.isNotBlank(value)) {
+                    //鏈夊�兼墠鑳芥牎楠�
+                    List<KeyValue> comboboxKVs = listComboboxItems(attrVO);
+                    if (!comboboxKVs.stream().anyMatch(s -> value.equalsIgnoreCase(s.getKey()))) {
+                        throw new VciBaseException("灞炴�с�恵0}銆戠殑鍊间笉绗﹀悎鏋氫妇鐨勮姹�", new String[]{attrVO.getName()});
+                    }
+                }
+            });
+        }
+    }
+
+    /**
+     * 鏍¢獙姝e垯琛ㄨ揪寮忔槸鍚︽纭�
+     *
+     * @param templateVO 妯℃澘鐨勪俊鎭紝蹇呴』鍖呭惈灞炴�х殑鍐呭
+     * @param orderDTO   缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
+     */
+    private void checkVerifyOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) {
+        Map<String, CodeClassifyTemplateAttrVO> verifyAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getVerifyrule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(verifyAttrVOMap)) {
+            verifyAttrVOMap.forEach((attrId, attrVO) -> {
+                String value = getValueFromOrderDTO(orderDTO, attrId);
+                if (StringUtils.isNotBlank(value) && !value.matches(attrVO.getVerifyrule())) {
+                    //鏍¢獙姝e垯琛ㄨ揪寮�
+                    throw new VciBaseException("灞炴�{0}]鐨勫�间笉绗﹀悎鏍¢獙瑙勫垯鐨勮姹�", new String[]{attrVO.getName()});
+                }
+            });
+        }
+    }
+
+    /**
+     * 鏍¢獙鍏抽敭灞炴��
+     *
+     * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param templateVO       妯℃澘鐨勫唴瀹癸紝蹇呴』鍖呭惈妯℃澘灞炴��
+     * @param orderDTO         缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
+     */
+    private void checkKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) {
+        //鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮�
+        CodeKeyAttrRepeatRuleVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo);
+        //娉ㄦ剰鐨勬槸keyRuleVO鍙兘涓虹┖锛岃〃绀轰笉浣跨敤瑙勫垯鎺у埗
+        //鑾峰彇鎵�鏈夌殑鍏抽敭灞炴��
+        Map<String, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyattrflag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        Map<String, String> conditionMap = new HashMap<>();
+        boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
+        //鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖
+        boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
+        boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag());
+        boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
+        ketAttrMap.forEach((attrId, attrVO) -> {
+            String value = getValueFromOrderDTO(orderDTO, attrId);
+            if (value == null) {
+                value = "";
+            }
+            wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
+        });
+
+        //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
+
+        if (!CollectionUtils.isEmpty(conditionMap)) {
+            final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
+            conditionMap.forEach((key, value) -> {
+                sql[0] += " and " + key + " = " + value;
+            });
+            if (StringUtils.isNotBlank(orderDTO.getOid())) {
+                //淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸�
+                sql[0] += " and oid != '" + orderDTO.getOid() + "'";
+            } else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) {
+                sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'";
+            }
+            sql[0] += " and islastR = '1' and islastV = '1' ";
+            if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
+                String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}";
+                String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"};
+                throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs);
+            }
+        }
+    }
+
+    /**
+     * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞
+     *
+     * @param value        褰撳墠鐨勫��
+     * @param keyRuleVO    鍏抽敭灞炴�х殑鎺у埗瑙勫垯锛屽彲浠ヤ负绌�
+     * @param attrId       灞炴�х殑缂栧彿
+     * @param trim         鏄惁鍘婚櫎绌烘牸
+     * @param ignoreCase   鏄惁涓嶅尯鍒嗗ぇ灏忓啓
+     * @param ignoreWidth  鏄惁蹇界暐鍏ㄥ崐瑙�
+     * @param trimAll      鏄惁蹇界暐鍏ㄩ儴绌烘牸
+     * @param conditionMap 鏌ヨ鏉′欢
+     */
+    @Override
+    public void wrapperKeyAttrConditionMap(String value, CodeKeyAttrRepeatRuleVO keyRuleVO, String attrId,
+                                           boolean trim, boolean ignoreCase, boolean ignoreWidth,
+                                           boolean trimAll, Map<String, String> conditionMap) {
+        boolean ignoreSpace = trim || trimAll;
+        if (StringUtils.isBlank(value)) {
+            //涓虹┖鐨勬椂鍊欙紝涓嶈兘鐢≦ueryOperation.ISNULL锛屽钩鍙颁笉鐭ラ亾鍟ユ椂鍊欎笉澶勭悊杩欑浜�
+            conditionMap.put("t."+attrId, "null");
+        } else {
+            if (keyRuleVO != null) {
+                String queryKey = "";
+                String queryValue = "";
+
+                String temp = "";
+                if (ignoreCase && ignoreSpace && ignoreWidth) {
+                    //蹇界暐澶у皬鍐欙紝涓斿幓绌猴紝蹇界暐鍏ㄥ崐瑙�
+                    temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(to_single_byte(%s)) " + (trimAll ? ",' ','')" : ")");
+                } else if (ignoreCase && ignoreSpace && !ignoreWidth) {
+                    //蹇界暐澶у皬鍐欍�佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
+                    temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(%s) " + (trimAll ? ",' ','')" : ")");
+                } else if (ignoreCase && !ignoreSpace && ignoreWidth) {
+                    //蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
+                    temp = "UPPER(to_single_byte(%s))";
+                } else if (!ignoreCase && ignoreSpace && ignoreWidth) {
+                    //涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佸拷鐣ュ叏鍗婅
+                    temp = (trimAll ? "REPLACE" : "TRIM") + "(to_single_byte(%s) " + (trimAll ? ",' ','')" : ")");
+                } else if (ignoreCase && !ignoreSpace && !ignoreWidth) {
+                    //蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
+                    temp = "UPPER(%s)";
+                } else if (!ignoreCase && !ignoreCase && ignoreWidth) {
+                    //涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
+                    temp = "to_single_byte(%s)";
+                } else if (!ignoreCase && ignoreSpace && !ignoreWidth) {
+                    //涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
+                    temp = (trimAll ? "REPLACE" : "TRIM") + "(%s " + (trimAll ? ",' ','')" : ")");
+                } else if (!ignoreCase && !ignoreSpace && !ignoreWidth) {
+                    //涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
+                    temp = "%s";
+                }
+                queryKey = String.format(temp, "t."+attrId);
+                queryValue = String.format(temp, "'" + (trim ? value.trim() : value) + "'");
+                conditionMap.put(queryKey, queryValue);
+            } else {
+                //涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅
+                conditionMap.put("t."+attrId, value);
+            }
+        }
+    }
+
+
+    /**
+     * 浠庣紪鐮佺敵璇蜂俊鎭璞′笂鑾峰彇鏌愪釜灞炴�х殑鍊�
+     *
+     * @param orderDTO 缂栫爜鐢宠瀵硅薄
+     * @param attrId   灞炴�х殑缂栧彿
+     * @return 鍊�
+     */
+    private String getValueFromOrderDTO(CodeOrderDTO orderDTO, String attrId) {
+        attrId = attrId.toLowerCase(Locale.ROOT);
+        String value = null;
+        if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)
+                || VciQueryWrapperForDO.SECRET_MANAGE_FIELD_MAP.containsKey(attrId)
+                || VciQueryWrapperForDO.REVISION_MANAGE_FIELD_MAP.containsKey(attrId)
+                || VciQueryWrapperForDO.LIFECYCLE_MANAGE_FIELD_MAP.containsKey(attrId)
+                || VciQueryWrapperForDO.BASE_MODEL_COMPATIBILITY_MAP.containsValue(attrId)
+        ) {
+            value = WebUtil.getStringValueFromObject(WebUtil.getValueFromField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO));
+        } else {
+            //璇存槑鏄嚜琛岄厤缃殑
+            //鍓嶇蹇呴』瑕佷紶閫掑皬鍐欑殑灞炴��
+            value = orderDTO.getData().getOrDefault(attrId, "");
+        }
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏂扮殑鍊煎埌鐢宠瀵硅薄涓�
+     *
+     * @param orderDTO 缂栫爜鐢宠瀵硅薄
+     * @param attrId   灞炴�х殑缂栧彿
+     * @param value    鍊�
+     */
+    private void setValueToOrderDTO(CodeOrderDTO orderDTO, String attrId, String value) {
+        attrId = attrId.toLowerCase(Locale.ROOT);
+        if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) {
+            WebUtil.setValueToField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO, value);
+        } else {
+            orderDTO.getData().put(attrId, value);
+        }
+    }
+
+
+    /**
+     * 鏍¢獙灞炴�ф槸鍚︿负蹇呰緭
+     *
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬�
+     * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+     */
+    private void checkRequiredAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) {
+        Map<String, CodeClassifyTemplateAttrVO> requiredAttrMap = templateVO.getAttributes().stream().filter(
+                        s -> VciBaseUtil.getBoolean(s.getRequireflag()) && StringUtils.isBlank(s.getComponentrule())
+                                && StringUtils.isBlank(s.getClassifyinvokeattr()))
+                .collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(requiredAttrMap)) {
+            requiredAttrMap.forEach((attrId, attrVO) -> {
+                //鍙湁浼佷笟缂栫爜锛岀姸鎬侊紝澶囨敞锛屾ā鏉夸富閿紝鍒嗙被涓婚敭杩欏嚑涓槸鍥哄畾鐨勶紝鍏朵綑閮芥槸鑷閰嶇疆鐨�
+                if (StringUtils.isBlank(getValueFromOrderDTO(orderDTO, attrId))) {
+                    throw new VciBaseException("灞炴�с�恵0}銆戝繀椤昏杈撳叆(閫夋嫨)鍐呭", new String[]{attrVO.getName()});
+                }
+            });
+        }
+    }
+
+
+    /**
+     * 鍒ゆ柇缂栫爜鐨勭爜娈垫槸鍚﹁緭鍏ユ垨鑰呴�夋嫨浜嗙爜鍊�
+     *
+     * @param ruleVO   瑙勫垯鐨勬樉绀哄璞�
+     * @param orderDTO 缂栫爜鐢宠鐨勫唴瀹�
+     */
+    @Override
+    public void checkSecValueOnOrder(CodeRuleVO ruleVO, CodeOrderDTO orderDTO) {
+        List<String> unSerialSecOidList = ruleVO.getSecVOList().stream().filter(
+                s -> !(CodeSecTypeEnum.CODE_SERIAL_SEC.getValue().equalsIgnoreCase(s.getSectype())
+                        || CodeSecTypeEnum.CODE_ATTR_SEC.getValue().equalsIgnoreCase(s.getSectype())
+                        || CodeSecTypeEnum.CODE_DATE_SEC.getValue().equalsIgnoreCase(s.getSectype())
+                        || CodeSecTypeEnum.CODE_LEVEL_SEC.getValue().equalsIgnoreCase(s.getSectype())
+                        || VciBaseUtil.getBoolean(s.getNullableFlag()))
+        ).map(CodeBasicSecVO::getOid).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(unSerialSecOidList)) {
+            if (CollectionUtils.isEmpty(orderDTO.getSecDTOList())) {
+                throw new VciBaseException("闈炴祦姘寸爜娈�(鎴栬�呭繀杈撶爜娈碉級蹇呴』瑕佽緭鍏�(鎴栭�夋嫨)鐮佸��");
+            }
+            if (orderDTO.getSecDTOList().stream().anyMatch(s -> !unSerialSecOidList.contains(s.getSecOid())
+                    && StringUtils.isBlank(s.getSecValue()))) {
+                throw new VciBaseException("闈炴祦姘寸爜娈�(鎴栬�呭繀杈撶爜娈碉級蹇呴』瑕佽緭鍏�(鎴栭�夋嫨)鐮佸��");
+            }
+        }
+    }
+
+    /**
+     * 浣跨敤鍒嗙被鍜岄樁娈电殑缂栧彿锛岃幏鍙栧寘鍚殑灞炴��
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param phase           闃舵鐨勫悕绉�
+     * @return 灞炴�х殑鑻辨枃鍚嶇О
+     */
+    @Override
+    public List<String> listPhaseAttrByClassifyOid(String codeClassifyOid, String phase) {
+        CodeClassifyTemplateVO templateVO = getUsedTemplateByClassifyOid(codeClassifyOid, false);
+        //鎵鹃樁娈�
+        return phaseAttrService.listAttrByTemplateOidAndPhaseId(templateVO.getOid(), phase);
+    }
+
+    /**
+     * 璺緞涓婂寘鍚綋鍓嶅垎绫荤殑鎵�鏈夊垎绫讳俊鎭�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return 鍒嗙被鏍�
+     */
+    @Override
+    public List<Tree> hasSelfClassifyTree(String codeClassifyOid) {
+        if (StringUtils.isBlank(codeClassifyOid)) {
+            return new ArrayList<>();
+        }
+        CodeClassifyFullInfoBO fullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
+        //鏌ヨ瀛�
+        List<CodeClassifyVO> childrenClassifys = classifyService.listChildrenClassify(codeClassifyOid, true, "id", true);
+        Map<String, CodeClassifyVO> classifyVOMap = new HashMap<>();
+        classifyVOMap.putAll(Optional.ofNullable(fullInfo.getParentClassifyVOs()).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)));
+        classifyVOMap.putAll(Optional.ofNullable(childrenClassifys).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)));
+        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(CodeClassifyServiceImpl.PARENT_FIELD_NAME.toLowerCase(Locale.ROOT));
+        return revisionModelUtil.doList2Trees(classifyVOMap.values().stream().collect(Collectors.toList()), treeWrapperOptions, (CodeClassifyVO s) -> {
+            return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
+                    .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : "");
+        });
+    }
+
+    /**
+     * 鍒嗙被娉ㄥ叆鐨勫唴瀹归瑙�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param codeTemplateOid 妯℃澘鐨勪富閿�
+     * @return key鏄垎绫绘敞鍏ョ殑灞炴�э紝value鏄敞鍏ュ悗鐨勫��
+     */
+    @Override
+    public Map<String, String> previewClassify(String codeClassifyOid, String codeTemplateOid) {
+        if (StringUtils.isBlank(codeClassifyOid) || StringUtils.isBlank(codeTemplateOid)) {
+            return new HashMap<>();
+        }
+        //鏌ヨ鍒嗙被鐨勪俊鎭紝鏌ヨ妯℃澘鐨勪俊鎭�
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
+        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(codeTemplateOid);
+        //
+
+        CodeOrderDTO orderDTO = new CodeOrderDTO();
+        orderDTO.setData(new HashMap<>());
+        switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
+        return orderDTO.getData();
+    }
+
+    /**
+     * 棰勮缁勫悎瑙勫垯
+     *
+     * @param orderDTO 棰勮鐨勪俊鎭紝鍖呭惈妯℃澘鐨勪富閿�
+     * @return key鏄粍鍚堣鍒欑殑灞炴�с�倂alue鏄粍鍚堝悗鐨勫�硷紝銆傚鏋滅己灏戞煇涓睘鎬х殑鍊硷紝浼氫綔涓簐alue杩斿洖
+     */
+    @Override
+    public Map<String, String> previewCompRule(CodeOrderDTO orderDTO) {
+        VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧淇℃伅", orderDTO.getTemplateOid(), "妯℃澘鐨勪富閿�");
+        //鏌ヨ鍒嗙被鐨勪俊鎭紝鏌ヨ妯℃澘鐨勪俊鎭�
+        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+        switchComponentAttrOnOrder(templateVO, orderDTO);
+        return orderDTO.getData();
+    }
+
+    /**
+     * 淇敼鐘舵��
+     *
+     * @param baseModelDTO 鏁版嵁浼犺緭瀵硅薄
+     */
+    @Override
+    public void changeStatus(BaseModelDTO baseModelDTO) {
+        VciBaseUtil.alertNotNull(baseModelDTO, "鏁版嵁淇℃伅", baseModelDTO.getOid(), "涓婚敭", baseModelDTO.getBtmname(), "涓氬姟绫诲瀷", baseModelDTO.getLcStatus(), "鐩爣鐘舵��");
+        List<String> oids = VciBaseUtil.str2List(baseModelDTO.getOid());
+        List<ClientBusinessObject> cboList = boService.selectCBOByOidCollection(oids, baseModelDTO.getBtmname());
+        //杩橀渶瑕佷慨鏀筧llCode鐨勭敓鍛藉懆鏈�
+        Map<String, String> conditionMap = new HashMap<>();
+        conditionMap.put("createcodeoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(oids.toArray(new String[0])) + ")");
+        conditionMap.put("createcodebtm", baseModelDTO.getBtmname());
+        List<ClientBusinessObject> codeCbos = boService.queryCBO(MdmBtmTypeConstant.CODE_ALL_CODE, conditionMap);
+        // 鍥炴敹闇�瑕佷笟鍔℃暟鎹垹闄�
+        if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) {
+            BatchCBO batchCBO = new BatchCBO();
+            batchCBO.getDeleteCbos().addAll(cboList);
+            boService.persistenceBatch(batchCBO);
+        } else {
+            lifeCycleService.transCboStatus(cboList, baseModelDTO.getLcStatus());
+        }
+        lifeCycleService.transCboStatus(codeCbos, baseModelDTO.getLcStatus());
+    }
+
+    /**
+     * 鐩镐技椤规煡璇�
+     *
+     * @param orderDTO 缂栫爜鐨勭浉鍏充俊鎭�
+     * @return 鏁版嵁鍒楄〃
+     */
+    @Override
+    public DataGrid<Map<String, String>> resembleQuery(CodeOrderDTO orderDTO) {
+        VciBaseUtil.alertNotNull(orderDTO, "鐢宠鐨勪俊鎭�", orderDTO.getCodeClassifyOid(), "鍒嗙被涓婚敭", orderDTO.getTemplateOid(), "妯℃澘涓婚敭");
+        CodeClassifyFullInfoBO fullInfoBO = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+        switchClassifyLevelOnOrder(templateVO, fullInfoBO, orderDTO);
+        switchDateAttrOnOrder(templateVO, orderDTO);
+        switchComponentAttrOnOrder(templateVO, orderDTO);
+        //闇�瑕佽幏鍙栨槸鍚︽湁鐩镐技鏌ヨ灞炴��
+        Map<String, CodeClassifyTemplateAttrVO> attrVOs = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getSamerepeatattrflag())).collect(Collectors.toMap(s -> s.getId(), t -> t));
+        if (CollectionUtils.isEmpty(attrVOs)) {
+            //閮芥病鏈夊睘鎬э紝鑲畾涓嶈兘鏌ヨ浜�
+            return new DataGrid<>();
+        }
+        Map<String, String> conditionMap = new HashMap<>();
+        //鎴戜滑棣栧厛鑾峰彇鏈夋病鏈夋煡璇㈣鍒�
+        CodeResembleRuleVO resembleRuleVO = Optional.ofNullable(getUseResembleRule(fullInfoBO, fullInfoBO.getCurrentClassifyVO())).orElseGet(() -> new CodeResembleRuleVO());
+        attrVOs.forEach((attrId, attrVO) -> {
+            String value = getValueFromOrderDTO(orderDTO, attrId);
+            if (value == null) {
+                value = "";
+            }
+            wrapperResembleConditionMap(value, resembleRuleVO, attrId, conditionMap);
+        });
+
+        //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
+        if (!CollectionUtils.isEmpty(conditionMap)) {
+            Map<String, String> andConditionMap = new HashMap<>();
+            andConditionMap.put("islastr", "1");
+            andConditionMap.put("islastv", "1");
+            if (StringUtils.isNotBlank(orderDTO.getOid())) {
+                andConditionMap.put("oid", QueryOptionConstant.NOTEQUAL + orderDTO.getOid());
+            }
+            conditionMap.putAll(andConditionMap);
+            PageHelper pageHelper = new PageHelper(-1);
+            pageHelper.addDefaultDesc("id");
+            return queryGrid(fullInfoBO.getTopClassifyVO().getBtmtypeid(), templateVO, conditionMap, pageHelper);
+        }
+        return new DataGrid<>();
+    }
+
+    /**
+     * 灏佽鐩镐技椤规煡璇㈢殑鏌ヨ鏉′欢鐨勬槧灏�
+     *
+     * @param value          鍊�
+     * @param resembleRuleVO 鐩镐技椤硅鍒�
+     * @param attrId         灞炴�х殑缂栧彿
+     * @param conditionMap   鏌ヨ鏉′欢
+     */
+    @Override
+    public void wrapperResembleConditionMap(String value, CodeResembleRuleVO resembleRuleVO, String attrId, Map<String, String> conditionMap) {
+        boolean ignoreSpace = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorespaceflag()) || VciBaseUtil.getBoolean(resembleRuleVO.getIgnoreallspaceflag());
+        if (StringUtils.isBlank(value)) {
+            //涓虹┖鐨勬椂鍊欏氨涓嶆煡璇㈠畠灏辨槸
+        } else {
+            String queryKey = "";
+            String queryValue = "";
+            boolean ignoreCase = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorecaseflag());
+            boolean ignoreWidth = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorewidthflag());
+            boolean trimAll = VciBaseUtil.getBoolean(resembleRuleVO.getIgnoreallspaceflag());
+            boolean trim = VciBaseUtil.getBoolean(resembleRuleVO.getIgnoreallspaceflag());
+            String temp = "";
+            if (ignoreCase && ignoreSpace && ignoreWidth) {
+                //蹇界暐澶у皬鍐欙紝涓斿幓绌猴紝蹇界暐鍏ㄥ崐瑙�
+                temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(to_single_byte('%s')) " + (trimAll ? ",' ','')" : ")");
+            } else if (ignoreCase && ignoreSpace && !ignoreWidth) {
+                //蹇界暐澶у皬鍐欍�佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
+                temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(%s) " + (trimAll ? ",' ','')" : ")");
+            } else if (ignoreCase && !ignoreSpace && ignoreWidth) {
+                //蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
+                temp = "UPPER(to_single_byte('%s'))";
+            } else if (!ignoreCase && ignoreSpace && ignoreWidth) {
+                //涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佸拷鐣ュ叏鍗婅
+                temp = (trimAll ? "REPLACE" : "TRIM") + "(to_single_byte('%s') " + (trimAll ? ",' ','')" : ")");
+            } else if (ignoreCase && !ignoreSpace && !ignoreWidth) {
+                //蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
+                temp = "UPPER(%s)";
+            } else if (!ignoreCase && !ignoreCase && ignoreWidth) {
+                //涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
+                temp = "to_single_byte('%s')";
+            } else if (!ignoreCase && ignoreSpace && !ignoreWidth) {
+                //涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
+                temp = (trimAll ? "REPLACE" : "TRIM") + "(%s " + (trimAll ? ",' ','')" : ")");
+            } else if (!ignoreCase && !ignoreSpace && !ignoreWidth) {
+                //涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
+                temp = "%s";
+            }
+            if (StringUtils.isNotBlank(resembleRuleVO.getLinkCharacter())) {
+                List<String> chars = VciBaseUtil.str2List(resembleRuleVO.getLinkCharacter());
+                for (int i = 0; i < chars.size(); i++) {
+                    String s = chars.get(i);
+                    temp = "replace(" + temp + ",'" + s + "','')";
+                }
+            }
+            queryValue = String.format(temp, (trim ? value.trim() : value));
+            temp = temp.replace("to_single_byte('%s')","to_single_byte(%s)");
+            queryKey = String.format(temp, "t."+attrId);
+            conditionMap.put(queryKey, QueryOptionConstant.OR + queryValue);
+        }
+    }
+
+    /**
+     * 浣跨敤鍒嗙被涓婚敭鑾峰彇鐩镐技鏌ヨ瑙勫垯
+     *
+     * @param codeClassifyOid 鍒嗙被涓婚敭
+     * @return 瑙勫垯锛屽鏋滀笉瀛樺湪浼氳繑鍥瀗ull
+     */
+    @Override
+    public CodeResembleRuleVO getUseResembleRuleByClassifyOid(String codeClassifyOid) {
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
+        return getUseResembleRule(classifyFullInfo, classifyFullInfo.getCurrentClassifyVO());
+    }
+
+    /**
+     * 鑾峰彇浣跨敤鐨勭浉浼兼煡璇㈣鍒�
+     *
+     * @param fullInfoBO        绫诲叏閮ㄤ俊鎭�
+     * @param currentClassifyVO 褰撳墠鐨勫垎绫�
+     * @return 瑙勫垯锛屽鏋滀笉瀛樺湪浼氳繑鍥濶ull
+     */
+    @Override
+    public CodeResembleRuleVO getUseResembleRule(CodeClassifyFullInfoBO fullInfoBO, CodeClassifyVO currentClassifyVO) {
+        if (currentClassifyVO == null) {
+            return null;
+        }
+        if (currentClassifyVO != null && StringUtils.isNotBlank(currentClassifyVO.getCodeResembleRuleOid())) {
+            //璇存槑宸茬粡瀛樺湪
+            return resembleRuleService.getObjectByOid(currentClassifyVO.getCodeResembleRuleOid());
+        }
+        if (StringUtils.isBlank(currentClassifyVO.getParentcodeclassifyoid())) {
+            return null;
+        }
+        Map<String, CodeClassifyVO> classifyVOMap = fullInfoBO.getParentClassifyVOs().stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+        return getUseResembleRule(fullInfoBO, classifyVOMap.getOrDefault(currentClassifyVO.getParentcodeclassifyoid(), null));
+    }
+
+
+    /**
+     * 妯℃澘灞炴�ц浆鎹负琛ㄥ崟瀹氫箟鐨勪俊鎭�
+     *
+     * @param templateVO      妯℃澘鐨勬樉绀哄璞�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿紝涓虹┖鐨勬椂鍊欙紝鑾峰彇妯℃澘鎵�灞炵殑鍒嗙被涓婚敭.鐢ㄤ簬浜х敓鍒嗙被娉ㄥ叆
+     * @return 琛ㄦ牸鐨勪俊鎭�
+     */
+    private UIFormDefineVO wrapperFormDefineByTemplate(CodeClassifyTemplateVO templateVO, String codeClassifyOid) {
+        UIFormDefineVO formDefineVO = new UIFormDefineVO();
+        formDefineVO.setOid(templateVO.getOid());
+        formDefineVO.setBtmType(templateVO.getBtmTypeId());
+        if (StringUtils.isBlank(codeClassifyOid)) {
+            codeClassifyOid = templateVO.getCodeclassifyoid();
+        }
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
+
+        List<UIFormItemVO> itemVOS = new ArrayList<>();
+        Map<String, List<CodeClassifyTemplateAttrVO>> attrGroupMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getAttributegroup())).collect(Collectors.groupingBy(s -> s.getAttributegroup()));
+        templateVO.getAttributes().forEach(attrVO -> {
+            UIFormItemVO formItemVO = templateAttr2FormField(attrVO, templateVO.getBtmTypeId());
+            itemVOS.add(formItemVO);
+        });
+        //澶勭悊灞炴�у垎缁�
+        if (!CollectionUtils.isEmpty(attrGroupMap)) {
+            //鎸夌収鍒嗙粍鐨勫睘鎬ф帓鍒楋紝鎵惧埌姣忎竴涓垎缁勭殑绗竴涓睘鎬�
+            for (String key : attrGroupMap.keySet()) {
+                List<CodeClassifyTemplateAttrVO> value = attrGroupMap.get(key);
+                //鎵惧埌杩欎釜鍒嗙粍鐨勫睘鎬х殑绗竴涓�
+                CodeClassifyTemplateAttrVO attrVO = value.stream().sorted(((o1, o2) -> o1.getOrdernum().compareTo(o2.getOrdernum()))).findFirst().get();
+                //鎴戜滑鎵惧埌杩欎釜灞炴�у湪鏈�缁堢殑itemVOs閲岀殑浣嶇疆
+                UIFormItemVO lineVO = new UIFormItemVO();
+                lineVO.setField(attrVO.getId() + "_line");
+                lineVO.setType("line");
+                lineVO.setText(key);
+                //鎵句綅缃�
+                for (int i = 0; i < itemVOS.size(); i++) {
+                    UIFormItemVO record = itemVOS.get(i);
+                    if (record.getField().equalsIgnoreCase(attrVO.getId())) {
+                        itemVOS.add(i, lineVO);
+                        break;
+                    }
+                }
+            }
+        }
+
+        CodeOrderDTO orderDTO = new CodeOrderDTO();
+        switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
+        if (!CollectionUtils.isEmpty(orderDTO.getData())) {
+            orderDTO.getData().forEach((key, value) -> {
+                for (int i = 0; i < itemVOS.size(); i++) {
+                    UIFormItemVO itemVO = itemVOS.get(i);
+                    if (itemVO.getField().equalsIgnoreCase(key)) {
+                        itemVO.setDefaultValue(value);
+                        break;
+                    }
+                }
+            });
+        }
+        formDefineVO.setItems(itemVOS);
+        //鏌ヨ鏄惁鏈夊垎绫绘敞鍏ョ殑
+        return formDefineVO;
+    }
+
+
+    /**
+     * 妯℃澘灞炴�ц浆鎹负琛ㄦ牸瀹氫箟鐨勪俊鎭�
+     *
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞�
+     * @param forEdit 鏄惁鏄紪杈戞墍闇�
+     * @return 琛ㄦ牸鐨勪俊鎭�
+     */
+    private UITableDefineVO wrapperTableDefineByTemplate(CodeClassifyTemplateVO templateVO,boolean forEdit) {
+        //灏佽淇℃伅
+        UITableDefineVO tableDefineVO = new UITableDefineVO();
+        tableDefineVO.setOid(templateVO.getOid());
+        tableDefineVO.setBtmType(templateVO.getBtmTypeId());
+        tableDefineVO.setDisplayQueryArea(true);
+        //鍓嶇浼氶粯璁ゅ垎椤电殑淇℃伅
+
+        //澶勭悊鎵�鏈夌殑鍒楋紝杩欎釜妯℃澘娌℃湁鍚堝苟鐨勮〃澶寸殑鎯呭喌
+        List<UITableFieldVO> fieldVOList = new ArrayList<>();
+        Map<String, String> comboxOrReferFieldMap = new HashMap<>();
+
+        templateVO.getAttributes().forEach(attrVO -> {
+            UITableFieldVO tableFieldVO = templateAttr2TableField(attrVO,forEdit);
+            if ("combox".equalsIgnoreCase(tableFieldVO.getFieldType())) {
+                comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField());
+            }
+            if ("refer".equalsIgnoreCase(tableFieldVO.getFieldType())) {
+                comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField());
+            }
+            if(StringUtils.isNotBlank(tableFieldVO.getEdit())){
+                tableDefineVO.setHasEditor(true);
+            }
+            fieldVOList.add(tableFieldVO);
+        });
+        List<List<UITableFieldVO>> cols = new ArrayList<>();
+        cols.add(fieldVOList);
+        tableDefineVO.setCols(cols);
+        Map<String, UITableFieldVO> fieldVOMap = fieldVOList.stream().collect(Collectors.toMap(s -> s.getField().toLowerCase(Locale.ROOT), t -> t));
+        //鏌ヨ灞炴��
+        List<CodeClassifyTemplateAttrVO> queryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getQueryattrflag())).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(queryAttrVOs)) {
+            List<UITableFieldVO> queryFieldVOs = new ArrayList<>();
+            queryAttrVOs.stream().forEach(attrVO -> {
+                String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
+                attrId = comboxOrReferFieldMap.getOrDefault(attrId, attrVO.getId()).toLowerCase(Locale.ROOT);
+                if (fieldVOMap.containsKey(attrId)) {
+                    queryFieldVOs.add(fieldVOMap.get(attrId));
+                }
+            });
+            tableDefineVO.setQueryColumns(queryFieldVOs);
+        }
+        //楂樼骇灞炴��
+        List<CodeClassifyTemplateAttrVO> seniorQueryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getSeniorqueryattrflag())).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(seniorQueryAttrVOs)) {
+            List<UITableFieldVO> queryFieldVOs = new ArrayList<>();
+            seniorQueryAttrVOs.stream().forEach(attrVO -> {
+                String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
+                attrId = comboxOrReferFieldMap.getOrDefault(attrId, attrId).toLowerCase(Locale.ROOT);
+                if (fieldVOMap.containsKey(attrId)) {
+                    queryFieldVOs.add(fieldVOMap.get(attrId));
+                }
+            });
+            tableDefineVO.setSeniorQueryColumns(queryFieldVOs);
+        }
+        return tableDefineVO;
+    }
+
+    /**
+     * 妯℃澘灞炴�ц浆鎹负琛ㄦ牸鏄剧ず鐨勯厤缃�
+     *
+     * @param attrVO 妯℃澘灞炴��
+     * @param forEdit 鏄惁鏄紪杈戞墍闇�
+     * @return 琛ㄦ牸鐨勫瓧娈�
+     */
+    @Override
+    public UITableFieldVO templateAttr2TableField(CodeClassifyTemplateAttrVO attrVO,boolean forEdit) {
+        UITableFieldVO fieldVO = new UITableFieldVO();
+        if (SECRET_FILED.equalsIgnoreCase(attrVO.getId())) {
+            attrVO.setEnumid(OsEnumServiceImpl.MY_DATA_SECRET);
+        }
+        fieldVO.setField(attrVO.getId());
+        fieldVO.setTitle(attrVO.getName());
+        fieldVO.setFieldType(vciFieldTypeMap.getOrDefault(attrVO.getAttributedatatype(), "text"));
+        fieldVO.setSort(true);
+        fieldVO.setSortField(fieldVO.getField());
+        fieldVO.setQueryField(fieldVO.getField());
+        if (forEdit){
+            fieldVO.setHidden(!VciBaseUtil.getBoolean(attrVO.getFormdisplayflag()));
+        }else {
+            fieldVO.setHidden(!VciBaseUtil.getBoolean(attrVO.getTabledisplayflag()));
+        }
+        if (attrVO.getAttrTableWidth() != null && attrVO.getAttrTableWidth() > 0) {
+            fieldVO.setMinWidth(attrVO.getAttrTableWidth());
+            fieldVO.setWidth(attrVO.getAttrTableWidth());
+        }
+        //鐪嬬湅鏄惁鏈夋灇涓�
+        if ((StringUtils.isNotBlank(attrVO.getEnumString())
+                && !"[]".equalsIgnoreCase(attrVO.getEnumString())) ||
+                StringUtils.isNotBlank(attrVO.getEnumid())) {
+            fieldVO.setFieldType("combox");
+            fieldVO.setField(fieldVO.getField() + "Text");
+            fieldVO.setComboxKey(attrVO.getEnumid());
+            if (StringUtils.isNotBlank(attrVO.getEnumString())) {
+                //鎸囧畾鐨勪笅鎷夋鍐呭
+                fieldVO.setData(JSONObject.parseArray(attrVO.getEnumString(), KeyValue.class));
+                if (StringUtils.isBlank(attrVO.getEnumid())) {
+                    fieldVO.setComboxKey(fieldVO.getField() + "_data");
+                }
+            }else {
+                List<KeyValue> osEnumItemVOList= enumService.getEnum(attrVO.getEnumid());
+                fieldVO.setData(osEnumItemVOList);
+            }
+        }
+        //鐪嬫槸鍚︽湁鍙傜収
+        if (StringUtils.isNotBlank(attrVO.getReferbtmid()) || StringUtils.isNotBlank(attrVO.getReferConfig())) {
+            fieldVO.setFieldType("refer");
+            fieldVO.setQueryField(fieldVO.getField());
+            fieldVO.setField(fieldVO.getField() + "name");
+            fieldVO.setShowField(fieldVO.getField());
+            if (StringUtils.isNotBlank(attrVO.getReferConfig())) {
+                //閰嶇疆鐨勫唴瀹�
+                fieldVO.setReferConfig(JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class));
+            } else {
+                UIFormReferVO formReferVO = new UIFormReferVO();
+                formReferVO.setType("default");
+                formReferVO.setReferType(attrVO.getReferbtmid());
+                fieldVO.setReferConfig(formReferVO);
+            }
+        }
+        if (VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(fieldVO.getSortField())) {
+            fieldVO.setField("lcstatus_text");
+        }
+        Map<String, String> eventJsMap = new HashMap<>();
+        //瓒呴摼鎺ヤ笌妯℃澘鏄簰鏂�
+        if (StringUtils.isNotBlank(attrVO.getTablehref())) {
+            String event = fieldVO.getSortField() + "_href";
+            eventJsMap.put(event, attrVO.getTablehref());
+            fieldVO.setTemplet("function(d){ return '<a class=\"layui-btn layui-btn-intable \" lay-event=\"" + event + "\">d." + fieldVO.getField() + "</a>';}");
+        }
+        if (StringUtils.isNotBlank(attrVO.getTabledisplayjs())) {
+            //鐩存帴鍐檉unction(d){ return xxxxx;}
+            fieldVO.setTemplet(attrVO.getTabledisplayjs());
+        }
+        if (StringUtils.isBlank(fieldVO.getTemplet()) && VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributedatatype())) {
+            fieldVO.setTemplet("function(d){return $webUtil.formateBoolean(d." + fieldVO.getField() + ");}");
+        }
+        fieldVO.setOptionJsMap(eventJsMap);
+        fieldVO.setStyle(attrVO.getTabledisplaystyle());
+        //鍒楄〃閲屼笉鍏佽鐩存帴缂栬緫
+        fieldVO.setDateFormate(attrVO.getCodedateformat());
+        return fieldVO;
+    }
+
+    /**
+     * 瀵嗙骇鐨勫瓧娈�
+     */
+    public static final String SECRET_FILED = "secretgrade";
+
+    /**
+     * 妯℃澘灞炴�ц浆鎹负琛ㄥ崟鐨勫瓧娈�
+     *
+     * @param attrVO  妯℃澘灞炴��
+     * @param btmType 涓氬姟绫诲瀷
+     * @return 琛ㄥ崟鐨勫瓧娈�
+     */
+    @Override
+    public UIFormItemVO templateAttr2FormField(CodeClassifyTemplateAttrVO attrVO, String btmType) {
+        UIFormItemVO itemVO = new UIFormItemVO();
+        if (SECRET_FILED.equalsIgnoreCase(attrVO.getId())) {
+            attrVO.setEnumid(OsEnumServiceImpl.MY_DATA_SECRET);
+        }
+        itemVO.setField(attrVO.getId());
+        itemVO.setText(attrVO.getName());
+        itemVO.setType(vciFieldTypeMap.getOrDefault(attrVO.getAttributedatatype(), "text"));
+        if (VciBaseUtil.getBoolean(attrVO.getTextareaflag())) {
+            itemVO.setType("textarea");
+        }
+        if (VciFieldTypeEnum.VTLong.name().equalsIgnoreCase(attrVO.getAttributedatatype())
+                || VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(attrVO.getAttributedatatype())
+                || VciFieldTypeEnum.VTDouble.name().equalsIgnoreCase(attrVO.getAttributedatatype())) {
+            itemVO.setVerify("number");
+        }
+        itemVO.setReadOnly(VciBaseUtil.getBoolean(attrVO.getReadonlyflag()));
+        itemVO.setKeyAttr(VciBaseUtil.getBoolean(attrVO.getKeyattrflag()));
+        itemVO.setRequired(VciBaseUtil.getBoolean(attrVO.getRequireflag()));
+        itemVO.setDefaultValue(attrVO.getDefaultvalue());
+        itemVO.setDateFormate(attrVO.getCodedateformat());
+        itemVO.setHidden(!VciBaseUtil.getBoolean(attrVO.getFormdisplayflag()));
+        itemVO.setVerify(attrVO.getVerifyrule());
+        itemVO.setPrefix(attrVO.getPrefixvalue());
+        itemVO.setSuffix(attrVO.getSuffixvalue());
+        itemVO.setTooltips(attrVO.getExplain());
+        itemVO.setSelectLibFlag(attrVO.getLibraryIdentification());
+        //鐪嬬湅鏄惁鏈夋灇涓�
+        if ((StringUtils.isNotBlank(attrVO.getEnumString())
+                && !"[]".equalsIgnoreCase(attrVO.getEnumString())) ||
+                StringUtils.isNotBlank(attrVO.getEnumid())) {
+            itemVO.setType("combox");
+            itemVO.setComboxKey(attrVO.getEnumid());
+            if (StringUtils.isNotBlank(attrVO.getEnumString())) {
+                //鎸囧畾鐨勪笅鎷夋鍐呭
+                itemVO.setData(JSONObject.parseArray(attrVO.getEnumString(), KeyValue.class));
+                if (StringUtils.isBlank(attrVO.getEnumid())) {
+                    itemVO.setComboxKey(itemVO.getField() + "_data");
+                }
+            }
+        }
+        //鐪嬫槸鍚︽湁鍙傜収
+        if (StringUtils.isNotBlank(attrVO.getReferbtmid()) || StringUtils.isNotBlank(attrVO.getReferConfig())) {
+            itemVO.setType("refer");
+            itemVO.setShowField(itemVO.getField() + "name");
+            if (StringUtils.isNotBlank(attrVO.getReferConfig())) {
+                //閰嶇疆鐨勫唴瀹�
+                itemVO.setReferConfig(JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class));
+            } else {
+                UIFormReferVO formReferVO = new UIFormReferVO();
+                formReferVO.setType("default");
+                formReferVO.setReferType(attrVO.getReferbtmid());
+                itemVO.setReferConfig(formReferVO);
+            }
+        }
+
+        //濡傛灉鏄粍鍚堣鍒欙紝鍒嗙被娉ㄥ叆鐨勶紝鏄剧ず涓哄彧璇�
+        if (StringUtils.isNotBlank(attrVO.getComponentrule())) {
+            itemVO.setReadOnly(true);
+            itemVO.setTooltips("鏈睘鎬т负缁勫悎瑙勫垯");
+            itemVO.setRequired(false);
+        }
+        if (StringUtils.isNotBlank(attrVO.getClassifyinvokeattr())) {
+            itemVO.setReadOnly(!VciBaseUtil.getBoolean(attrVO.getClassifyinvokeeditflag()));
+            itemVO.setTooltips("鏈睘鎬ф槸鍒嗙被娉ㄥ叆");
+            itemVO.setRequired(false);
+        }
+
+        if (VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(itemVO.getField())) {
+            //鏄敓鍛藉懆鏈熺姸鎬�
+            itemVO.setType("combox");
+            itemVO.setComboxKey(btmType + LC_STATUS_SUBFIX);
+        }
+        return itemVO;
+    }
+
+    /**
+     * 灞炴�х被鍨嬩笌js涓殑瀛楁绫诲瀷鐨勬槧灏�
+     */
+    private static Map<String, String> vciFieldTypeMap = new HashMap<String, String>() {{
+        put(VciFieldTypeEnum.VTString.name(), "text");
+        put(VciFieldTypeEnum.VTInteger.name(), "text");
+        put(VciFieldTypeEnum.VTLong.name(), "text");
+        put(VciFieldTypeEnum.VTDouble.name(), "text");
+        put(VciFieldTypeEnum.VTClob.name(), "text");
+        put(VciFieldTypeEnum.VTBoolean.name(), "truefalse");
+        put(VciFieldTypeEnum.VTDateTime.name(), "datetime");
+        put(VciFieldTypeEnum.VTDate.name(), "datetime");
+        put(VciFieldTypeEnum.VTTime.name(), "datetime");
+        put(VciFieldTypeEnum.VTFilePath.name(), "file");
+    }};
+
+    /**
+     * 鏍囪娴佺▼涓笟鍔℃暟鎹槸鍚﹂�氳繃
+     *
+     * @param oid     涓氬姟鏁版嵁涓婚敭
+     * @param btmName 涓氬姟绫诲瀷
+     * @param pass    鏄惁閫氳繃
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult markDataPassing(String oid, String btmName, Boolean pass) {
+        VciBaseUtil.alertNotNull(oid, "涓氬姟鏁版嵁涓婚敭", btmName, "涓氬姟绫诲瀷", pass, "鏍囪绫诲瀷");
+        boolean flag = false;
+        try {
+            ClientBusinessObjectOperation operation = new ClientBusinessObjectOperation();
+            ClientBusinessObject data = operation.readBusinessObjectById(oid, btmName);
+            if (data == null || StringUtils.isBlank(data.getOid())) {
+                return BaseResult.fail(DATA_OID_NOT_EXIST);
+            }
+            data.setAttributeValue("passing", String.valueOf(pass));
+            flag = operation.updateBuinessObject(data);
+        } catch (VCIError e) {
+            e.printStackTrace();
+        }
+        if (flag) {
+            return BaseResult.success();
+        } else {
+            return BaseResult.fail("鏍囪澶辫触");
+        }
+    }
+
+    /**
+     * 浣跨敤鍒嗙被鐨勪富閿幏鍙栦笟鍔℃暟鎹�
+     *
+     * @param btmType     涓氬姟绫诲瀷
+     * @param queryObject 鏌ヨ瀵硅薄
+     * @return 琛ㄦ牸鐨勬樉绀哄璞″��
+     */
+    @Override
+    public DataGrid<Map<String, String>> getTableDataByExecutionId(String btmType, BaseQueryObject queryObject) {
+        VciBaseUtil.alertNotNull(btmType, "涓氬姟绫诲瀷");
+        if (queryObject == null) {
+            queryObject = new BaseQueryObject();
+        }
+        if (queryObject.getConditionMap() == null) {
+            queryObject.setConditionMap(new HashMap<>());
+        }
+        Map<String, String> conditionMap = queryObject.getConditionMap();
+        PageHelper pageHelper = queryObject.getPageHelper();
+        if (!conditionMap.containsKey("oid")) {
+            throw new VciBaseException("涓氬姟鏁版嵁涓婚敭涓嶈兘涓虹┖");
+        }
+        List<String> oidList = VciBaseUtil.str2List(conditionMap.get("oid"));
+        Map<String, String> oidMap = new HashMap<>();
+        if (conditionMap.get("oid").contains(",")) {
+            oidMap.put("oid", QueryOptionConstant.IN +"("+ VciBaseUtil.toInSql(oidList.toArray(new String[0])) + ")");
+        } else {
+            oidMap.put("oid", conditionMap.get("oid"));
+        }
+        if (CollectionUtils.isEmpty(oidMap)) {
+            throw new VciBaseException("涓氬姟鏁版嵁涓婚敭涓嶈兘涓虹┖");
+        }
+        List<ClientBusinessObject> cbos = boService.queryCBO(btmType, oidMap);
+        if (CollectionUtils.isEmpty(cbos)) {
+            throw new VciBaseException("鏈壘鍒颁笟鍔℃暟鎹�");
+        }
+        ClientBusinessObject cbo = cbos.get(0);
+        String templateOid = cbo.getAttributeValue("CODETEMPLATEOID");
+        Map<String, String> templateOidMap = new HashMap<>();
+        templateOidMap.put("oid", templateOid);
+        List<CodeClassifyTemplateDO> templateDOList = boService.queryObject(CodeClassifyTemplateDO.class, templateOidMap);
+        templateOidMap.clear();
+        templateOidMap.put("CLASSIFYTEMPLATEOID",templateOid);
+        List<CodeClassifyTemplateAttrDO> attrDOList = boService.queryObject(CodeClassifyTemplateAttrDO.class, templateOidMap);
+        if (CollectionUtils.isEmpty(templateDOList)) {
+            logger.error("鎵句笉鍒颁笟鍔℃暟鎹叧鑱旂殑妯℃澘锛屾ā鏉夸富閿細" + templateOid);
+            throw new VciBaseException("鎵句笉鍒颁笟鍔℃暟鎹叧鑱旂殑妯℃澘");
+        }
+        CodeClassifyTemplateVO templateVO = templateService.codeClassifyTemplateDO2VO(templateDOList.get(0));
+        templateVO.setAttributes(templateAttrService.codeClassifyTemplateAttrDO2VOs(attrDOList));
+        try {
+            if (oidList.size() > 1){
+                DataGrid<Map<String,String>> allDataGrid = new DataGrid<>();
+                List<Map<String,String>> allData = new ArrayList<>();
+                oidList.forEach(oid -> {
+                    Map<String,String> condition = new HashMap<>();
+                    condition.put("oid",oid);
+                    DataGrid<Map<String, String>> dataGrid = queryGrid(btmType, templateVO, condition, pageHelper);
+                    allData.addAll(dataGrid.getData());
+                });
+                allDataGrid.setData(allData);
+                return allDataGrid;
+            }else {
+                return queryGrid(btmType, templateVO, conditionMap, pageHelper);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+            return null;
+        }
+    }
+
+    /**
+     * 鎵归噺淇濆瓨娴佺▼鎵ц椤甸潰淇敼鐨勫唴瀹�
+     *
+     * @param orderDTOList 缂栫爜鐩稿叧鐨勪俊鎭紝涓嶉渶瑕佺爜娈电殑淇℃伅
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public BaseResult batchUpdateCode(List<CodeOrderDTO> orderDTOList) {
+        VciBaseUtil.alertNotNull(orderDTOList,"缂栫爜鐢宠鐩稿叧鐨勫睘鎬у唴瀹�");
+        orderDTOList.forEach(orderDTO -> {
+            VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬х殑鍐呭閮戒负绌�", orderDTO.getOid(), "鏁版嵁涓婚敭",
+                    orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭");
+        });
+        Map<String, CodeOrderDTO> orderDTOMap = orderDTOList.stream().filter(orderDTO -> orderDTO != null && StringUtils.isNotBlank(orderDTO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+        List<ClientBusinessObject> updateList = new ArrayList<>();
+        // 搴旇閮芥槸涓�涓垎绫讳笅鐨勪笟鍔℃暟鎹紝鎵剧涓�鏉$殑灏辫
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTOList.get(0).getCodeClassifyOid());
+        Map<String,String> cboOidMap = new HashMap<>();
+        if (CollectionUtils.isEmpty(orderDTOMap.keySet())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        cboOidMap.put("oid",QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(orderDTOMap.keySet().toArray(new String[0])) + ")");
+        List<ClientBusinessObject> cboList = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), cboOidMap);
+        if (CollectionUtils.isEmpty(cboList)){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        BatchCBO batchCBO = new BatchCBO();
+        CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid());
+        Map<String, ClientBusinessObject> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+        orderDTOMap.keySet().stream().forEach(oid -> {
+            CodeOrderDTO orderDTO = orderDTOMap.get(oid);
+            ClientBusinessObject cbo = cboMap.get(oid);
+            if (!cbo.getTs().contains(VciDateUtil.date2Str(orderDTO.getTs(), VciDateUtil.DateTimeFormat))) {
+                throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯");
+            }
+            if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) {
+                throw new VciBaseException("鏁版嵁涓嶆槸{0}鐨勭姸鎬侊紝涓嶅厑璁镐慨鏀�", new String[]{CodeDefaultLC.EDITING.getText()});
+            }
+            //1. 鍒ゆ柇蹇呰緭椤�
+            CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+            checkRequiredAttrOnOrder(templateVO, orderDTO);
+            //2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
+            switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
+            //3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
+            switchComponentAttrOnOrder(templateVO, orderDTO);
+            //4.鏍¢獙瑙勫垯
+            checkVerifyOnOrder(templateVO, orderDTO);
+            //5.鍒ゆ柇鍏抽敭灞炴��
+            checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
+            //6.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭�
+            checkEnumOnOrder(templateVO, orderDTO);
+            //7.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
+            switchDateAttrOnOrder(templateVO, orderDTO);
+            //榛樿鐨勫唴瀹逛笉鑳藉彉锛屾墍浠ュ彧闇�瑕佹嫹璐濊嚜瀹氫箟鐨勭浉鍏冲睘鎬у嵆鍙�
+            copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
+            //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀�
+            cbo.setDescription(orderDTO.getDescription());
+            cbo.setName(orderDTO.getName());
+            try {
+                cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
+                cbo.setAttributeValue("name", orderDTO.getName());
+            } catch (VCIError e) {
+                e.printStackTrace();
+            }
+            batchCBO.getUpdateCbos().add(cbo);
+            updateList.add(cbo);
+        });
+        boService.persistenceBatch(batchCBO);
+        batchSaveSelectChar(firstTemplateVO, cboList);
+        return BaseResult.success();
+    }
+
+    /**
+     * 浣跨敤鍒嗙被鐨勭紪鍙疯矾寰勶紝鑾峰彇琛ㄦ牸鐨勭浉鍏冲畾涔�
+     *
+     * @param codeClassifyIdPath 鍒嗙被鐨勭紪鍙疯矾寰勶紝蹇呴』鏄粠椤跺眰鑺傜偣寮�濮嬶紝xxx/yy/zz杩欐牱鐨勬牸寮�
+     * @param functionId         鍔熻兘鐨勭紪鍙�
+     * @return UI鐩稿叧鐨勪俊鎭紙浠呭寘鍚〃鏍�)
+     */
+    @Override
+    public MdmUIInfoVO getUIInfoByClassifyIdPath(String codeClassifyIdPath, String functionId) {
+        CodeClassifyVO classifyVO = classifyService.getObjectByIdPath(codeClassifyIdPath);
+        if(classifyVO !=null){
+            return getUIInfoByClassifyOid(classifyVO.getOid(),functionId);
+        }
+        return null;
+    }
+
+    /**
+     * 浣跨敤鍒嗙被鐨勭紪鍙疯矾寰勶紝鑾峰彇琛ㄥ崟鐨勭浉鍏冲畾涔�
+     *
+     * @param idPath 缂栧彿鐨勮矾寰勶紝蹇呴』浠庨《灞傝妭鐐瑰紑濮嬶紝xx/yyy/zz
+     * @return UI鐩稿叧鐨勪俊鎭紙浠呭寘鍚〃鍗�)
+     */
+    @Override
+    public MdmUIInfoVO getFormDefineByClassifyIdPath(String idPath) {
+        CodeClassifyVO classifyVO = classifyService.getObjectByIdPath(idPath);
+        if(classifyVO !=null){
+            return getFormDefineByClassifyOid(classifyVO.getOid());
+        }
+        return null;
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmIOServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmIOServiceImpl.java
new file mode 100644
index 0000000..6a19628
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmIOServiceImpl.java
@@ -0,0 +1,4012 @@
+package org.springblade.code.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.vci.corba.common.VCIError;
+import com.vci.file.util.VciZipUtil;
+import com.vci.starter.poi.bo.*;
+import com.vci.starter.poi.util.ExcelUtil;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.enumpck.BooleanEnum;
+import com.vci.starter.web.enumpck.UserSecretEnum;
+import com.vci.starter.web.enumpck.VciFieldTypeEnum;
+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.toolmodel.DateConverter;
+import com.vci.starter.web.util.*;
+import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.pageModel.KeyValue;
+import com.vci.web.pageModel.OsLifeCycleVO;
+import com.vci.web.pageModel.UIFormReferVO;
+import com.vci.web.redis.RedisService;
+import com.vci.web.service.OsLifeCycleServiceI;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.service.WebSecretServiceI;
+import com.vci.web.service.impl.FormulaServiceImpl;
+import com.vci.web.util.PlatformClientUtil;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFRichTextString;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.RichTextString;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.code.bo.CodeClassifyFullInfoBO;
+import org.springblade.code.bo.CodeTemplateAttrSqlBO;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.dto.CodeExportAttrDTO;
+import org.springblade.code.dto.CodeOrderDTO;
+import org.springblade.code.enumpack.CodeLevelTypeEnum;
+import org.springblade.code.lifecycle.CodeAllCodeLC;
+import org.springblade.code.lifecycle.CodeDefaultLC;
+import org.springblade.code.service.*;
+import org.springblade.code.vo.pagemodel.*;
+import org.springblade.code.vo.universalInter.attrmap.DataObjectVO;
+import org.springblade.code.vo.universalInter.attrmap.RowDatas;
+import org.springblade.code.vo.universalInter.result.xml.XMLResultDataObjectDetailDO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.stream.Collectors;
+
+import static org.springblade.code.constant.MdmEngineConstant.*;
+
+
+/**
+ * 涓绘暟鎹鍏ュ鍑烘湇鍔�
+ * @author weidy
+ * @date 2022-3-6
+ */
+@Service
+public class MdmIOServiceImpl implements MdmIOServiceI {
+
+
+    @Value("${batchadd.exportattr.type:鍩烘湰淇℃伅}")
+    public String BATCHADD_EXCEPORT_ATTR_TYPE;
+
+
+    /**
+     * 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
+     */
+    @Autowired
+    private OsLifeCycleServiceI lifeCycleService;
+
+    @Autowired
+    private PlatformClientUtil platformClientUtil;
+    /**
+     * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉� 鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyProcessTempServiceI codeClassifyProcessTempService;
+    /**
+     * 涓婚搴撳垎绫荤殑鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyServiceI classifyService;
+
+    @Autowired
+    private CodeClassifyTemplateServiceI templateServiceI;
+    /**
+     * 涓绘暟鎹紩鎿庣殑鏈嶅姟
+     */
+    @Autowired
+    private MdmEngineServiceI engineService;
+
+    /**
+     * 瑙勫垯鐨勬湇鍔�
+     */
+    @Autowired
+    private CodeRuleServiceI ruleService;
+
+    /**
+     * 鏁版嵁鐨勬湇鍔�
+     */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+     * 鍏紡鐨勬湇鍔�
+     */
+    @Autowired
+    private FormulaServiceImpl formulaService;
+
+    /**
+     * 缂撳瓨鏈嶅姟
+     */
+    @Autowired
+    private RedisService redisService;
+
+    /**
+     * 鍏抽敭灞炴��
+     */
+    public static final String KEY_ATTR_CHAR = "鈽�";
+
+    /**
+     * 瀛楁
+     */
+    public static final String ROW_INDEX = "LAY_TABLE_INDEX";
+    /**
+     * 蹇呰緭
+     */
+    public static final String REQUIRED_CHAR = "*";
+    /**
+     * 鏇挎崲瀛楃
+     */
+    public static final String SPECIAL_CHAR  = "VCI";
+    /**
+     * 寮哄埗鍒嗛〉鐨勬暟閲�
+     */
+    public static final int LIMIT = 10000;
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 鍏抽敭灞炴�х殑閰嶇疆
+     */
+    @Autowired
+    private CodeKeyAttrRepeatRuleServiceI keyRuleService;
+
+    /**
+     * 缂栫爜鐢熸垚鏈嶅姟绫�
+     */
+    @Autowired
+    private MdmProductCodeServiceI productCodeService;
+
+    /**
+     * 妯℃澘鐨勬湇鍔�
+     */
+    @Autowired
+    private CodeClassifyTemplateServiceI templateService;
+
+    /**
+     * 瀵嗙骇鐨勬湇鍔�
+     */
+    @Autowired
+    private WebSecretServiceI secretService;
+
+    /**
+     * 瀵煎嚭涓婚搴撶殑鏁版嵁
+     *
+     * @param exportAttrDTO 瀵煎嚭鐩稿叧鐨勯厤缃紝蹇呴』瑕佹湁涓婚搴撳垎绫荤殑涓婚敭
+     * @return 瀵煎嚭鐨別xcel鐨勬枃浠�
+     */
+    @Override
+    public String exportCode(CodeExportAttrDTO exportAttrDTO) {
+        VciBaseUtil.alertNotNull(exportAttrDTO,"瀵煎嚭鐨勯厤缃�",exportAttrDTO.getCodeClassifyOid(),"涓婚搴撳垎绫荤殑涓婚敭");
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(exportAttrDTO.getCodeClassifyOid());
+        //鑾峰彇鏈�鏂扮殑妯℃澘
+        CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(exportAttrDTO.getCodeClassifyOid());
+        //鍏堟煡璇㈡暟鎹�
+        String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmtypeid();
+        Map<String, String> conditionMap = exportAttrDTO.getConditionMap();
+        if(conditionMap == null){
+            conditionMap = new HashMap<>();
+        }
+        if(conditionMap.containsKey(VciQueryWrapperForDO.OID_FIELD)){
+            conditionMap.put(VciQueryWrapperForDO.OID_FIELD,QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(conditionMap.get(VciQueryWrapperForDO.OID_FIELD)) + ")");
+        }
+        PageHelper pageHelper = new PageHelper(exportAttrDTO.getLimit()==null?-1:exportAttrDTO.getLimit());
+        pageHelper.setPage(exportAttrDTO.getPage()==null?1:exportAttrDTO.getPage());
+        pageHelper.setSort(exportAttrDTO.getSort());
+        pageHelper.setOrder(exportAttrDTO.getOrder());
+
+        pageHelper.addDefaultDesc("createTime");
+        conditionMap.put("codeclsfpath","*" + exportAttrDTO.getCodeClassifyOid() + "*");
+
+        //鍏堟煡璇㈡�绘暟
+        int total = 0;
+        if(exportAttrDTO.getEndPage()!=null && exportAttrDTO.getEndPage()>0
+                &&exportAttrDTO.getPage() !=null && exportAttrDTO.getPage() >0
+                &&exportAttrDTO.getEndPage()>exportAttrDTO.getPage()){
+            //浠庡灏戦〉鍒板灏戦〉鐨勬煡璇㈡柟寮忥紝
+            for(int i = exportAttrDTO.getPage() ;i <= exportAttrDTO.getEndPage();i++){
+                PageHelper thisPage = new PageHelper(exportAttrDTO.getLimit()==null?-1:exportAttrDTO.getLimit());
+                thisPage.setPage(exportAttrDTO.getPage()==null?1:exportAttrDTO.getPage());
+                thisPage.setSort(exportAttrDTO.getSort());
+                thisPage.setOrder(exportAttrDTO.getOrder());
+                thisPage.addDefaultDesc("createTime");
+                total += boService.queryCount(btmTypeId, conditionMap);
+            }
+        }else{
+            total=boService.queryCount(btmTypeId, conditionMap);
+        }
+        List<String> selectFieldList = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(exportAttrDTO.getAttrIdIndexMap())){
+            selectFieldList = exportAttrDTO.getAttrIdIndexMap().values().stream().map(s->s.toLowerCase(Locale.ROOT)).collect(Collectors.toList());
+        }else{
+            selectFieldList = templateVO.getAttributes().stream().filter(s->VciBaseUtil.getBoolean(s.getFormdisplayflag())
+                    ||VciBaseUtil.getBoolean(s.getTabledisplayflag())).map(s->s.getId().toLowerCase(Locale.ROOT)).collect(Collectors.toList());
+        }
+        //鍙傜収璁╁钩鍙扮洿鎺ユ煡璇㈠氨琛�
+        List<String> finalSelectFieldList = selectFieldList;
+        List<CodeClassifyTemplateAttrVO> referAttrVOs = templateVO.getAttributes().stream().filter(
+                s -> StringUtils.isNotBlank(s.getReferbtmid())
+                        &&
+                        (finalSelectFieldList.size() ==0 || finalSelectFieldList.contains(s.getId().toLowerCase(Locale.ROOT)))
+        ).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(referAttrVOs)){
+            for (int i = 0; i < referAttrVOs.size(); i++) {
+                selectFieldList.add(referAttrVOs.get(i).getId() + ".name");
+            }
+        }
+        List<String> excelNameList = new CopyOnWriteArrayList<>();
+        String tempFolder = LocalFileUtil.getDefaultTempFolder();
+
+        if(total>LIMIT){
+            //鍒嗙粍鏉ユ墽琛�
+            int queryCount = (total-total%LIMIT)/LIMIT;
+            if(total%LIMIT>0){
+                queryCount = queryCount + 1;
+            }
+            List<Integer> indexList = new ArrayList<>();
+            for (int i = 0; i <queryCount ; i++) {
+                indexList.add(i);
+            }
+            Map<String, String> finalConditionMap = conditionMap;
+            //骞惰鏌ヨ鐪嬬湅
+            SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+            indexList.parallelStream().forEach(index->{
+                //绾跨▼鐨勬柟寮忥紝鎵�浠ラ渶瑕佽缃綋鍓嶇敤鎴�
+                VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+                PageHelper thisPage = new PageHelper(LIMIT);
+                thisPage.setPage(index+1);
+                thisPage.setSort(exportAttrDTO.getSort());
+                thisPage.setOrder(exportAttrDTO.getOrder());
+                thisPage.addDefaultDesc("createTime");
+                selectDataAndExportExcelName(btmTypeId, finalConditionMap,thisPage,finalSelectFieldList,
+                        classifyFullInfo,templateVO,exportAttrDTO,
+                        excelNameList,tempFolder,index);
+            });
+        }else{
+            pageHelper.setLimit(total);
+            pageHelper.setPage(1);
+            selectDataAndExportExcelName(btmTypeId,conditionMap,pageHelper,finalSelectFieldList,
+                    classifyFullInfo,templateVO,exportAttrDTO,
+                    excelNameList,tempFolder,1);
+        }
+        if(excelNameList.size() ==0){
+            throw new VciBaseException("娌℃湁鏁版嵁鍙互琚鍑�");
+        }
+        if(excelNameList.size() == 1){
+            return excelNameList.get(0);
+        }
+        //鏄涓紝鎴戜滑闇�瑕佹墦鎴愬帇缂╁寘
+
+        String zipFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + classifyFullInfo.getCurrentClassifyVO().getId() + "_" + classifyFullInfo.getCurrentClassifyVO().getName() + "_瀵煎嚭_" + excelNameList.size()+".zip";
+        VciZipUtil zipUtil = new VciZipUtil();
+        File file = new File(tempFolder);
+        zipUtil.addFileToZip(file,zipFileName);
+        File[] files = file.listFiles();
+        for (int i = 0; i < files.length; i++) {
+            LocalFileUtil.deleteTempFile(files[i],false);
+        }
+        LocalFileUtil.deleteTempFile(file,true);
+        return zipFileName;
+    }
+
+    /**
+     * 鎵归噺鐢宠锛氶�夊彇閫変腑鍒嗙被涓嬬殑鎵�鏈夋ā鏉垮叧閿睘鎬э紝鐩镐技灞炴�э紝蹇呭~灞炴�э紝鍐欏叆execl涓�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @return excel鐨勬枃浠跺湴鍧�
+     */
+    @Override
+    public  String downloadTopImportExcel(String codeClassifyOid){
+        List<CodeClassifyTemplateVO> templateVOList=new ArrayList<>();
+        VciBaseUtil.alertNotNull("瀵煎嚭妯℃澘","瀵煎嚭鐨勯厤缃�",codeClassifyOid,"涓婚搴撳垎绫荤殑涓婚敭");
+        CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
+        templateVOList= templateService.childTemplates(codeClassifyOid);
+        List<CodeClassifyVO>  codeClassifyVOS=classifyService.getIdPathToNamePathByParentId(codeClassifyOid,true);
+        WriteExcelOption eo = new WriteExcelOption();
+        LinkedHashMap<String,CodeClassifyTemplateAttrVO> allFieldToOutNameMap=new LinkedHashMap<>();
+        templateVOList.stream().forEach(templateVO -> {
+            //缁勫悎鏍煎紡鐨勪笉瀵煎叆锛�
+            // 鏋氫妇鐨勬彁渚涘簭鍒楃殑閫夋嫨
+            //鏃堕棿鍏ㄩ儴缁熶竴涓簓yyy-MM-dd HH:mm:ss
+            //鍙傜収鐨勮嚜琛岃緭鍏ュ悕绉�
+            //鍒嗙被娉ㄥ叆鐨勪笉鐢紝閮芥槸瀵煎叆鍚庤嚜鍔ㄥ鐞嗙殑
+            //缂栫爜锛岀姸鎬佺瓑瀛楁涓嶅鍏�
+            List<CodeClassifyTemplateAttrVO> templateAttrVOS = templateVO.getAttributes().stream().filter(s ->
+                    !DEFAULT_ATTR_LIST.contains(s.getId())
+                            && StringUtils.isBlank(s.getComponentrule())
+                            && StringUtils.isBlank(s.getClassifyinvokeattr())
+                            && (VciBaseUtil.getBoolean(s.getFormdisplayflag()))
+            ).collect(Collectors.toList());
+            if(CollectionUtils.isEmpty(templateAttrVOS)){
+                throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��");
+            }
+            templateAttrVOS.stream().forEach(codetemplateAttr ->{
+                String field=codetemplateAttr.getId();
+                String name=codetemplateAttr.getName();
+                CodeClassifyTemplateAttrVO codeBaseAttributeDTO=new CodeClassifyTemplateAttrVO();
+                boolean res=codetemplateAttr.getAttributegroup().equals(BATCHADD_EXCEPORT_ATTR_TYPE)//鍩烘湰灞炴�у瓧娈垫樉绀�
+                        ||(StringUtils.isNotBlank(codetemplateAttr.getKeyattrflag())&&Boolean.parseBoolean(codetemplateAttr.getKeyattrflag()))//鍏抽敭灞炴�х殑瀛樺叆
+                        ||(StringUtils.isNotBlank(codetemplateAttr.getSamerepeatattrflag())&&Boolean.parseBoolean(codetemplateAttr.getSamerepeatattrflag())) //鐩镐技灞炴�х殑瀛樺叆
+                        ||(StringUtils.isNotBlank(codetemplateAttr.getRequireflag())&&Boolean.parseBoolean(codetemplateAttr.getRequireflag()));
+                if(allFieldToOutNameMap.containsKey(name)){//濡傛灉瀛樺湪鐨勮瘽鍒欓渶瑕佹牴鎹叿浣撶殑鍘昏祴鍊�
+                    codeBaseAttributeDTO=  allFieldToOutNameMap.get(name);
+                    if(StringUtils.isNotBlank(codetemplateAttr.getKeyattrflag())&&Boolean.parseBoolean(codetemplateAttr.getKeyattrflag())){
+                        codeBaseAttributeDTO.setKeyattrflag(codetemplateAttr.getKeyattrflag());//灞炴�у叧閿睘鎬�
+                    }
+                    if(StringUtils.isNotBlank(codetemplateAttr.getRequireflag())&&Boolean.parseBoolean(codetemplateAttr.getRequireflag())){
+                        codeBaseAttributeDTO.setKeyattrflag(codetemplateAttr.getRequireflag());//灞炴�у繀濉」
+                    }
+                    if(StringUtils.isNotBlank(codetemplateAttr.getSamerepeatattrflag())&&Boolean.parseBoolean(codetemplateAttr.getSamerepeatattrflag())){
+                        codeBaseAttributeDTO.setSamerepeatattrflag(codetemplateAttr.getSamerepeatattrflag());//灞炴�х浉浼煎睘鎬�
+                    }
+                }else if(res){
+                   allFieldToOutNameMap.put(name,codetemplateAttr);
+               }
+            });
+        });
+        //鏁寸悊濂芥墍鏈夋ā鏉块渶瑕佸啓鍏xecl鐨勫睘鎬т俊鎭�
+        Workbook workbook = new HSSFWorkbook();
+        LinkedList<WriteExcelData> excelDataList = new LinkedList<>();
+        if(!CollectionUtils.isEmpty(allFieldToOutNameMap)){
+            excelDataList.add(new WriteExcelData(0,0,"鍒嗙被璺緞"));
+            final int[] index = {0};
+            allFieldToOutNameMap.values().stream().forEach(attrVO -> {
+                Object text = attrVO.getName();
+                text = exportKeyAndRequired(workbook,attrVO,text);
+                int colIndex = 1 + index[0]++;
+                WriteExcelData excelData = new WriteExcelData(0, colIndex, text);
+                if(StringUtils.isNotBlank(attrVO.getCodedateformat())
+                        || VciFieldTypeEnum.VTDateTime.name().equalsIgnoreCase(attrVO.getAttributedatatype())
+                        || VciFieldTypeEnum.VTDate.name().equalsIgnoreCase(attrVO.getAttributedatatype())
+                        ||VciFieldTypeEnum.VTTime.name().equalsIgnoreCase(attrVO.getAttributedatatype())){
+                    excelData.setDateFormat(VciDateUtil.DateTimeFormat);
+                }
+                if(text instanceof RichTextString){
+                    excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+                }
+                excelDataList.add(excelData);
+                if(StringUtils.isNotBlank(attrVO.getEnumString()) || StringUtils.isNotBlank(attrVO.getEnumid())){
+                    //娣诲姞鏁版嵁鏈夋晥鎬�
+                    List<String> enumValueList = new ArrayList<>();
+                    enumValueList.add("");
+                    List<KeyValue> valueList = engineService.listComboboxItems(attrVO);
+                    if(!CollectionUtils.isEmpty(valueList)){
+                        valueList.stream().forEach(kv->{
+                            enumValueList.add(kv.getValue());
+                        });
+                    }
+                    //榛樿鍔�1涓囨潯
+                    WriteExcelData ed = new WriteExcelData(1,colIndex,"");
+                    ed.setRowTo(100);
+                    ed.setColTo(colIndex);
+                    ed.setValidation(true);
+                    ed.setValidationDataList(enumValueList);
+                    ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��");
+                    excelDataList.add(ed);
+                }
+                if(VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributedatatype())){
+                    List<String> booleanList = new ArrayList<>();
+                    booleanList.add("鏄�");
+                    booleanList.add("鍚�");
+                    //榛樿鍔�1涓囨潯
+                    WriteExcelData ed = new WriteExcelData(1,colIndex,"");
+                    ed.setRowTo(100);
+                    ed.setColTo(colIndex);
+                    ed.setValidation(true);
+                    ed.setValidationDataList(booleanList);
+                    ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��");
+                    excelDataList.add(ed);
+                }
+            });
+            eo.addSheetDataList(codeClassifyVO.getName()+"瀵煎叆妯℃澘",excelDataList);
+        }
+        LinkedList<WriteExcelData> classPathList = new LinkedList<>();
+        classPathList.add(new WriteExcelData(0,0,"鍒嗙被灞傜骇"));
+
+        WriteExcelData idPathWriteExcelTitle=new WriteExcelData(0,1,"鍒嗙被ID璺緞");
+        idPathWriteExcelTitle.setWidth(20);
+        idPathWriteExcelTitle.setCenter(false);
+        classPathList.add(idPathWriteExcelTitle);
+        WriteExcelData namePathWriteExcelTitle=new WriteExcelData(0,2,"鍒嗙被鍚嶇О璺緞");
+        namePathWriteExcelTitle.setWidth(20);
+        namePathWriteExcelTitle.setCenter(false);
+        classPathList.add(namePathWriteExcelTitle);
+
+
+        final int[] rowIndex = {1};
+        codeClassifyVOS.stream().forEach(codeClassifyVO1 -> {
+                classPathList.add(new WriteExcelData(rowIndex[0],0,codeClassifyVO1.getDataLevel()));
+
+                String idPath=codeClassifyVO1.getIdPath().startsWith("#")?codeClassifyVO1.getIdPath().substring(1):codeClassifyVO1.getIdPath();
+                WriteExcelData idPathWriteExcelData=new WriteExcelData(rowIndex[0],1,idPath);
+                idPathWriteExcelData.setWidth(30);
+                idPathWriteExcelData.setCenter(false);
+                classPathList.add(idPathWriteExcelData);
+
+                String namePath=codeClassifyVO1.getNamePath().startsWith("#")?codeClassifyVO1.getNamePath().substring(1):codeClassifyVO1.getNamePath();
+                WriteExcelData  namePathWriteExcelData=  new WriteExcelData(rowIndex[0],2,namePath);
+                namePathWriteExcelData.setWidth(40);
+                namePathWriteExcelData.setCenter(false);
+                classPathList.add(namePathWriteExcelData);
+                rowIndex[0]++;
+        });
+
+        WriteExcelData  excelData=new WriteExcelData();
+        excelData.setMerged(true);
+        excelData.setRow(1);
+        excelData.setRowTo(2);
+        excelData.setCol(4);
+        excelData.setColTo(9);
+        excelData.setCenter(false);
+        excelData.setReadOnly(true);
+        excelData.setObj("瀵煎叆鏁版嵁鏃讹紝鍒嗙被璺緞蹇呴』濉啓鍙跺瓙鑺傜偣璺緞\n(閫夋嫨鍙跺瓙鑺傜偣瀵煎叆鍒欎笉闇�瑕佸~鍐欏垎绫昏矾寰�)");
+        excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+        classPathList.add(excelData);
+
+        eo.addSheetDataList(codeClassifyVO.getName()+"鍒嗙被瀵圭収琛�",classPathList);
+
+        String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + codeClassifyVO.getName() + "_瀵煎叆妯℃澘.xls";
+       // eo.addSheetDataList(templateVOList.size()+"妯℃澘淇℃伅銆愯鍕垮垹闄ゆ垨绉诲姩銆�",tempEDList);
+        ExcelUtil.writeDataToFile(excelName,eo);
+        return excelName;
+    }
+
+    /**
+     * 鐢熸垚瀵煎叆鐨勬枃浠�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param isHistory 鏄惁鍘嗗彶鏁版嵁瀵煎叆
+     * @return excel鐨勬枃浠跺湴鍧�
+     */
+    @Override
+    public String createImportExcel(String codeClassifyOid,boolean isHistory) {
+        List<CodeClassifyTemplateVO> templateVOList=new ArrayList<>();
+        VciBaseUtil.alertNotNull("瀵煎嚭妯℃澘","瀵煎嚭鐨勯厤缃�",codeClassifyOid,"涓婚搴撳垎绫荤殑涓婚敭");
+        CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
+        if(isHistory){
+            templateVOList= templateService.childTemplates(codeClassifyOid);
+        }else{
+            //鎵炬ā鏉�
+            CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid);
+            templateVOList.add(templateVO);
+        }
+
+        WriteExcelOption eo = new WriteExcelOption();
+        eo.setAppend(true);
+        //澧炲姞妯℃澘鐨勪俊鎭鍏�
+        LinkedList<WriteExcelData> tempEDList = new LinkedList<>();
+        tempEDList.add(new WriteExcelData(0,0,"妯℃澘涓婚敭"));
+        tempEDList.add(new WriteExcelData(0,1,"妯℃澘浠e彿"));
+        tempEDList.add(new WriteExcelData(0,2,"妯℃澘鍚嶇О"));
+        for(int j=0;j<templateVOList.size();j++){
+            CodeClassifyTemplateVO  templateVO=templateVOList.get(j);
+
+            //缁勫悎鏍煎紡鐨勪笉瀵煎叆锛�
+            // 鏋氫妇鐨勬彁渚涘簭鍒楃殑閫夋嫨
+            //鏃堕棿鍏ㄩ儴缁熶竴涓簓yyy-MM-dd HH:mm:ss
+            //鍙傜収鐨勮嚜琛岃緭鍏ュ悕绉�
+            //鍒嗙被娉ㄥ叆鐨勪笉鐢紝閮芥槸瀵煎叆鍚庤嚜鍔ㄥ鐞嗙殑
+            //缂栫爜锛岀姸鎬佺瓑瀛楁涓嶅鍏�
+            List<CodeClassifyTemplateAttrVO> templateAttrVOS = templateVO.getAttributes().stream().filter(s ->
+                !DEFAULT_ATTR_LIST.contains(s.getId())
+                        && StringUtils.isBlank(s.getComponentrule())
+                        && StringUtils.isBlank(s.getClassifyinvokeattr())
+                        && (isHistory || VciBaseUtil.getBoolean(s.getFormdisplayflag()))
+            ).collect(Collectors.toList());
+            if(CollectionUtils.isEmpty(templateAttrVOS)){
+                throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��");
+            }
+            List<CodeClassifyTemplateAttrVO> idAttrVOList = templateVO.getAttributes().stream().filter(s -> s.getId().equalsIgnoreCase(CODE_FIELD)).collect(Collectors.toList());
+            LinkedList<WriteExcelData> excelDataList = new LinkedList<>();
+            Workbook workbook = new HSSFWorkbook();
+            if(isHistory){
+                excelDataList.add(new WriteExcelData(0,0,"鍒嗙被璺緞"));
+                excelDataList.add(new WriteExcelData(0,1,"鐮佹瀹藉害"));
+                excelDataList.add(new WriteExcelData(0,2,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"浼佷笟缂栫爜"));
+            }
+            for (int i = 0; i < templateAttrVOS.size(); i++) {
+                CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i);
+                Object text = attrVO.getName();
+                text = exportKeyAndRequired(workbook,attrVO,text);
+                int colIndex = (isHistory?3:0) + i;
+                WriteExcelData excelData = new WriteExcelData(0, colIndex, text);
+                if(StringUtils.isNotBlank(attrVO.getCodedateformat())
+                    || VciFieldTypeEnum.VTDateTime.name().equalsIgnoreCase(attrVO.getAttributedatatype())
+                    || VciFieldTypeEnum.VTDate.name().equalsIgnoreCase(attrVO.getAttributedatatype())
+                    ||VciFieldTypeEnum.VTTime.name().equalsIgnoreCase(attrVO.getAttributedatatype())){
+                    excelData.setDateFormat(VciDateUtil.DateTimeFormat);
+                }
+                if(text instanceof RichTextString){
+                    excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+                }
+                excelDataList.add(excelData);
+                if(StringUtils.isNotBlank(attrVO.getEnumString()) || StringUtils.isNotBlank(attrVO.getEnumid())){
+                    //娣诲姞鏁版嵁鏈夋晥鎬�
+                    List<String> enumValueList = new ArrayList<>();
+                    enumValueList.add("");
+                    List<KeyValue> valueList = engineService.listComboboxItems(attrVO);
+                    if(!CollectionUtils.isEmpty(valueList)){
+                        valueList.stream().forEach(kv->{
+                            enumValueList.add(kv.getValue());
+                        });
+                    }
+                    //榛樿鍔�1涓囨潯
+                    WriteExcelData ed = new WriteExcelData(1,colIndex,"");
+                    ed.setRowTo(100);
+                    ed.setColTo(colIndex);
+                    ed.setValidation(true);
+                    ed.setValidationDataList(enumValueList);
+                    ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��");
+                    excelDataList.add(ed);
+                }
+                if(VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributedatatype())){
+                    List<String> booleanList = new ArrayList<>();
+
+                    booleanList.add("鏄�");
+                    booleanList.add("鍚�");
+                    //榛樿鍔�1涓囨潯
+                    WriteExcelData ed = new WriteExcelData(1,colIndex,"");
+                    ed.setRowTo(100);
+                    ed.setColTo(colIndex);
+                    ed.setValidation(true);
+                    ed.setValidationDataList(booleanList);
+                    ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��");
+                    excelDataList.add(ed);
+                }
+            }
+            eo.addSheetDataList(j+templateVO.getName(),excelDataList);
+            tempEDList.add(new WriteExcelData(j+1,0,templateVO.getOid()));
+            tempEDList.add(new WriteExcelData(j+1,1,templateVO.getId()));
+            tempEDList.add(new WriteExcelData(j+1,2,templateVO.getName()));
+        }
+        String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + codeClassifyVO.getName() + (isHistory?"_鍘嗗彶鏁版嵁瀵煎叆妯℃澘.xls": "_瀵煎叆妯℃澘.xls");
+        eo.addSheetDataList(templateVOList.size()+"妯℃澘淇℃伅銆愯鍕垮垹闄ゆ垨绉诲姩銆�",tempEDList);
+        ExcelUtil.writeDataToFile(excelName,eo);
+        return excelName;
+    }
+
+
+    /**
+     * 鐢熸垚瀵煎叆鐨勬枃浠�
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param isHistory 鏄惁鍘嗗彶鏁版嵁瀵煎叆
+     * @return excel鐨勬枃浠跺湴鍧�
+     */
+    /*@Override
+    public String createImportExcel(String codeClassifyOid,boolean isHistory) {
+        CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
+        if(isHistory && !templateService.checkChildHasSameTemplate(codeClassifyOid)){
+            throw new VciBaseException("褰撳墠閫夋嫨鐨勪富棰樺簱鍒嗙被鐨勬墍鏈変笅绾ц妭鐐逛腑瀛樺湪涓嶅悓鐨勬ā鏉跨殑鎯呭喌");
+        }
+        //鎵炬ā鏉�
+        CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
+        //缁勫悎鏍煎紡鐨勪笉瀵煎叆锛�
+        //鏋氫妇鐨勬彁渚涘簭鍒楃殑閫夋嫨
+        //鏃堕棿鍏ㄩ儴缁熶竴涓簓yyy-MM-dd HH:mm:ss
+        //鍙傜収鐨勮嚜琛岃緭鍏ュ悕绉�
+        //鍒嗙被娉ㄥ叆鐨勪笉鐢紝閮芥槸瀵煎叆鍚庤嚜鍔ㄥ鐞嗙殑
+        //缂栫爜锛岀姸鎬佺瓑瀛楁涓嶅鍏�
+        List<CodeClassifyTemplateAttrVO> templateAttrVOS = templateVO.getAttributes().stream().filter(s ->
+                !DEFAULT_ATTR_LIST.contains(s.getId())
+                && StringUtils.isBlank(s.getComponentrule())
+                && StringUtils.isBlank(s.getClassifyinvokeattr())
+                && (isHistory || VciBaseUtil.getBoolean(s.getFormdisplayflag()))
+        ).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(templateAttrVOS)){
+            throw new VciBaseException("妯℃澘娌℃湁閰嶇疆浠讳綍銆愯〃鍗曟樉绀恒�戜负銆愭槸銆戠殑灞炴��");
+        }
+        List<CodeClassifyTemplateAttrVO> idAttrVOList = templateVO.getAttributes().stream().filter(s -> s.getId().equalsIgnoreCase(CODE_FIELD)).collect(Collectors.toList());
+        List<WriteExcelData> excelDataList = new ArrayList<>();
+        Workbook workbook = new HSSFWorkbook();
+        if(isHistory){
+            excelDataList.add(new WriteExcelData(0,0,"鍒嗙被璺緞"));
+            excelDataList.add(new WriteExcelData(0,1,"鐮佹瀹藉害"));
+            excelDataList.add(new WriteExcelData(0,2,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"浼佷笟缂栫爜"));
+        }
+        for (int i = 0; i < templateAttrVOS.size(); i++) {
+            CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i);
+            Object text = attrVO.getName();
+            text = exportKeyAndRequired(workbook,attrVO,text);
+            int colIndex = (isHistory?3:0) + i;
+            WriteExcelData excelData = new WriteExcelData(0, colIndex, text);
+            if(StringUtils.isNotBlank(attrVO.getCodedateformat())
+                    || VciFieldTypeEnum.VTDateTime.name().equalsIgnoreCase(attrVO.getAttributedatatype())
+                    || VciFieldTypeEnum.VTDate.name().equalsIgnoreCase(attrVO.getAttributedatatype())
+                    ||VciFieldTypeEnum.VTTime.name().equalsIgnoreCase(attrVO.getAttributedatatype())){
+                excelData.setDateFormat(VciDateUtil.DateTimeFormat);
+            }
+            if(text instanceof RichTextString){
+                excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+            }
+            excelDataList.add(excelData);
+            if(StringUtils.isNotBlank(attrVO.getEnumString()) || StringUtils.isNotBlank(attrVO.getEnumid())){
+                //娣诲姞鏁版嵁鏈夋晥鎬�
+                List<String> enumValueList = new ArrayList<>();
+                enumValueList.add("");
+                List<KeyValue> valueList = engineService.listComboboxItems(attrVO);
+                if(!CollectionUtils.isEmpty(valueList)){
+                    valueList.stream().forEach(kv->{
+                        enumValueList.add(kv.getValue());
+                    });
+                }
+                //榛樿鍔�1涓囨潯
+                WriteExcelData ed = new WriteExcelData(1,colIndex,"");
+                ed.setRowTo(100);
+                ed.setColTo(colIndex);
+                ed.setValidation(true);
+                ed.setValidationDataList(enumValueList);
+                ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��");
+                excelDataList.add(ed);
+            }
+            if(VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributedatatype())){
+                List<String> booleanList = new ArrayList<>();
+
+                booleanList.add("鏄�");
+                booleanList.add("鍚�");
+                //榛樿鍔�1涓囨潯
+                WriteExcelData ed = new WriteExcelData(1,colIndex,"");
+                ed.setRowTo(100);
+                ed.setColTo(colIndex);
+                ed.setValidation(true);
+                ed.setValidationDataList(booleanList);
+                ed.setValidationErrorMsg("璇峰湪搴忓垪涓�夋嫨姝g‘鐨勫��");
+                excelDataList.add(ed);
+            }
+        }
+        //澧炲姞妯℃澘鐨勪俊鎭鍏�
+        List<WriteExcelData> tempEDList = new ArrayList<>();
+        tempEDList.add(new WriteExcelData(0,0,templateVO.getOid()));
+        tempEDList.add(new WriteExcelData(0,1,templateVO.getId()));
+        tempEDList.add(new WriteExcelData(0,2,templateVO.getName()));
+        String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + codeClassifyVO.getName() + (isHistory?"_鍘嗗彶鏁版嵁瀵煎叆妯℃澘.xls": "_瀵煎叆妯℃澘.xls");
+        WriteExcelOption eo = new WriteExcelOption(excelDataList);
+        eo.addSheetDataList("妯℃澘淇℃伅銆愯鍕垮垹闄ゆ垨绉诲姩銆�",tempEDList);
+        ExcelUtil.writeDataToFile(excelName,eo);
+        return excelName;
+    }*/
+
+    /**
+     * 鎵归噺鐢宠缂栫爜鏁版嵁
+     *
+     * @param orderDTO 缂栫爜鐢宠淇℃伅锛屽繀椤诲寘鍚垎绫讳富閿拰鐮佹鐨勪俊鎭�
+     * @param file     excel鏂囦欢鐨勪俊鎭�
+     * @return  鏈夐敊璇俊鎭殑excel鐨勬枃浠�
+     */
+    @Override
+    public CodeImProtRusultVO batchImportCode(CodeOrderDTO orderDTO, File file) {
+        VciBaseUtil.alertNotNull(orderDTO,"缂栫爜鐢宠鐩稿叧鐨勬暟鎹�",orderDTO.getCodeClassifyOid(),"涓婚搴撳垎绫讳富閿�");
+        ReadExcelOption reo = new ReadExcelOption();
+        reo.setReadAllSheet(true);
+        List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file,null,reo);
+        if(CollectionUtils.isEmpty(sheetDataSetList) || CollectionUtils.isEmpty(sheetDataSetList.get(0).getRowData())
+                ||sheetDataSetList.get(0).getRowData().size()<1){
+            throw new VciBaseException("娌℃湁璇诲彇鍒颁换浣曠殑鏁版嵁");
+        }
+        if(sheetDataSetList.size()>LIMIT+1){
+            throw new VciBaseException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�");
+        }
+        //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬�
+        SheetDataSet dataSet = sheetDataSetList.get(0);
+        //鎵剧涓�琛岋紝涓轰簡鎵炬爣棰�
+        CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid());
+        //鏍¢獙妯℃澘鏄笉鏄渶鏂扮殑
+        checkTemplateSync(sheetDataSetList,templateVO,0);
+        //鍏堜笉鐢ㄧ灞炴�ф槸鍚﹂兘瀛樺湪锛屽厛杞崲涓�涓嬫暟鎹�
+        Map<String,String> errorMap = new HashMap<>();
+        String redisUUid=batchImportCodes(orderDTO,templateVO,dataSet,errorMap,true);
+        CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO();
+        List<String> needRowIndexList = new ArrayList<>();
+        String filePath = returnErrorToExcel(dataSet.getRowData(), errorMap, needRowIndexList, dataSet.getColName());
+        if(StringUtils.isNotBlank(filePath)) {
+            codeImProtRusultVO.setFilePath(filePath);
+        }
+        if(StringUtils.isNotBlank(redisUUid)){
+            codeImProtRusultVO.setRedisUuid(redisUUid);
+        }
+        return codeImProtRusultVO;
+    }
+
+
+    /***
+     * 鎵归噺澶勭悊鐢宠鏁版嵁
+     * @param orderDTO
+     * @param templateVO
+     * @param dataSet
+     * @return
+     */
+    private String batchImportCodes(CodeOrderDTO orderDTO,CodeClassifyTemplateVO templateVO,SheetDataSet dataSet,Map<String,String> errorMap,boolean isEnumType){
+        List<String> codeList=new ArrayList<>();
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+        //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇
+        CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
+        //1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈�
+        engineService.checkSecValueOnOrder(ruleVO,orderDTO);
+        List<SheetRowData> rowDataList = dataSet.getRowData();
+
+        //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+        List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->
+                !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag())
+        ).collect(Collectors.toList());
+        Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>();
+        List<String> titleRowData = dataSet.getColName();
+        Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId().toLowerCase(Locale.ROOT),(o1, o2)->o2));
+        getFieldIndexMap(titleRowData,attrNameIdMap,fieldIndexMap);
+
+        //闇�瑕佸垽鏂槸鍚︽墍鏈夌殑灞炴�ч兘鍦ㄦā鏉夸笂浜�
+        List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT))
+                && StringUtils.isBlank(s.getComponentrule()) && StringUtils.isBlank(s.getClassifyinvokeattr())//缁勫悎瑙勫垯鍜屽垎绫绘敞鍏ョ‘瀹炴病缁欑敤鎴峰鍑哄幓
+        ).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(unExistAttrVOs)){
+            throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪鍒楄〃涓病鏈夋壘鍒�");
+        }
+        List<ClientBusinessObject> cboList = new ArrayList<>();
+        String fullPath = getFullPath(classifyFullInfo);
+        excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList,templateVO,cboList,fullPath,true);
+
+        //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
+        //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓�
+        //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
+        batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap);
+        //3.鍒ゆ柇鍏抽敭灞炴��
+        CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
+        Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
+        Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
+        if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
+            selfRepeatRowIndexList.stream().forEach(rowIndex->{
+                errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍦ㄥ綋鍓嶅鐞嗙殑鏁版嵁鏂囦欢涓叧閿睘鎬ч噸澶�" );
+            });
+        }
+        if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
+            keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
+                errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+            });
+        }
+        //鍒嗙被娉ㄥ叆
+        batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false);
+        //boolean
+        reSwitchBooleanAttrOnOrder(attrVOS,cboList);
+        //4.鏍¢獙瑙勫垯
+        batchCheckVerifyOnOrder(attrVOS, cboList,errorMap);
+        if(isEnumType) {//鏄惁闇�瑕佹牎楠屾灇涓�/鍙傜収
+            //5.鏍¢獙鏋氫妇鏄惁姝g‘
+            batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap);
+            //7.澶勭悊鍙傜収鐨勬儏鍐�
+            batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap);
+        }
+        //6.鏃堕棿鏍煎紡鐨勯獙璇�
+        //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss
+        batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap);
+        //鏈�鍚庡紕缁勫悎瑙勫垯
+        batchSwitchComponentAttrOnOrder(attrVOS,cboList);
+        String uuid=redisService.getUUIDEveryDay();
+        Map<String, ClientBusinessObject> rowIndexCboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t));
+
+        if(errorMap.size()>0) {
+            createRedisDatas(uuid + "-error",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, errorMap,false);
+        }
+        boolean isCreateUUid=false;
+        List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> {
+            String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+            return !errorMap.containsKey(rowIndex);
+        }).collect(Collectors.toList());
+        //鐩镐技鏍¢獙
+        Map<String,String>resembleMap=new HashMap<>();
+        List<DataResembleVO> dataResembleVOS=new ArrayList<>();
+        String btmtypeid= classifyFullInfo.getTopClassifyVO().getBtmtypeid();
+        bathcResembleQuery(orderDTO.getCodeClassifyOid(),templateVO,needSaveCboList,resembleMap,btmtypeid,dataResembleVOS);
+        if(resembleMap.size()>0) {
+            isCreateUUid=true;
+            if(!CollectionUtils.isEmpty(dataResembleVOS)) {
+                redisService.setCacheList(uuid + "-resemble-data", dataResembleVOS);
+                createRedisDatas(uuid + "-resemble",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, resembleMap, false);
+            }
+        }
+        //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨�
+        Map<String,String> newErrorMap=new HashMap<>();
+        newErrorMap.putAll(resembleMap);
+        newErrorMap.putAll(errorMap);
+        needSaveCboList = cboList.stream().filter(cbo -> {
+            String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+            return !newErrorMap.containsKey(rowIndex);
+        }).collect(Collectors.toList());
+        if((errorMap.size()>0&&needSaveCboList.size()>0)||resembleMap.size()>0){
+            isCreateUUid=true;
+        }
+       createRedisByCodeClassify(uuid + "-class",templateVO,dataSet,fieldIndexMap,false);
+        if(newErrorMap.size()>0) {
+            createRedisDatas(uuid + "-ok",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap,true);
+        }else {
+            uuid="";
+            //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒�
+            needSaveCboList = cboList.stream().filter(cbo -> {
+                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                return !newErrorMap.containsKey(rowIndex);
+            }).collect(Collectors.toList());
+            if (!CollectionUtils.isEmpty(needSaveCboList)) {
+                //9.鎴戜滑澶勭悊涓氬姟鏁版嵁
+                //鐢熸垚缂栫爜鐨勫唴瀹�
+                codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), needSaveCboList);
+                //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰
+                engineService.batchSaveSelectChar(templateVO, needSaveCboList);
+            }
+        }
+        if(!isCreateUUid){
+            return uuid="";
+        }
+        return uuid;
+    }
+
+    /***
+     * 瀛樺偍鍒嗙被瀵硅薄鍙婂叾鍒楀悕
+     * @param uuid
+     * @param templateVOList
+     * @param dataSet
+     * @param fieldIndexMap
+     * @param iscContain
+     */
+    private  void createRedisByCodeClassify(String uuid,CodeClassifyTemplateVO templateVOList,SheetDataSet dataSet, Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap,boolean iscContain){
+        List<ColumnVO> columnVOList = new ArrayList<>();
+        List<String> outNameList = dataSet.getColName();
+        fieldIndexMap.forEach((integer, s) -> {
+            ColumnVO columnVOS = new ColumnVO();
+            String field = fieldIndexMap.get(integer);
+            String outName = outNameList.get(integer);
+            columnVOS.setField(field);
+            columnVOS.setTitle(outName);
+            columnVOList.add(columnVOS);
+        });
+        CodeImportTemplateVO codeImportTemplateVO=new CodeImportTemplateVO();
+        codeImportTemplateVO.setCodeClassifyTemplateVO(templateVOList);
+        codeImportTemplateVO.setCloNamesList(columnVOList);
+        List<CodeImportTemplateVO> codeImportTemplateVOs= new ArrayList<>();
+        codeImportTemplateVOs.add(codeImportTemplateVO);
+        redisService.setCacheList(uuid,codeImportTemplateVOs);
+        redisService.expire(uuid,6000000);//redis杩囨湡鏃堕棿
+        logger.info("");
+    }
+    private void createRedisDatas(String uuid,CodeClassifyTemplateVO templateVO,Map<String,ClientBusinessObject> rowIndexCbo, SheetDataSet dataSet, Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap,Map<String,String> errorMap,boolean isok){
+        List<SheetRowData>  needsheetRowDataList =new ArrayList<>();
+        if(errorMap.size()>0) {
+            //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒�
+            needsheetRowDataList = dataSet.getRowData().stream().filter(cbo -> {
+                String rowIndex=cbo.getRowIndex();
+                return  isok? !errorMap.containsKey(rowIndex):errorMap.containsKey(rowIndex);
+            }).collect(Collectors.toList());
+
+        }else{
+            needsheetRowDataList= dataSet.getRowData();
+        }
+        Map<String/**涓枃鍚嶇О**/, SheetRowData/**鑻辨枃鍚嶇О**/> rowIdexDataMap = needsheetRowDataList.stream().collect(Collectors.toMap(s -> s.getRowIndex(), t -> t,(o1, o2)->o2));
+        Map<String,CodeImprotDataVO> clsfDataMap=new HashMap<>();
+        rowIndexCbo .forEach((rowIndex, cbo) -> {
+            CodeImprotDataVO codeImprotDataVO = new CodeImprotDataVO();
+            codeImprotDataVO.setTemplateOid(templateVO.getOid());
+            List<Map<String, String>> dataList = new ArrayList<>();
+            if(rowIdexDataMap.containsKey(rowIndex)){
+                SheetRowData sheetRowData=rowIdexDataMap.get(rowIndex);
+                Map<String, String> dataMap = new HashMap<>();
+                Map<Integer, String> data = sheetRowData.getData();
+                fieldIndexMap.forEach((integer, s) -> {
+                    String field = fieldIndexMap.get(integer);
+                    if (data.containsKey(integer)) {
+                        String vlues = data.get(integer);
+                        dataMap.put(field, vlues);
+                    }
+                });
+                dataMap.put("oid",cbo.getOid());
+                dataList.add(dataMap);
+            }
+            if(clsfDataMap.containsKey(templateVO.getOid())){
+                codeImprotDataVO=clsfDataMap.get(templateVO.getOid());
+                dataList.addAll(codeImprotDataVO.getDatas());
+            }
+            codeImprotDataVO.setColNames(dataSet.getColName());
+            codeImprotDataVO.setDatas(dataList);
+            clsfDataMap.put(templateVO.getOid(),codeImprotDataVO);
+        });
+        if(!CollectionUtils.isEmpty(clsfDataMap)) {
+            Collection codeImprotDataVOS=clsfDataMap.values();
+            List<CodeImprotDataVO> codeImprotDataVOList=new ArrayList<>();
+            codeImprotDataVOList.addAll(codeImprotDataVOS);
+            redisService.setCacheList(uuid+"-"+templateVO.getOid(), codeImprotDataVOList);
+            redisService.expire(uuid+"-"+templateVO.getOid(),6000000);//redis杩囨湡鏃堕棿
+        }
+    }
+    /***
+     * 鎵归噺澶勭悊鐢宠鏁版嵁
+     * @param orderDTO
+     * @param templateVO
+     * @param dataSet
+     * @return
+     */
+    @Override
+    public List<String> batchImportCode(CodeOrderDTO orderDTO,CodeClassifyTemplateVO templateVO,SheetDataSet dataSet,Map<String,String> errorMap,boolean isEnumType){
+        List<String> codeList=new ArrayList<>();
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+        //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇
+        CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
+        //1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈�
+        engineService.checkSecValueOnOrder(ruleVO,orderDTO);
+        List<SheetRowData> rowDataList = dataSet.getRowData();
+
+        //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+        List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->
+                !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag())
+        ).collect(Collectors.toList());
+        Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>();
+        List<String> titleRowData = dataSet.getColName();
+        Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId().toLowerCase(Locale.ROOT),(o1, o2)->o2));
+        getFieldIndexMap(titleRowData,attrNameIdMap,fieldIndexMap);
+
+        //闇�瑕佸垽鏂槸鍚︽墍鏈夌殑灞炴�ч兘鍦ㄦā鏉夸笂浜�
+        List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT))
+                && StringUtils.isBlank(s.getComponentrule()) && StringUtils.isBlank(s.getClassifyinvokeattr())//缁勫悎瑙勫垯鍜屽垎绫绘敞鍏ョ‘瀹炴病缁欑敤鎴峰鍑哄幓
+        ).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(unExistAttrVOs)){
+            throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪鍒楄〃涓病鏈夋壘鍒�");
+        }
+        List<ClientBusinessObject> cboList = new ArrayList<>();
+        String fullPath = getFullPath(classifyFullInfo);
+        excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList,templateVO,cboList,fullPath,true);
+
+        //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
+        //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓�
+        //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
+        batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap);
+        //3.鍒ゆ柇鍏抽敭灞炴��
+        CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
+        Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
+        Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
+        if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
+            selfRepeatRowIndexList.stream().forEach(rowIndex->{
+                errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍦ㄥ綋鍓嶅鐞嗙殑鏁版嵁鏂囦欢涓叧閿睘鎬ч噸澶�" );
+            });
+        }
+        if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
+            keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
+                errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+            });
+        }
+        //鍒嗙被娉ㄥ叆
+        batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false);
+        //boolean
+        reSwitchBooleanAttrOnOrder(attrVOS,cboList);
+        //4.鏍¢獙瑙勫垯
+        batchCheckVerifyOnOrder(attrVOS, cboList,errorMap);
+        if(isEnumType) {//鏄惁闇�瑕佹牎楠屾灇涓�/鍙傜収
+            //5.鏍¢獙鏋氫妇鏄惁姝g‘
+            batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap);
+            //7.澶勭悊鍙傜収鐨勬儏鍐�
+            batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap);
+        }
+        //6.鏃堕棿鏍煎紡鐨勯獙璇�
+        //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss
+        batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap);
+        //鏈�鍚庡紕缁勫悎瑙勫垯
+        batchSwitchComponentAttrOnOrder(attrVOS,cboList);
+        //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒�
+        List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> {
+            String rowIndex =cbo.getAttributeValue(IMPORT_ROW_INDEX);
+            return !errorMap.containsKey(rowIndex);
+        }).collect(Collectors.toList());
+
+        if(!CollectionUtils.isEmpty(needSaveCboList)) {
+            //9.鎴戜滑澶勭悊涓氬姟鏁版嵁
+            //鐢熸垚缂栫爜鐨勫唴瀹�
+            codeList= productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), needSaveCboList);
+            //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰
+            engineService.batchSaveSelectChar(templateVO,needSaveCboList);
+        }
+        return codeList;
+    }
+    private LinkedList<CodeClassifyTemplateVO> checkSamesTemplate(List<String> titleRowData,  List<SheetDataSet> sheetDataSetList,int shetNumber,Map<String/**璺緞**/, CodeClassifyVO> pathMap,Map<String,String>errorMap) throws Throwable {
+        Map<String,String>pathOidMap =new HashMap<>();
+        Map<String,String> templateIdRowIndex=new HashedMap();
+        SheetDataSet dataSet=  sheetDataSetList.get(shetNumber);
+        LinkedHashMap<String,CodeClassifyTemplateVO> codeClassifyTemplateVOMap=new LinkedHashMap <String,CodeClassifyTemplateVO>();
+        for (int i=0; i<titleRowData.size();i++){
+           String title= titleRowData.get(i);
+           if(title.equals("鍒嗙被璺緞")) {
+               int finalI = i;
+               dataSet.getRowData().stream().forEach(sheetRowData -> {
+                   String Path = sheetRowData.getData().get(finalI);
+                   String rowIndex=sheetRowData.getRowIndex();
+                   CodeClassifyTemplateVO newTemplateVO=new CodeClassifyTemplateVO();
+                   String templateOid="";
+                   if(pathOidMap.containsKey(Path)){
+                       templateOid= pathOidMap.get(Path) ;
+                       newTemplateVO=codeClassifyTemplateVOMap.get(templateOid);
+                   }else{
+                       if(pathMap.containsKey(Path)){
+                           CodeClassifyVO codeClassifyVO=pathMap.get(Path);
+                           newTemplateVO =engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
+                           if(newTemplateVO!=null){
+                               templateOid=newTemplateVO.getOid();
+                           }else{
+                               errorMap.put(rowIndex,"绗�"+rowIndex+"琛岋紝鍒嗙被璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫绘ā鏉�");
+                           }
+                       }else{
+                           errorMap.put(rowIndex,"绗�"+rowIndex+"琛岋紝鍒嗙被璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫�");
+                       }
+                   }
+                   pathOidMap.put(Path, templateOid);
+                   codeClassifyTemplateVOMap.put(templateOid, newTemplateVO);
+                   templateIdRowIndex.put(templateOid, templateIdRowIndex.getOrDefault(templateOid, "") + "锛�" +rowIndex );
+               });
+               break;
+           }
+        }
+        LinkedList<CodeClassifyTemplateVO> codeClassifyTemplateVOList=new LinkedList<>();
+        StringBuffer sb=new StringBuffer();
+        codeClassifyTemplateVOMap.keySet().forEach(tempateOid->{
+            String templateOidInExcel="";
+            String tempateName="";
+            CodeClassifyTemplateVO t= codeClassifyTemplateVOMap.get(tempateOid);
+            codeClassifyTemplateVOList.add(t);
+            if(!CollectionUtils.isEmpty(sheetDataSetList)
+                    && sheetDataSetList.size()>1 && !CollectionUtils.isEmpty(sheetDataSetList.get(sheetDataSetList.size()-1).getColName())){
+                List<SheetRowData>  rowData=  sheetDataSetList.get(sheetDataSetList.size()-1).getRowData();
+                templateOidInExcel=rowData.get(shetNumber).getData().get(0);
+                tempateName=rowData.get(shetNumber).getData().get(2);
+                //templateOidInExcel = sheetDataSetList.get(sheetDataSetList.size()-1).getColName().get(sheetDataSetList.size()-i);
+            }
+            if(StringUtils.isBlank(templateOidInExcel) || !templateOidInExcel.equalsIgnoreCase(tempateOid)){
+                sb.append("妯℃澘銆�"+tempateName+"銆戜腑绗�"+templateIdRowIndex.get(tempateOid)+"琛屾暟鎹笉灞炰簬褰撳墠妯℃澘鐨勬暟鎹紝璇锋牳瀵�!");
+            }
+        });
+        if(StringUtils.isNotBlank(sb)){
+            throw  new Throwable(sb.toString());
+        }
+        if(codeClassifyTemplateVOList.size()>1){
+            String message="妯℃澘銆�"+dataSet.getSheetName()+"銆戞牴鎹垎绫昏矾寰勫垽鏂紝鍒嗙被瀛樺湪澶氫釜妯℃澘";
+
+            throw  new Throwable(message);
+        }
+        if(codeClassifyTemplateVOList.size()==0){
+            String message="妯℃澘銆�"+dataSet.getSheetName()+"銆戞牴鎹暟鎹垎绫昏矾寰勫垽鏂紝鏈尮閰嶅埌瀵瑰簲妯℃澘";
+            throw  new Throwable(message);
+        }
+      return codeClassifyTemplateVOList ;
+    }
+    /**
+     * 鏍¢獙妯℃澘鏄惁涓哄悓姝ョ殑
+     * @param sheetDataSetList excel閲岀殑鍐呭
+     * @param templateVO 妯℃澘鐨勪俊鎭�
+     */
+    private void checkTemplateSync(List<SheetDataSet> sheetDataSetList,CodeClassifyTemplateVO templateVO,int i){
+        String templateOidInExcel = "";
+        String templateName="";
+        if(!CollectionUtils.isEmpty(sheetDataSetList)
+                && sheetDataSetList.size()>1 && !CollectionUtils.isEmpty(sheetDataSetList.get(sheetDataSetList.size()-1).getColName())){
+            List<SheetRowData>  rowData=  sheetDataSetList.get(sheetDataSetList.size()-1).getRowData();
+            templateName=rowData.get(i).getData().get(2);
+            templateOidInExcel=rowData.get(i).getData().get(0);
+            //templateOidInExcel = sheetDataSetList.get(sheetDataSetList.size()-1).getColName().get(sheetDataSetList.size()-i);
+        }
+       /* if(!CollectionUtils.isEmpty(sheetDataSetList)
+                && sheetDataSetList.size()>1 && !CollectionUtils.isEmpty(sheetDataSetList.get(sheetDataSetList.size()-1).getColName())){
+            List<SheetRowData>  rowData=  sheetDataSetList.get(sheetDataSetList.size()-1).getRowData();
+            templateOidInExcel=rowData.get(i).getData().get(0);
+           //templateOidInExcel = sheetDataSetList.get(sheetDataSetList.size()-1).getColName().get(sheetDataSetList.size()-i);
+        }*/
+        if(StringUtils.isBlank(templateOidInExcel) || !templateOidInExcel.equalsIgnoreCase(templateVO.getOid())){
+            throw new VciBaseException("妯℃澘銆�"+templateName+"銆戜腑鐨勬暟鎹幏鍙栫殑妯$増淇℃伅涓庡綋鍓嶆ā鏉夸笉鍖归厤锛岃纭繚excel鏂囦欢閲屾湁銆愭ā鏉夸俊鎭�-璇峰嬁绉诲姩鎴栧垹闄ゃ�戠殑宸ヤ綔琛紝涓旂‘淇濇瘡娆″鍏ラ兘鏄厛涓嬭浇鐨勫鍏ユā鏉垮悗娣诲姞鐨勬暟鎹�");
+        }
+
+    }
+
+    /***
+     * 浠庨《灞傛壒閲忕敵璇峰鍏ユ柟娉�
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param classifyAttr 鍒嗙被璺緞浣跨敤鐨勫睘鎬�
+     * @param file excel鏂囦欢鐨勪俊鎭�
+     * @return
+     */
+    @Override
+    public CodeImProtRusultVO batchTopImportCode(String codeClassifyOid, String classifyAttr, File file) {
+        VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
+        ReadExcelOption reo = new ReadExcelOption();
+        reo.setReadAllSheet(true);
+        List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file,null,reo);
+        if(CollectionUtils.isEmpty(sheetDataSetList) || CollectionUtils.isEmpty(sheetDataSetList.get(0).getRowData())
+                ||sheetDataSetList.get(0).getRowData().size()<1){
+            throw new VciBaseException("娌℃湁璇诲彇鍒颁换浣曠殑鏁版嵁");
+        }
+        if(sheetDataSetList.size()>LIMIT+1){
+            throw new VciBaseException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�");
+        }
+        //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬�
+        SheetDataSet dataSet = sheetDataSetList.get(0);
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
+
+        List<CodeClassifyVO> childClassifyVOs = classifyService.listChildrenClassify(codeClassifyOid, true, classifyAttr, true);
+        Map<String/**璺緞**/, CodeClassifyVO> pathMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getPath().startsWith("#") ? s.getPath().substring(1) : s.getPath(), t -> t));
+        pathMap.put("#current#", classifyFullInfo.getCurrentClassifyVO());
+        List<String> titleRowData = dataSet.getColName();
+        Map<String, String> errorMap = new ConcurrentHashMap<>();
+        //棣栧厛灏嗘暟鎹互妯℃澘鐨勫舰寮忓垎寮�
+        LinkedHashMap<String,List<CodeImprotDataVO>> codeclassifyDataMap=new LinkedHashMap<>();
+        List<CodeImprotDataVO> codeClassifyDatas=new ArrayList<>();
+        createExeclClassData(dataSet,pathMap,errorMap,codeClassifyDatas);
+        //鏍规嵁妯℃澘灏嗘暟鎹暣鍚堝湪涓�璧凤紝鍘绘牎楠�
+        Map<String/**妯℃澘oid**/, List<CodeImprotDataVO>/**鏁版嵁瀵硅薄**/> templateDatasMap =codeClassifyDatas.stream().collect(Collectors.toMap(CodeImprotDataVO::getTemplateOid,s->{
+                    List<CodeImprotDataVO> l=new ArrayList<>();
+                    l.add(s);
+                    return l;
+                },(List<CodeImprotDataVO> s1,List<CodeImprotDataVO> s2)->{
+                    s1.addAll(s2);
+                    return s1;
+                }));
+        String uuid=redisService.getUUIDEveryDay();
+        List<CodeImportTemplateVO> codeImportTemplateVOS=new ArrayList<>();
+        //鎸夌収妯℃澘鍘绘暣鐞嗘暟鎹�
+        templateDatasMap.keySet().stream().forEach(templateVOOid->{
+           List<CodeImprotDataVO> codeImprotDataVOS= templateDatasMap.get(templateVOOid);
+            CodeClassifyTemplateVO templateVO= templateServiceI.getObjectHasAttrByOid(templateVOOid);
+
+            //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+            List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->
+                    !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag())
+            ).collect(Collectors.toList());
+
+             Map<String/**妯℃澘灞炴�у瓧娈祇id**/, String /**妯℃澘灞炴�у閮ㄥ悕绉�**/> fieldNameMap =attrVOS.stream().collect(Collectors.toMap(CodeClassifyTemplateAttrVO::getId,s->s.getName()));
+
+            List<ClientBusinessObject> allCboList=new ArrayList<>();
+            List<ColumnVO>columnVOList =new ArrayList();
+            codeImprotDataVOS.stream().forEach(codeImprotDataVO -> {
+                CodeImportTemplateVO codeImportTemplateVO=new CodeImportTemplateVO();
+                codeImprotDataVO.getFields().stream().forEach(field->{
+                    ColumnVO columnVOS = new ColumnVO();
+                    String outName=fieldNameMap.get(field);
+                    columnVOS.setField(field);
+                    columnVOS.setTitle(outName);
+                    columnVOList.add(columnVOS);
+
+                });
+                codeImportTemplateVO.setCodeClassifyVO( codeImprotDataVO.getCodeClassifyVO());
+                codeImportTemplateVO.setCodeClassifyTemplateVO( codeImprotDataVO.getCodeClassifyTemplateVO());
+                List<String> colNames=codeImprotDataVO.getColNames();
+                codeImportTemplateVO.setCloNamesList(columnVOList);
+                codeImportTemplateVOS.add(codeImportTemplateVO);
+                List<ClientBusinessObject> cboList=new ArrayList<>();
+                excelToCbo(classifyFullInfo,codeImprotDataVO,cboList,true);
+                allCboList.addAll(cboList);
+
+            });
+
+
+            //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
+            //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓�
+            //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
+            batchCheckRequiredAttrOnOrder(templateVO,allCboList,errorMap);
+            //3.鍒ゆ柇鍏抽敭灞炴��
+            CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList);
+            Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
+            Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
+            if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
+                selfRepeatRowIndexList.stream().forEach(rowIndex->{
+                    errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍦ㄥ綋鍓嶅鐞嗙殑鏁版嵁鏂囦欢涓叧閿睘鎬ч噸澶�" );
+                });
+            }
+            if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
+                keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
+                    errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+                });
+            }
+            //鍒嗙被娉ㄥ叆
+           // batchSwitchClassifyAttrOnOrder(attrVOS,allCboList,classifyFullInfo,false);
+            //boolean
+            reSwitchBooleanAttrOnOrder(attrVOS,allCboList);
+            //4.鏍¢獙瑙勫垯
+            batchCheckVerifyOnOrder(attrVOS, allCboList,errorMap);
+            //鏄惁闇�瑕佹牎楠屾灇涓�/鍙傜収
+            //5.鏍¢獙鏋氫妇鏄惁姝g‘
+            batchSwitchEnumAttrOnOrder(attrVOS, allCboList, errorMap);
+            //7.澶勭悊鍙傜収鐨勬儏鍐�
+            batchSwitchReferAttrOnOrder(attrVOS,allCboList,errorMap);
+
+            //6.鏃堕棿鏍煎紡鐨勯獙璇�
+            //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss
+            batchSwitchDateAttrOnOrder(attrVOS,allCboList,errorMap);
+            //鏈�鍚庡紕缁勫悎瑙勫垯
+            batchSwitchComponentAttrOnOrder(attrVOS,allCboList);
+
+
+            Map<String, ClientBusinessObject> rowIndexCboMap = allCboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t));
+
+            if(errorMap.size()>0) {
+                createRedisDatas(uuid + "-error",templateVO,codeImprotDataVOS, errorMap,false);
+            }
+            List<ClientBusinessObject> needSaveCboList = allCboList.stream().filter(cbo -> {
+                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                return !errorMap.containsKey(rowIndex);
+            }).collect(Collectors.toList());
+            //鐩镐技鏍¢獙
+            Map<String,String>resembleMap=new HashMap<>();
+            List<DataResembleVO> dataResembleVOS=new ArrayList<>();
+            String btmtypeid= classifyFullInfo.getTopClassifyVO().getBtmtypeid();
+            bathcResembleQuery(codeClassifyOid,templateVO,needSaveCboList,resembleMap,btmtypeid,dataResembleVOS);
+            if(resembleMap.size()>0) {
+                if(!CollectionUtils.isEmpty(dataResembleVOS)) {
+                    redisService.setCacheList(uuid + "-resemble-data", dataResembleVOS);
+                    createRedisDatas(uuid + "-resemble",templateVO, codeImprotDataVOS, resembleMap, false);
+                }
+            }
+            //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨�
+            Map<String,String> newErrorMap=new HashMap<>();
+            newErrorMap.putAll(resembleMap);
+            newErrorMap.putAll(errorMap);
+            needSaveCboList = allCboList.stream().filter(cbo -> {
+                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                return !newErrorMap.containsKey(rowIndex);
+            }).collect(Collectors.toList());
+            createRedisDatas(uuid + "-ok",templateVO,codeImprotDataVOS, newErrorMap,true);
+        });
+        List<String> needRowIndexList=new ArrayList<>();
+        CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO();
+        if(errorMap.size()>0) {
+            String filePath = returnErrorToExcel(dataSet.getRowData(), errorMap, needRowIndexList, dataSet.getColName());
+            if (StringUtils.isNotBlank(filePath)) {
+                codeImProtRusultVO.setFilePath(filePath);
+            }
+        }
+        if(StringUtils.isNotBlank(uuid)){
+            //灏嗘墍鏈夌殑鍒嗙被瀛樺叆缂撳瓨涔嬩腑
+            codeImProtRusultVO.setRedisUuid(uuid);
+            redisService.setCacheList(uuid + "-class",codeImportTemplateVOS);
+           // redisService.expire(uuid + "-class",6000000);
+        }
+        return codeImProtRusultVO;
+    }
+
+    /***
+     * 鏍规嵁涓嶅悓妯℃澘缁勭粐execl鏁版嵁
+     * @param dataSet
+     * @param pathMap
+     * @param errorMap
+     */
+    private void createExeclClassData(SheetDataSet dataSet,Map<String/**璺緞**/, CodeClassifyVO> pathMap,Map<String,String>errorMap,List<CodeImprotDataVO> codeClassifyDatas){
+
+        Map<String,CodeImprotDataVO> pathDatas=new HashMap<>();
+        List<String> titleRowData= dataSet.getColName();
+        List<SheetRowData>  rowDataList= dataSet.getRowData();
+        LinkedHashMap<String,CodeClassifyTemplateVO> codeClassifyTemplateVOMap=new LinkedHashMap <String,CodeClassifyTemplateVO>();
+        for (int i=0;i<titleRowData.size();i++){
+            String title= titleRowData.get(i);
+            if(title.equals("鍒嗙被璺緞")) {
+                int finalI = i;
+                rowDataList.stream().forEach(sheetRowData -> {
+                    CodeImprotDataVO dataVO=new CodeImprotDataVO();
+                    String Path = sheetRowData.getData().get(finalI);
+                    String rowIndex=sheetRowData.getRowIndex();
+                    Map<Integer, String> execlData= sheetRowData.getData();
+                    CodeClassifyTemplateVO newTemplateVO=new CodeClassifyTemplateVO();
+
+                    if(StringUtils.isEmpty(Path)){
+                        Path="#current#";
+                    }
+
+                    if(pathMap.containsKey(Path)){
+                        CodeClassifyVO codeClassifyVO=pathMap.get(Path);
+                        if(codeClassifyTemplateVOMap.containsKey(Path)){
+                            newTemplateVO=  codeClassifyTemplateVOMap.get(Path);
+                        }else{
+                            newTemplateVO =engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
+                            if(newTemplateVO==null){
+                                errorMap.put(rowIndex,"绗�"+rowIndex+"琛岋紝鍒嗙被璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫绘ā鏉�");
+                            }
+                        }
+                        if(pathMap.containsKey(Path)){
+                            dataVO=pathDatas.getOrDefault(Path,dataVO);
+                        }
+                        dataVO.setTemplateOid(newTemplateVO.getOid());
+                        dataVO.setCodeClassifyTemplateVO(newTemplateVO);
+                        dataVO.setCodeClassifyVO(codeClassifyVO);
+                        dataVO.setRowIndex(rowIndex);
+                        dataVO.setCodeClassifyOid(codeClassifyVO.getOid());//璁剧疆鍒嗙被oid
+                        dataVO.setCodeRuleOid(codeClassifyVO.getCoderuleoid());
+                        createExeclClassData(titleRowData,newTemplateVO,execlData,dataVO);
+
+                        pathDatas.put(Path,dataVO);
+                        codeClassifyTemplateVOMap.put(Path, newTemplateVO);
+                    }else{
+                        errorMap.put(rowIndex,"绗�"+rowIndex+"琛岋紝鍒嗙被璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫�");
+                    }
+                });
+                break;
+            }
+        }
+        List <CodeImprotDataVO> newCodeImprotDataVO= pathDatas.values().stream().collect(Collectors.toList());
+        codeClassifyDatas.addAll(newCodeImprotDataVO);
+        logger.info("222");
+    }
+
+    /**
+     * 瀵煎叆鍘嗗彶鏁版嵁
+     *
+     * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+     * @param classifyAttr 鍒嗙被璺緞浣跨敤鐨勫睘鎬�
+     * @param file            excel鏂囦欢鐨勪俊鎭�
+     * @return 鏈夐敊璇俊鎭殑excel
+     */
+    @Override
+    public CodeImProtRusultVO batchImportHistoryData(String codeClassifyOid, String classifyAttr,File file) {
+        VciBaseUtil.alertNotNull(codeClassifyOid,"鍒嗙被鐨勪富閿�");
+        ReadExcelOption reo = new ReadExcelOption();
+        reo.setReadAllSheet(true);
+        List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file,null,reo);
+        if (sheetDataSetList.size() > LIMIT + 1) {
+            throw new VciBaseException("涓轰簡淇濊瘉绯荤粺鐨勭ǔ瀹氭�э紝璇蜂竴娆′笉瑕佸鍏ヨ秴杩�1涓囨潯鐨勬暟鎹�");
+        }
+        Map<String,List<WriteExcelData>> shetNameMap=new HashMap<>();
+        //鐩镐技椤圭洰鏌ラ噸
+        String uuid = redisService.getUUIDEveryDay();
+        boolean isCreateUUid=false;
+        boolean isExport=false;
+        for(int i=0;i<sheetDataSetList.size()-1;i++) {
+            if (CollectionUtils.isEmpty(sheetDataSetList) || CollectionUtils.isEmpty(sheetDataSetList.get(i).getRowData())
+                    || sheetDataSetList.get(i).getRowData().size() < 1) {
+                continue;
+            }
+            //鍘嗗彶瀵煎叆鐨勬椂鍊欎笉澶勭悊缂栫爜
+            //----閫昏緫鍐呭----
+            //1. 鍒嗙被鐨勮矾寰勫彲浠ュ湪椤甸潰涓婇�夋嫨鏄垎绫荤紪鍙疯繕鏄垎绫荤殑鍚嶇О
+            //2. 鍒嗙被鐨勮矾寰勶紝蹇呴』鏄綋鍓嶅鍏ラ�夋嫨鐨勫垎绫荤殑鑺傜偣锛屼互鍙婂叾涓嬬骇鑺傜偣
+            //3. 閫氳繃鏁版嵁瑕佸鍏ョ殑鍒嗙被鍘绘煡鎵惧搴旂殑缂栫爜瑙勫垯
+            //4. 鏁版嵁瀛樺偍鍜屾壒閲忕敵璇蜂竴鏍凤紝
+            //5. 闇�瑕佸崟鐙鐞嗕紒涓氱紪鐮佺殑鍐呭锛�
+            //     5.1 浼佷笟缂栫爜鍦ㄥ綋鍓峞xcel閲屼笉鑳介噸澶�
+            //     5.2 浼佷笟缂栫爜鍦ㄧ郴缁熶腑涓嶈兘閲嶅锛堝彲浠ユ槸宸茬粡鍥炴敹鐨勶級
+            //     5.3 浼佷笟缂栫爜鐨勯暱搴︼紝鍜岀紪鐮佽鍒欑殑闀垮害瑕佸搴斾笂
+            //     5.4 鑾峰彇娴佹按鐮佹鐨勫�硷紝鍘婚櫎濉厖鐨勫瓧绗︼紝鐪嬫祦姘村彿鏄灏戯紝鐒跺悗灏嗘祦姘村彿鍜岀幇鍦ㄧ殑鏈�澶ф祦姘村彿鍒ゆ柇锛屽皬浜庡氨鐩存帴褰曞叆锛屽ぇ浜庡垯淇敼鏈�澶ф祦姘村彿
+            //     5.5 瀛樺偍浼佷笟缂栫爜鍒癮llcode涓�
+
+            //鏌ヨ鍒嗙被鍜屾ā鏉�
+            CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
+
+            //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬�
+            SheetDataSet dataSet = sheetDataSetList.get(i);
+            List<SheetRowData> rowDataList = dataSet.getRowData();
+
+            //鎵剧涓�琛岋紝涓轰簡鎵炬爣棰�
+            CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO();
+            /**  if (!templateService.checkChildHasSameTemplate(classifyFullInfo.getCurrentClassifyVO().getOid())) {
+                throw new VciBaseException("褰撳墠鐨勫垎绫讳互鍙婁笅绾у垎绫荤殑妯℃澘涓嶇浉鍚�");
+            }***/
+            //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
+            //鎵炬墍鏈夌殑鍒嗙被璺緞,闇�瑕佹牎楠岃矾寰勬槸鍚︽纭紝鏄惁閮藉湪褰撳墠鐨勫垎绫荤殑涓嬬骇
+            List<CodeClassifyVO> childClassifyVOs = classifyService.listChildrenClassify(codeClassifyOid, true, classifyAttr, true);
+            Map<String/**璺緞**/, CodeClassifyVO> pathMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getPath().startsWith("#") ? s.getPath().substring(1) : s.getPath(), t -> t));
+            List<String> titleRowData = dataSet.getColName();
+            Map<String, String> errorMap = new ConcurrentHashMap<>();
+            try {
+                List<CodeClassifyTemplateVO> templateVOList= checkSamesTemplate(titleRowData,sheetDataSetList,i,pathMap,errorMap);
+                templateVO= templateVOList.get(0);
+            }catch (Throwable e){
+                throw  new VciBaseException(e.getMessage());
+            }
+
+            List<SheetRowData> needowDataList = rowDataList.stream().filter(cbo -> {
+                String rowIndex = cbo.getRowIndex();
+                return !errorMap.containsKey(rowIndex);
+            }).collect(Collectors.toList());
+
+            //checkTemplateSync(sheetDataSetList, templateVO,i);
+            //杩欓噷涓嶉櫎鍘婚粯璁ょ殑灞炴��
+            List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes();
+            Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>();
+
+            Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId()));
+            String idFieldName = attrVOS.stream().filter(s -> VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(s.getId())).findFirst().orElseGet(() -> new CodeClassifyTemplateAttrVO()).getName();
+            getFieldIndexMap(titleRowData, attrNameIdMap, fieldIndexMap);
+            //鍏堜笉鐢ㄧ灞炴�ф槸鍚﹂兘瀛樺湪锛屽厛杞崲涓�涓嬫暟鎹�
+            List<ClientBusinessObject> cboList = new ArrayList<>();
+            String fullPath = getFullPath(classifyFullInfo);
+            //鎴戜滑闇�瑕佽幏鍙栧埌鎵�鏈夌殑涓嬬骇鍒嗙被鐨刼id鐨勮矾寰勶紝鍥犱负鍚庨潰闇�瑕�
+            Map<String/**涓婚敭**/, String/**璺緞**/> childOidPathMap = getChildClassifyPathMap(classifyFullInfo, fullPath);
+            excelToCbo(classifyFullInfo, fieldIndexMap, needowDataList, templateVO, cboList, fullPath, false);
+
+
+            Map<String/**涓婚敭**/, CodeClassifyVO> classifyVOMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+            classifyVOMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO());
+            pathMap.put("#current#", classifyFullInfo.getCurrentClassifyVO());
+
+            //鍒ゆ柇缂栧彿鍦╡xcel閲屾湰韬氨閲嶅鐨�
+            Map<String, Long> idCountMap = cboList.stream().collect(Collectors.groupingBy(ClientBusinessObject::getId, Collectors.counting()));
+            List<String> repeatIdList = new ArrayList<>();
+            idCountMap.forEach((id, count) -> {
+                if (count > 1) {
+                    repeatIdList.add(id);
+                }
+            });
+            if (!CollectionUtils.isEmpty(repeatIdList)) {
+                cboList.stream().filter(s -> repeatIdList.contains(s.getId())).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).forEach(rowIndex -> {
+                    errorMap.put(rowIndex, "缂栧彿鍦ㄥ綋鍓峞xcel涓噸澶�;");
+                });
+            }
+            //鎴戜滑闇�瑕佸垽鏂繖浜涘垎绫荤殑妯℃澘鏄笉鏄竴鏍风殑锛屽彧闇�瑕佹牎楠岋紝涓嶇敤鑾峰彇
+            //妫�鏌ュ垎绫荤殑璺緞
+            checkClassifyPathInHistory(cboList, errorMap, pathMap, childOidPathMap);
+
+            //妫�鏌ヨ鍒�
+            Map<String/**鍒嗙被涓婚敭**/, String/**瑙勫垯涓婚敭**/> ruleOidMap = new ConcurrentHashMap<String, String>();
+            List<String> unExistRuleClassifyOidList = new CopyOnWriteArrayList<>();
+            checkRuleOidInHistory(classifyVOMap, ruleOidMap, unExistRuleClassifyOidList);
+            //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓�
+
+            //鎴戜滑鏍规嵁鍑洪敊鐨勫垎绫荤殑涓婚敭锛屽幓鎵捐鍙�
+            if (!CollectionUtils.isEmpty(unExistRuleClassifyOidList)) {
+                cboList.stream().forEach(cbo -> {
+                    if (unExistRuleClassifyOidList.contains(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD))) {
+                        String row_index = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                        errorMap.put(row_index, errorMap.getOrDefault(row_index, "") + ";鏍规嵁鍒嗙被璺緞瀵瑰簲鐨勫垎绫伙紝娌℃湁璁剧疆缂栫爜瑙勫垯");
+                    }
+                });
+            }
+
+            //鍒ゆ柇蹇呰緭椤�
+            batchCheckRequiredAttrOnOrder(templateVO, cboList, errorMap);
+
+            //鏈夐檺鏍¢獙缂栫爜鏄惁瀛樺湪
+            batchCheckIdExistOnOrder(templateVO, cboList, errorMap);
+
+            //boolean
+            reSwitchBooleanAttrOnOrder(attrVOS, cboList);
+
+            // 鏋氫妇鐨勫唴瀹归渶瑕佹牴鎹悕绉拌浆鎹负鏋氫妇鐨勫��
+            batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap);
+
+            batchSwitchReferAttrOnOrder(attrVOS, cboList, errorMap);
+            //6.澶勭悊鍒嗙被娉ㄥ叆
+            batchSwitchClassifyAttrOnOrder(attrVOS, cboList, classifyFullInfo,true);
+            //7.澶勭悊缁勫悎瑙勫垯
+            batchSwitchComponentAttrOnOrder(attrVOS, cboList);
+            //3.鍒ゆ柇鍏抽敭灞炴��
+            CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
+            Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
+            Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
+            if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) {
+                selfRepeatRowIndexList.stream().forEach(rowIndex -> {
+                    errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鍦ㄥ綋鍓峞xcel鏂囦欢涓叧閿睘鎬ч噸澶�");
+                });
+            }
+            if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) {
+                keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> {
+                    errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅");
+                });
+            }
+            //4.鏍¢獙瑙勫垯
+            batchCheckVerifyOnOrder(attrVOS, cboList, errorMap);
+
+            //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss
+            batchSwitchDateAttrOnOrder(attrVOS, cboList, errorMap);
+            if (CollectionUtils.isEmpty(ruleOidMap.values())) {
+                throw new VciBaseException("瀵煎叆鐨勬暟鎹墍閫夋嫨鐨勫垎绫婚兘娌℃湁璁剧疆缂栫爜瑙勫垯");
+            }
+            Map<String, CodeRuleVO> ruleVOMap = ruleService.listCodeRuleByOids(ruleOidMap.values(), true).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+            //鏍¢獙缂栫爜瑙勫垯鍜岀爜娈垫槸鍚︽纭�
+            Map<String, List<String>> ruleRowIndexMap = new ConcurrentHashMap<>();
+            checkSecLengthInHistory(cboList, classifyVOMap, ruleVOMap, ruleOidMap, errorMap, ruleRowIndexMap);
+            ruleRowIndexMap.keySet().parallelStream().forEach(ruleOid -> {
+                List<String> rowIndexList = ruleRowIndexMap.get(ruleOid);
+                List<ClientBusinessObject> thisCbos = cboList.stream().filter(cbo -> rowIndexList.contains(cbo.getAttributeValue(IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList());
+//鎴戜滑闇�瑕佸厛鏌ヨ涓�涓嬶紝鍐呭鏄惁宸茬粡瀛樺湪
+                if(!CollectionUtils.isEmpty(thisCbos)){
+                    List<String> existIds = new ArrayList<>();
+                    VciBaseUtil.switchCollectionForOracleIn(thisCbos).stream().forEach(cbos -> {
+                        Map<String, String> conditionMap = new HashMap<>();
+                        conditionMap.put("coderuleoid", ruleOid);
+                        conditionMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(cbos.stream().map(s -> s.getId()).collect(Collectors.toSet()).toArray(new String[0])) + ")");
+                        conditionMap.put(VciQueryWrapperForDO.LC_STATUS_FIELD, QueryOptionConstant.NOTIN + "('" + CodeAllCodeLC.TASK_BACK.getValue() + "','" + CodeAllCodeLC.OBSOLETED.getValue() + "')");
+                        existIds.addAll(Optional.ofNullable(boService.queryCBO(MdmBtmTypeConstant.CODE_ALL_CODE, conditionMap, new PageHelper(-1), Arrays.stream(new String[]{"id"})
+                            .collect(Collectors.toList()))).orElseGet(() -> new ArrayList<>()).stream().map(s -> {
+                            String id = s.getId();
+                            if (StringUtils.isBlank(id)) {
+                                id = s.getAttributeValue("id");
+                            }
+                            return id;
+                        }).collect(Collectors.toList()));
+                    });
+                    List<String> existIdCbos = thisCbos.stream().filter(s -> {
+                        String id = s.getId();
+                        if (StringUtils.isBlank(id)) {
+                            id = s.getAttributeValue("id");
+                        }
+                        return existIds.contains(id);
+                    }).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toList());
+                    if (!CollectionUtils.isEmpty(existIdCbos)) {
+                        thisCbos = thisCbos.stream().filter(s -> {
+                            String id = s.getId();
+                            if (StringUtils.isBlank(id)) {
+                                id = s.getAttributeValue("id");
+                            }
+                            return !existIdCbos.contains(id);
+                        }).collect(Collectors.toList());
+                        existIdCbos.stream().forEach(rowIndex -> {
+                            errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";銆�" + idFieldName + "銆戝湪绯荤粺涓凡缁忚鍗犵敤");
+                        });
+                    }
+                }
+            });
+
+            Map<String, ClientBusinessObject> rowIndexCboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t));
+            if (errorMap.size() > 0) {
+                isExport=true;
+                createRedisDatas(uuid + "-error", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, errorMap, false);
+            }
+            createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, templateVO);
+            List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> {
+                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                return !errorMap.containsKey(rowIndex);
+            }).collect(Collectors.toList());
+            //鐩镐技鏍¢獙
+            Map<String, String> resembleMap = new HashMap<>();
+            List<DataResembleVO> dataResembleVOS = new ArrayList<>();
+            String btmtypeid = classifyFullInfo.getTopClassifyVO().getBtmtypeid();
+            bathcResembleQuery(templateVO.getCodeclassifyoid(), templateVO, needSaveCboList, resembleMap, btmtypeid, dataResembleVOS);
+            if (resembleMap.size() > 0) {
+                if (!CollectionUtils.isEmpty(dataResembleVOS)) {
+                    redisService.setCacheList(uuid + "-resemble-data", dataResembleVOS);
+                    createRedisDatas(uuid + "-resemble", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, resembleMap, false);
+                }
+            }
+            //鐢熸垚class缂撳瓨
+            Map<String, String> rowIndexClsOidMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t.getAttributeValue(CODE_CLASSIFY_OID_FIELD)));
+            createRedisByCodeClassify(uuid + "-class",templateVO,dataSet,fieldIndexMap,true);
+            //鑾峰彇缂栫爜锛屾煡璇㈠湪绯荤粺涓槸鍚﹁鍏朵粬鐨勫紩鐢ㄤ簡
+            //鎺掗櫎閿欒鐨勶紝鍓╀笅姝g‘鐨�
+            Map<String, String> newErrorMap = new HashMap<>();
+            newErrorMap.putAll(resembleMap);
+            newErrorMap.putAll(errorMap);
+            //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒�
+            needSaveCboList = cboList.stream().filter(cbo -> {
+                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                return !newErrorMap.containsKey(rowIndex);
+            }).collect(Collectors.toList());
+            if((errorMap.size()>0&&needSaveCboList.size()>0)||resembleMap.size()>0){
+                isCreateUUid=true;
+            }
+            List<String> needRowIndexList = needSaveCboList.stream().filter(s -> errorMap.containsKey(s.getAttributeValue(IMPORT_ROW_INDEX))).map(s -> s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toList());
+            if (isExport||newErrorMap.size() > 0) {
+                createRedisDatas(uuid + "-ok", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap, true);
+            } else {
+                SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+                List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList;
+                CodeClassifyTemplateVO finalTemplateVO = templateVO;
+                ruleRowIndexMap.keySet().parallelStream().forEach(ruleOid -> {
+                    VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+                    List<String> rowIndexList = ruleRowIndexMap.get(ruleOid);
+                    List<ClientBusinessObject> thisCbos = finalNeedSaveCboList.stream().filter(cbo -> rowIndexList.contains(cbo.getAttributeValue(IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList());
+                    if (!CollectionUtils.isEmpty(thisCbos)) {
+                        try {
+                            productCodeService.productCodeAndSaveData(classifyFullInfo, finalTemplateVO, ruleVOMap.get(ruleOid), null, thisCbos);
+                        } catch (Throwable e) {
+                            logger.error("鎵归噺浜х敓缂栫爜鐨勬椂鍊欏嚭閿欎簡", e);
+                            thisCbos.stream().forEach(cbo -> {
+                                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                                errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";绯荤粺閿欒锛屽瓨鍌ㄦ暟鎹殑鏃跺�欏嚭閿欎簡");
+                            });
+                        }
+                    }
+                });
+                engineService.batchSaveSelectChar(templateVO, cboList);
+            }
+        }
+        String excelFileName="";
+        if(isExport&&!CollectionUtils.isEmpty(shetNameMap)) {
+            excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.xls";
+            WriteExcelOption eo = new WriteExcelOption();
+            shetNameMap.forEach((shetName, errorDataList) -> {
+                eo.addSheetDataList(shetName, errorDataList);
+            });
+            try {
+                new File(excelFileName).createNewFile();
+            } catch (IOException e) {
+                throw new VciBaseException(LangBaseUtil.getErrorMsg(e));
+            }
+            ExcelUtil.writeDataToFile(excelFileName, eo);
+        }
+        CodeImProtRusultVO codeImProtRusultVO=new CodeImProtRusultVO();
+        if(StringUtils.isNotBlank(excelFileName)) {
+            codeImProtRusultVO.setFilePath(excelFileName);
+            codeImProtRusultVO.setFileOid("");
+        }
+        if(isCreateUUid){
+            codeImProtRusultVO.setRedisUuid(uuid);
+        }
+
+        return codeImProtRusultVO;
+    }
+    private void createWriteExcelData(Collection<SheetRowData> rowDataList, Map<String,String> errorMap,
+                                      List<String> needRowIndexList, List<String> titleRowData, Map<String,List<WriteExcelData>> shetNameMap, CodeClassifyTemplateVO templateVO){
+        List<WriteExcelData> errorDataList=new ArrayList<>();
+            Map<String, SheetRowData> rowIndexDataMap = rowDataList.stream().filter(s -> !needRowIndexList.contains(s.getRowIndex())).collect(Collectors.toMap(s -> s.getRowIndex(), t -> t));
+            errorDataList.add(new WriteExcelData(0,0,"閿欒淇℃伅"));
+            for (int i = 0; i < titleRowData.size(); i++) {
+                //閿欒淇℃伅鍦ㄦ渶鍚�
+                errorDataList.add(new WriteExcelData(0,i+1,titleRowData.get(i)));
+            }
+            Integer[] newRowIndex = new Integer[]{1};
+            errorMap.forEach((index,error)->{
+                //閿欒淇℃伅鍏ㄩ儴缁勫悎鍒颁竴璧�
+                SheetRowData rowData = rowIndexDataMap.getOrDefault(index, null);
+                if(rowData!=null){
+                    errorDataList.add(new WriteExcelData(newRowIndex[0],0,error));
+                    rowData.getData().forEach((colIndex,value)->{
+                        errorDataList.add(new WriteExcelData(newRowIndex[0],colIndex+1,value));
+                    });
+                    newRowIndex[0]++;
+                }
+            });
+
+            shetNameMap.put(templateVO.getName(),errorDataList);
+        }
+
+    /**
+     * 妫�鏌ョ爜娈电殑闀垮害鏄惁绗﹀悎瑕佹眰
+     * @param cboList 鏁版嵁
+     * @param classifyVOMap 鍒嗙被鏄犲皠
+     * @param ruleVOMap 瑙勫垯瀵硅薄
+     * @param ruleOidMap 鍒嗙被鍖呭惈瑙勫垯
+     * @param errorMap 閿欒鐨勪俊鎭�
+     * @param ruleRowIndexMap 瑙勫垯鍖呭惈鐨勮鍙凤紝key鏄鍒欎富閿紝value鏄寘鍚殑鍏ㄩ儴琛屽彿
+     */
+    private void checkSecLengthInHistory(List<ClientBusinessObject> cboList,Map<String,CodeClassifyVO> classifyVOMap,Map<String,CodeRuleVO> ruleVOMap,
+                                         Map<String/**鍒嗙被涓婚敭**/,String/**瑙勫垯涓婚敭**/> ruleOidMap,Map<String,String> errorMap,Map<String,List<String>> ruleRowIndexMap){
+
+        cboList.stream().forEach(cbo-> {
+            String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+            String secLength = cbo.getAttributeValue(CODE_SEC_LENGTH_FIELD);
+            //鎵惧垎绫�
+            String classifyOid = cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD);
+            CodeClassifyVO classifyVO = classifyVOMap.get(classifyOid);
+            if (classifyVO != null) {
+                //2#2#4#1杩欐牱鐨勬柟寮�
+                CodeRuleVO ruleVO = ruleVOMap.getOrDefault(ruleOidMap.get(classifyVO.getOid()), null);
+                if(ruleVO!=null){
+                    String[] secValues = secLength.split("#");
+                    //鎬婚暱搴﹀拰缂栫爜鐨勯暱搴�
+                    String code = cbo.getAttributeValue(CODE_FIELD);
+                    if(code.length() != Arrays.stream(secValues).mapToInt(s->VciBaseUtil.getInt(s)).sum()){
+                        errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鐮佹瀹藉害涓庣郴缁熶腑鐨勭紪鐮佽鍒欎笉鍚�" );
+                    }else if(secValues.length != ruleVO.getSecVOList().size()){
+                        errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鐮佹瀹藉害涓庣郴缁熶腑鐨勭紪鐮佽鍒欎笉鍚�" );
+                    } else {
+                        //姣忎竴涓暱搴﹂兘涓嶈兘瓒呰繃鐮佹鐨�
+                        boolean fined = false;
+                        for (int j = 0; j < ruleVO.getSecVOList().size(); j++) {
+                            CodeBasicSecVO secVO = ruleVO.getSecVOList().get(j);
+                            String length= secValues[j];
+                            if(StringUtils.isNotBlank(secVO.getCodeSecLength())&&VciBaseUtil.getInt(length)>VciBaseUtil.getInt(secVO.getCodeSecLength())){
+                                errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鐮佹瀹藉害涓庣郴缁熶腑鐨勭紪鐮佽鍒欎笉鍚�" );
+                                fined = true;
+                                break;
+                            }
+                        }
+                        /**for (int i = 0; i < secValues.length; i++) {
+                            for (int j = 0; j < ruleVO.getSecVOList().size(); j++) {
+                                CodeBasicSecVO secVO = ruleVO.getSecVOList().get(j);
+                                if (VciBaseUtil.getInt(secValues[i]) > VciBaseUtil.getInt(secVO.getCodeSecLength())) {
+                                    errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鐮佹瀹藉害涓庣郴缁熶腑鐨勭紪鐮佽鍒欎笉鍚�" );
+                                    fined = true;
+                                    break;
+                                }
+                            }
+                            if(fined){
+                                break;
+                            }
+                        }***/
+                        if(!fined){
+                            //鏆傛椂涓嶅彇娴佹按鐨勫唴瀹癸紝鍥犱负璋冪敤produceCode鐨勬椂鍊欏幓澶勭悊
+                            List<String> rowIndexList = ruleRowIndexMap.getOrDefault(ruleVO.getOid(), new ArrayList<>());
+                            rowIndexList.add(rowIndex);
+                            ruleRowIndexMap.put(ruleVO.getOid(),rowIndexList);
+                        }
+                    }
+                }else{
+                    errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍒嗙被娌℃湁璁剧疆缂栫爜瑙勫垯" );
+                }
+            }
+        });
+    }
+
+    /**
+     * excel杞崲涓篶bo鐨勫璞�
+     * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param fieldIndexMap 瀛楁鐨勪綅缃�
+     * @param rowDataList excel閲岀殑琛屾暟鎹�
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞�
+     * @param cboList 鏁版嵁鐨勫垪琛�
+     * @param fullPath 鍏ㄨ矾寰�
+     * @param newCode 鏄惁涓烘壒閲忕敵璇�
+     */
+    private void excelToCbo(CodeClassifyFullInfoBO classifyFullInfo,Map<Integer,String> fieldIndexMap,List<SheetRowData> rowDataList,
+            CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList,
+                            String fullPath,boolean newCode){
+        rowDataList.stream().forEach(rowData -> {
+            ClientBusinessObject cbo = boService.createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
+            rowData.getData().forEach((index,value)->{
+                String field = fieldIndexMap.get(index);
+                if(StringUtils.isBlank(field)){
+                    throw new VciBaseException("绗�" + (index + 1) + "鍒楃殑鏍囬鍦ㄧ郴缁熶腑涓嶅瓨鍦�");
+                }
+                try {
+                    cbo.setAttributeValueWithNoCheck(field,value);
+                    if(WebUtil.isDefaultField(field)){
+                        WebUtil.setValueToField(field, cbo, value);
+                    }
+                } catch (VCIError e) {
+                    logger.error("璁剧疆灞炴�х殑鍊奸敊璇�",e);
+                }
+            });
+            try {
+                if(newCode){
+                    cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD,classifyFullInfo.getCurrentClassifyVO().getOid());
+                    cbo.setAttributeValue(CODE_FULL_PATH_FILED,fullPath);
+                    //cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+                    int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
+                    if(secret == 0 || !secretService.checkDataSecret(secret) ){
+                        Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+                        cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret));
+                    }
+                }else{
+                    //姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰�
+                    //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath));
+                    cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
+                }
+                cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD,templateVO.getOid());
+                cbo.setAttributeValue(IMPORT_ROW_INDEX,rowData.getRowIndex());
+            }catch (Throwable e){
+                logger.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�",e);
+            }
+            cboList.add(cbo);
+        });
+
+    }
+
+    /**
+     * excel杞崲涓篶bo鐨勫璞�
+     * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param fieldIndexMap 瀛楁鐨勪綅缃�
+     * @param rowDataList excel閲岀殑琛屾暟鎹�
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞�
+     * @param cboList 鏁版嵁鐨勫垪琛�
+     * @param fullPath 鍏ㄨ矾寰�
+     * @param operation 鎿嶄綔绫诲瀷
+     * @param errorMap 閿欒淇℃伅璁板綍
+     */
+    private void excelToCbo(CodeClassifyFullInfoBO classifyFullInfo,List<String> titleRowData,Map<Integer,String> fieldIndexMap,List<RowDatas> rowDataList,
+                            CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList,
+                            String fullPath,boolean isProcess,String operation,Map<String,String> errorMap,Map<String,String> codeOidToSystemOidMap){
+        rowDataList.stream().forEach(rowData -> {
+            String oid=rowData.getOid();
+            String rowNumber=rowData.getRowIndex();
+            ClientBusinessObject cbo = boService.createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
+            rowData.getData().forEach((index,value)->{
+                String field = fieldIndexMap.get(index);
+                if(StringUtils.isBlank(field)){
+                    errorMap.put(rowNumber,"灞炴�э細銆�" +titleRowData.get(index)+ "銆戝湪绯荤粺涓笉瀛樺湪");
+                }
+                try {
+                    cbo.setAttributeValueWithNoCheck(field,value);
+                    if(WebUtil.isDefaultField(field)){
+                        WebUtil.setValueToField(field, cbo, value);
+                    }
+                } catch (VCIError e) {
+                    logger.error("璁剧疆灞炴�х殑鍊奸敊璇�",e);
+                    errorMap.put(rowNumber,"灞炴�э細銆�" +titleRowData.get(index)+ "銆戝湪绯荤粺涓笉瀛樺湪");
+                }
+            });
+            try {
+                if(operation.equals("create")){
+                    logger.info("鍒嗙被瀵硅薄锛�"+classifyFullInfo.getCurrentClassifyVO());
+                    logger.info("codeClassoid:"+classifyFullInfo.getCurrentClassifyVO().getOid());
+                    cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD,classifyFullInfo.getCurrentClassifyVO().getOid());
+                    cbo.setAttributeValue(CODE_FULL_PATH_FILED,fullPath);
+                    int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
+                    if(secret == 0 || !secretService.checkDataSecret(secret) ){
+                        Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+                        cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret));
+                    }
+                    if(rowData.getStatus().equals(CodeDefaultLC.DISABLE.getValue())){//鍋滅敤
+                        cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue());
+                    }else if(rowData.getStatus().equals(CodeDefaultLC.EDITING.getValue())){//缂栬緫
+                        cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+                    }else if(rowData.getStatus().equals(CodeDefaultLC.AUDITING.getValue())) {//瀹℃壒涓�
+                        cbo.setLcStatus(CodeDefaultLC.AUDITING.getValue());
+                    }else if(rowData.getStatus().equals(CodeDefaultLC.TASK_BACK.getValue())){//鍥炴敹
+                        cbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue());
+                    }else{
+                        cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());//鍙戝竷
+                    }
+                    /**  if(!isProcess){
+                        cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
+                      }else {
+                        if(rowData.getStatus().equals(CodeDefaultLC.DISABLE.getValue())){//鍋滅敤
+                            cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue());
+                        }else if(rowData.getStatus().equals(CodeDefaultLC.EDITING.getValue())){//缂栬緫
+                            cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+                        }else {//鍙戝竷
+                            cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
+                        }
+                    }***/
+                    cbo.setCreator(rowData.getCreator());
+                    cbo.setLastModifier(rowData.getEditor()==null?"":rowData.getEditor());
+                }else if(operation.equals("update")){
+                    //姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰�
+                    //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath));
+                   if(rowData.getStatus().equals(CodeDefaultLC.DISABLE.getValue())){//鍋滅敤
+                       cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue());
+                   }else if(rowData.getStatus().equals(CodeDefaultLC.RELEASED.getValue())){//鍙戝竷
+                       cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
+                   }else if(rowData.getStatus().equals(CodeDefaultLC.EDITING.getValue())){//缂栬緫
+                       cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+                   }else if(rowData.getStatus().equals(CodeDefaultLC.AUDITING.getValue())) {//瀹℃壒涓�
+                       cbo.setLcStatus(CodeDefaultLC.AUDITING.getValue());
+                   }else if(rowData.getStatus().equals(CodeDefaultLC.TASK_BACK.getValue())){//鍥炴敹
+                       cbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue());
+                   }
+                   cbo.setLastModifier(rowData.getEditor() == null ? "" : rowData.getEditor());//淇敼鑰�
+                }else if(operation.equals("delete")){
+                    if(rowData.getStatus().equals(CodeDefaultLC.TASK_BACK.getValue())){//鍥炴敹
+                        cbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue());
+                    }else{
+                        cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue());//鍋滅敤
+                    }
+                }
+                cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD,templateVO.getOid());
+                cbo.setAttributeValue(IMPORT_ROW_INDEX,rowData.getRowIndex());
+            }catch (Throwable e){
+                logger.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�",e);
+                errorMap.put(rowNumber,"璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�"+e.getMessage());
+            }finally {
+                codeOidToSystemOidMap.put(cbo.getOid(),oid);
+            }
+            cboList.add(cbo);
+        });
+
+    }
+
+    /**
+     * 妫�鏌ュ垎绫荤殑璺緞鏄惁瀛樺湪
+     * @param cboList 涓氬姟鏁版嵁
+     * @param errorMap 閿欒淇℃伅
+     * @param pathMap 璺緞鍜屽垎绫荤殑鏄犲皠
+     */
+    private void checkClassifyPathInHistory(List<ClientBusinessObject> cboList,
+                                           Map<String,String> errorMap,     Map<String/**璺緞**/,CodeClassifyVO> pathMap,
+                                            Map<String/**涓婚敭**/, String/**璺緞**/> childOidPathMap) {
+        cboList.parallelStream().forEach(cbo -> {
+            String classifyPath = cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD);
+            //濡傛灉path涓虹┖锛屽垯琛ㄧず鏄鍏ュ綋鍓嶅垎绫�
+            if(StringUtils.isBlank(classifyPath)){
+                classifyPath = "#current#";
+            }
+            if ( !pathMap.containsKey(classifyPath)) {
+                String row_index = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                errorMap.put(row_index,errorMap.getOrDefault(row_index,"") + ";鍒嗙被璺緞涓嶅瓨鍦�");
+            } else {
+                //杞竴涓嬪垎绫荤殑涓婚敭
+                try {
+                    String classifyOid = pathMap.get(classifyPath).getOid();
+                    cbo.setAttributeValueWithNoCheck(CODE_CLASSIFY_OID_FIELD, classifyOid);
+                    cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(classifyOid,classifyPath));
+                } catch (VCIError e) {
+                    logger.error("璁剧疆灞炴�х殑閿欒", e);
+                }
+            }
+        });
+    }
+
+    /**
+     * 妫�鏌ュ垎绫讳互鍙婂瓙鍒嗙被鏄惁閮芥湁缂栫爜瑙勫垯
+     * @param classifyVOMap 鍒嗙被鐨勬樉绀哄璞℃槧灏�
+     * @param ruleOidMap 瑙勫垯鐨勪富閿槧灏�
+     * @param unExistRuleClassifyOidList 涓嶅瓨鍦ㄧ紪鐮佽鍒欑殑鍒嗙被鐨勪富閿�
+     */
+    private void checkRuleOidInHistory( Map<String/**涓婚敭**/,CodeClassifyVO> classifyVOMap,  Map<String/**鍒嗙被涓婚敭**/,String/**瑙勫垯涓婚敭**/> ruleOidMap,
+                                        List<String> unExistRuleClassifyOidList   ){
+        if(!CollectionUtils.isEmpty(classifyVOMap)){
+            classifyVOMap.values().parallelStream().forEach(classifyVO->{
+                if(StringUtils.isNotBlank(classifyVO.getCoderuleoid())){
+                    ruleOidMap.put(classifyVO.getOid(),classifyVO.getCoderuleoid());
+                }else{
+                    //閫掑綊鎵句笂绾�
+                    List<String> ruleOidList = new ArrayList<>();
+                    recursionRule(classifyVOMap,classifyVO.getParentcodeclassifyoid(),ruleOidList);
+                    if(!CollectionUtils.isEmpty(ruleOidList)){
+                        ruleOidMap.put(classifyVO.getOid(),ruleOidList.get(0));
+                    }else{
+                        unExistRuleClassifyOidList.add(classifyVO.getOid());
+                    }
+                }
+            });
+        }
+        logger.info(";;;;");
+    }
+    /**
+     * 鑾峰彇瀛愬垎绫荤殑璺緞
+     * @param classifyFullInfo 鍒嗙被鍏ㄩ儴淇℃伅
+     * @param fullPath 鍒嗙被鐨勫叏璺緞
+     * @return 瀛愬垎绫荤殑璺緞锛宬ey鏄垎绫荤殑涓婚敭
+     */
+    private Map<String/**鍒嗙被鐨勪富閿�**/,String/**鍒嗙被璺緞**/> getChildClassifyPathMap(CodeClassifyFullInfoBO classifyFullInfo,String fullPath){
+        List<CodeClassifyVO> childPathVOs = classifyService.listChildrenClassify(classifyFullInfo.getCurrentClassifyVO().getOid(), true, VciQueryWrapperForDO.OID_FIELD, true);
+        Map<String/**鍒嗙被鐨勪富閿�**/,String/**鍒嗙被鐨勪富閿�**/> childOidPathMap = new ConcurrentHashMap<>();
+        if(!CollectionUtils.isEmpty(childPathVOs)){
+            childPathVOs.parallelStream().forEach(childPath->{
+               // String thisClassifyPath = fullPath + "##" + childPath.getPath().replace("#" + classifyFullInfo.getCurrentClassifyVO().getOid() + "#","").replace("#","##");
+                List<String> list=Arrays.asList(childPath.getPath().split("#"));
+                List<String> newPahtList=  list.stream().sorted(Comparator.comparing(s -> s,Comparator.reverseOrder())).collect(Collectors.toList());
+                String thisClassifyPath=StringUtils.join(newPahtList,"##")+fullPath;
+                childOidPathMap.put(childPath.getOid(),thisClassifyPath);
+            });
+        }
+        return childOidPathMap;
+    }
+
+    /**
+     * 鑾峰彇鍒嗙被鐨勫叏璺緞
+     * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @return 鍏ㄨ矾寰�
+     */
+    private String getFullPath(CodeClassifyFullInfoBO classifyFullInfo){
+        String fullPath = "";
+        if(!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())){
+            fullPath = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel())))
+                    .map(CodeClassifyVO::getOid).collect(Collectors.joining("##"));
+        }else{
+            fullPath = classifyFullInfo.getCurrentClassifyVO().getOid();
+        }
+        return fullPath;
+    }
+
+    /***
+     *  @param titleRowData
+     * @param newTemplateVO
+     * @param execlData
+     * @param codeImprotDataVO
+     */
+    private void createExeclClassData(List<String> titleRowData, CodeClassifyTemplateVO newTemplateVO, Map<Integer, String> execlData, CodeImprotDataVO codeImprotDataVO){
+        //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+        List<CodeClassifyTemplateAttrVO> attrVOS = newTemplateVO.getAttributes().stream().filter(s ->
+                !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag())
+        ).collect(Collectors.toList());
+        Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId()));
+        List<String> fields=new ArrayList<>();
+        Map<String,String> filedValueMap=new HashMap<>();
+        List<String> colNames=new ArrayList<>();
+        for (int i = 0; i < titleRowData.size(); i++) {
+            String title = titleRowData.get(i);
+            title=title.replace(KEY_ATTR_CHAR,"").replace(REQUIRED_CHAR,"");
+            String id = attrNameIdMap.getOrDefault(title,"");
+            if(StringUtils.isBlank(id) && "鍒嗙被璺緞".equalsIgnoreCase(title)){
+                id = CODE_CLASSIFY_OID_FIELD;
+            }
+            if(StringUtils.isBlank(id) && "鐮佹瀹藉害".equalsIgnoreCase(title)){
+                id = CODE_SEC_LENGTH_FIELD;
+            }
+            if(StringUtils.isBlank(id) && "浼佷笟缂栫爜".equalsIgnoreCase(title)){
+                id = CODE_FIELD;
+            }
+            if(StringUtils.isNotBlank(id)){
+               // fieldIndexMap.put(i,id);id
+                fields.add(id);
+                colNames.add(title);
+                String value= StringUtils.isNotBlank(execlData.get(i))?execlData.get(i):"";
+                filedValueMap.put(id,value);
+
+            }
+        }
+        filedValueMap.put(IMPORT_ROW_INDEX,codeImprotDataVO.getRowIndex());
+        codeImprotDataVO.setFields(fields);
+        codeImprotDataVO.setColNames(colNames);
+        codeImprotDataVO.getDatas().add(filedValueMap);
+    }
+
+    /**
+     * excel鐨勬爣棰樹笂鑾峰彇瀛楁鎵�鍦ㄧ殑浣嶇疆
+     * @param titleRowData 鏍囬鐨勫唴瀹�
+     * @param attrNameIdMap 妯℃澘涓睘鎬у悕绉板拰鑻辨枃鐨勬槧灏�
+     * @param fieldIndexMap 浣嶇疆鍜岃嫳鏂囧瓧娈电殑鏄犲皠
+     */
+    private void getFieldIndexMap(List<String> titleRowData,Map<String/**鍚嶇О**/,String/**瀛楁鍚�**/> attrNameIdMap,Map<Integer/**浣嶇疆**/,String/**鑻辨枃鍚嶅瓧**/> fieldIndexMap){
+        for (int i = 0; i < titleRowData.size(); i++) {
+            String title = titleRowData.get(i);
+            String id = attrNameIdMap.getOrDefault(title.replace(KEY_ATTR_CHAR,"").replace(REQUIRED_CHAR,""),"");
+            if(StringUtils.isBlank(id) && "鍒嗙被璺緞".equalsIgnoreCase(title)){
+                id = CODE_CLASSIFY_OID_FIELD;
+            }
+            if(StringUtils.isBlank(id) && "鐮佹瀹藉害".equalsIgnoreCase(title)){
+                id = CODE_SEC_LENGTH_FIELD;
+            }
+            if(StringUtils.isBlank(id) && "浼佷笟缂栫爜".equalsIgnoreCase(title)){
+                id = CODE_FIELD;
+            }
+            if(StringUtils.isNotBlank(id)){
+                fieldIndexMap.put(i,id);
+            }
+        }
+    }
+
+
+    /**
+     * 閫掑綊鎵剧紪鐮佽鍒�
+     * @param classifyVOMap 鍒嗙被鐨勬樉绀哄璞℃槧灏�
+     * @param classifyOid 鍒嗙被鐨勪富閿�
+     * @param ruleOidList 瑙勫垯鐨勪富閿甽ist
+     */
+    private void recursionRule(Map<String, CodeClassifyVO> classifyVOMap,String classifyOid,List<String> ruleOidList){
+        if(classifyVOMap.containsKey(classifyOid)){
+            CodeClassifyVO classifyVO = classifyVOMap.get(classifyOid);
+            if(StringUtils.isNotBlank(classifyVO.getCoderuleoid())){
+                ruleOidList.add(classifyVO.getCoderuleoid());
+                return;
+            }else{
+                recursionRule(classifyVOMap,classifyVO.getParentcodeclassifyoid(),ruleOidList);
+            }
+        }else{
+            Map<String, CodeClassifyVO> parentClassifyVOMap=new HashMap<>();
+            CodeClassifyVO codeClassifyVO= this.classifyService.getObjectByOid(classifyOid);
+            parentClassifyVOMap.put(codeClassifyVO.getOid(),codeClassifyVO);
+            recursionRule(parentClassifyVOMap,codeClassifyVO.getOid(),ruleOidList);
+        }
+    }
+
+
+    /**
+     * 閿欒淇℃伅杩斿洖excel
+     * @param rowDataList 鎵�鏈夌殑瀵煎叆鏁版嵁
+     * @param errorMap 閿欒鐨勪俊鎭�
+     * @param needRowIndexList 闇�瑕佸啓鍏ョ殑鏁版嵁鐨勮鍙�
+     * @param titleRowData 鏍囬琛�
+     *
+     * @return 閿欒鐨別xcel鏂囦欢锛屾病鏈夐敊璇細杩斿洖绌�
+     */
+    private String returnErrorToExcel(Collection<SheetRowData> rowDataList,
+                                      Map<String,String> errorMap,
+                                      List<String> needRowIndexList,List<String> titleRowData){
+        if(CollectionUtils.isEmpty(errorMap)){
+            return "";
+        }
+        Map<String, SheetRowData> rowIndexDataMap = rowDataList.stream().filter(s -> !needRowIndexList.contains(s.getRowIndex())).collect(Collectors.toMap(s -> s.getRowIndex(), t -> t));
+        List<WriteExcelData> errorDataList = new ArrayList<>();
+        errorDataList.add(new WriteExcelData(0,0,"閿欒淇℃伅"));
+        for (int i = 0; i < titleRowData.size(); i++) {
+            //閿欒淇℃伅鍦ㄦ渶鍚�
+            errorDataList.add(new WriteExcelData(0,i+1,titleRowData.get(i)));
+        }
+        Integer[] newRowIndex = new Integer[]{1};
+        errorMap.forEach((index,error)->{
+            //閿欒淇℃伅鍏ㄩ儴缁勫悎鍒颁竴璧�
+            SheetRowData rowData = rowIndexDataMap.getOrDefault(index, null);
+            if(rowData!=null){
+                errorDataList.add(new WriteExcelData(newRowIndex[0],0,error));
+                rowData.getData().forEach((colIndex,value)->{
+                    errorDataList.add(new WriteExcelData(newRowIndex[0],colIndex+1,value));
+                });
+                newRowIndex[0]++;
+            }
+        });
+        String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "閿欒淇℃伅.xls";
+        WriteExcelOption eo = new WriteExcelOption(errorDataList);
+        try {
+            new File(excelFileName).createNewFile();
+        } catch (IOException e) {
+            throw new VciBaseException(LangBaseUtil.getErrorMsg(e));
+        }
+        ExcelUtil.writeDataToFile(excelFileName,eo);
+        return excelFileName;
+    }
+
+    /**
+     * 鑾峰彇灞炴�у湪excel涓殑琛屾暟
+     * @param fieldIndexIdMap 鍒楀彿-瀛楁鏄犲皠
+     * @param attrId 灞炴�х殑缂栧彿
+     * @return 鍒楀彿
+     */
+    private Integer getIndexInRowData(Map<Integer,String> fieldIndexIdMap,String attrId){
+        return fieldIndexIdMap.keySet().stream().filter(
+                index -> attrId.equalsIgnoreCase(fieldIndexIdMap.get(index))).findFirst().orElseGet(()->0);
+    }
+
+    /**
+     * 澶勭悊鏋氫妇鐨勬樉绀哄璞�
+     * @param attrVOS 妯℃澘灞炴��
+     * @param dataList excel鐨勬暟鎹唴瀹�
+     * @param errorMap 閿欒淇℃伅鐨勬槧灏�
+     */
+    private void batchSwitchEnumAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList,
+                                            Map<String,String> errorMap ) {
+        Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = attrVOS.stream().filter(
+                s -> (StringUtils.isNotBlank(s.getEnumString()) || StringUtils.isNotBlank(s.getEnumid()))
+        ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(dateAttrVOMap)) {
+            dateAttrVOMap.forEach((attrId, attrVO) -> {
+                dataList.stream().forEach(cbo -> {
+                    String text = cbo.getAttributeValue(attrId);
+                    if(StringUtils.isNotBlank(text)){
+                        List<KeyValue> valueList = engineService.listComboboxItems(attrVO);
+                        boolean fined = false;
+                        for (int i = 0; i < valueList.size(); i++) {
+                            KeyValue keyValue = valueList.get(i);
+                            //if(keyValue.getValue().equalsIgnoreCase(text)){
+                            if(keyValue.getValue().equalsIgnoreCase(text)||keyValue.getKey().equalsIgnoreCase(text)){
+                                try {
+                                    cbo.setAttributeValue(attrId, keyValue.getKey());
+                                }catch (Throwable e){
+                                    logger.error("璁剧疆灞炴�у嚭閿�");
+                                }
+                                fined = true;
+                                break;
+                            }
+                        }
+                        if(!fined){
+                            String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                            errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";灞炴�" + attrVO.getName() + "]鐨勫�间笉绗﹀悎涓嬫媺鐨勮姹�");
+                        }
+                    }
+                });
+            });
+        }
+    }
+
+    /**
+     * 杞Щboolean鍨嬬殑灞炴��
+     * @param attrVOS 灞炴�х殑瀵硅薄
+     * @param dataList 鏁版嵁
+     */
+    private void reSwitchBooleanAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList){
+        Map<String, CodeClassifyTemplateAttrVO> booleanAttrMap = attrVOS.stream().filter(
+                s -> VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(s.getAttributedatatype())
+        ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(booleanAttrMap)) {
+            booleanAttrMap.forEach((attrId, attrVO) -> {
+                dataList.stream().forEach(cbo -> {
+                    String text = cbo.getAttributeValue(attrId);
+                    try {
+                        if (BooleanEnum.TRUE.getValue().equalsIgnoreCase(text) || "鏄�".equalsIgnoreCase(text)) {
+                            cbo.setAttributeValue(attrId, BooleanEnum.TRUE.getValue());
+                        } else {
+                            cbo.setAttributeValue(attrId, BooleanEnum.FASLE.getValue());
+                        }
+                    }catch (Throwable e){
+
+                    }
+                });
+            });
+        }
+    }
+
+    /**
+     * 杞崲鍙傜収鐨勫��
+     * @param attrVOS 灞炴�х殑鏄剧ず瀵硅薄
+     * @param dataList 鏁版嵁鍒楄〃
+     * @param errorMap 閿欒鐨勪俊鎭�
+     */
+    private void batchSwitchReferAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList,Map<String,String> errorMap){
+        Map<String, CodeClassifyTemplateAttrVO> referAttrVOMap = attrVOS.stream().filter(
+                s -> (StringUtils.isNotBlank(s.getReferbtmid()) || StringUtils.isNotBlank(s.getReferConfig()))
+        ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if(!CollectionUtils.isEmpty(referAttrVOMap)){
+            Map<String/**琛ㄦ牸鍜屽�肩殑灞炴��**/,Map<String/**鏄剧ず灞炴�х殑鍊�**/,List<String>/**琛ㄦ牸閲岀殑鍊�**/>> linkValueMap = new HashMap<>();
+            referAttrVOMap.forEach((attrId,attrVO)->{
+                dataList.stream().forEach(cbo -> {
+                    String text = cbo.getAttributeValue(attrId);
+                    if(StringUtils.isNotBlank(text)){
+                        UIFormReferVO referVO = getReferVO(attrVO);
+                        String valueField = getValueField(referVO);
+                        String showText = getTextField(referVO);
+                        String tableAndAttr = VciBaseUtil.getTableName(referVO.getReferType()) + "#" + valueField;
+                        Map<String, List<String>> showTextMap = linkValueMap.getOrDefault(tableAndAttr, new HashMap<>());
+                        List<String> textList = showTextMap.getOrDefault(showText, new ArrayList<>());
+                        if(!textList.contains(text)) {
+                            textList.add(text);
+                        }
+                        showTextMap.put(showText,textList);
+                        linkValueMap.put(tableAndAttr,showTextMap);
+                    }
+                });
+            });
+            if(!CollectionUtils.isEmpty(linkValueMap)){
+                //闇�瑕侀�愪釜琛ㄧ殑鍊煎瓧娈碉紝閫愪釜鏌ヨ
+                Map<String/**琛ㄦ牸鍜屽�煎睘鎬�**/,Map<String/**鏄剧ず灞炴��**/, Map<String/**鍊�**/,String/**鏄剧ず鐨勫��**/>>> linkCboMap = new HashMap<>();
+                linkValueMap.forEach((tableAndAttr,showValueMap)->{
+                    String[] split = tableAndAttr.split("#");
+                    String table = split[0];
+                    String valueField = split[1].toLowerCase(Locale.ROOT);
+                    Map<String,Map<String,String>> dataMap = new HashMap<>();
+                    showValueMap.forEach((showText,valueList)->{
+                        Map<String,String> valueOidTextMap = new HashMap<>();
+                        List<List<String>> valueCollections = VciBaseUtil.switchListForOracleIn(valueList);
+                        String sql = "select " + valueField + "," + showText.toLowerCase(Locale.ROOT) +" from " + table + "  where " + showText + " in (%s)";
+                        valueCollections.stream().forEach(values->{
+                            List<ClientBusinessObject> cbos = boService.queryByOnlySql(String.format(sql, VciBaseUtil.toInSql(values.toArray(new String[0]))));
+                            if(!CollectionUtils.isEmpty(cbos)){
+                                valueOidTextMap.putAll(cbos.stream().collect(Collectors.toMap(s->s.getAttributeValue(valueField),t->t.getAttributeValue(showText))));
+                            }
+                        });
+                        dataMap.put(showText,valueOidTextMap);
+                    });
+                    linkCboMap.put(tableAndAttr,dataMap);
+                });
+                referAttrVOMap.forEach((attrId,attrVO)->{
+                    dataList.stream().forEach(cbo -> {
+                        String text = cbo.getAttributeValue(attrId);
+                        if (StringUtils.isNotBlank(text)) {
+                            UIFormReferVO referVO = getReferVO(attrVO);
+                            String valueField = getValueField(referVO);
+                            String showText = getTextField(referVO);
+                            String tableAndAttr = VciBaseUtil.getTableName(referVO.getReferType()) + "#" + valueField;
+                            if(!linkCboMap.containsKey(tableAndAttr)){
+                                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                                errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍙傛暟灞炴�" + attrVO.getName() + "]鐨勫�煎湪绯荤粺涓笉瀛樺湪" );
+
+                            }else{
+                                Map<String, Map<String, String>> dataMap = linkCboMap.get(tableAndAttr);
+                                if(!dataMap.containsKey(showText)){
+                                    String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                                    errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍙傛暟灞炴�" + attrVO.getName() + "]鐨勫�煎湪绯荤粺涓笉瀛樺湪" );
+                                }else{
+                                    Map<String, String> data = dataMap.get(showText);
+                                    final boolean[] fined = {false};
+                                    data.forEach((key,value)->{
+                                        if(value.equalsIgnoreCase(text)){
+                                            fined[0] = true;
+                                            try {
+                                                cbo.setAttributeValue(attrId, key);
+                                            }catch (Throwable e){
+
+                                            }
+                                        }
+                                    });
+                                    if(!fined[0]){
+                                        String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                                        errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍙傛暟灞炴�" + attrVO.getName() + "]鐨勫�煎湪绯荤粺涓笉瀛樺湪" );
+                                    }
+                                }
+                            }
+                        }
+                    });
+                });
+            }
+        }
+
+    }
+
+    /**
+     * 浠庡睘鎬т笂鑾峰彇鍙傜収鐨勫唴瀹�
+     * @param attrVO 灞炴�х殑淇℃伅
+     * @return 鍙傜収鐨勫唴瀹�
+     */
+    private UIFormReferVO getReferVO(CodeClassifyTemplateAttrVO attrVO){
+        UIFormReferVO referVO = null;
+        if(StringUtils.isNotBlank(attrVO.getReferConfig())){
+            referVO = JSONObject.parseObject(attrVO.getReferConfig(),UIFormReferVO.class);
+        }else{
+            referVO = new UIFormReferVO();
+            referVO.setReferType(attrVO.getReferbtmid());
+            referVO.setValueField(VciQueryWrapperForDO.OID_FIELD);
+            referVO.setTextField("name");
+        }
+        return referVO;
+    }
+
+    /**
+     * 鑾峰彇鍙傜収涓殑鍊肩殑瀛楁
+     * @param referVO 鍙傜収鐨勫璞�
+     * @return 榛樿涓篛id锛屾湁澶氫釜鐨勬椂鍊欙紝鑾峰彇绗竴涓�
+     */
+    private String getValueField(UIFormReferVO referVO){
+        String showText = referVO.getValueField();
+        if(StringUtils.isBlank(showText)){
+            return "oid";
+        }
+        if(showText.contains(",")){
+            //闃叉涓囦竴鏈夊涓紝鐪嬬湅鏈夋病鏈塷id
+            List<String> strings = VciBaseUtil.str2List(showText);
+            if(strings.contains("oid")){
+                showText = "oid";
+            }else{
+                showText = strings.get(0);
+            }
+        }
+        return showText;
+    }
+
+    /**
+     * 鑾峰彇鍙傜収涓殑鏄剧ず鍐呭鐨勫瓧娈�
+     * @param referVO 鍙傜収鐨勫璞�
+     * @return 榛樿涓簄ame锛屾湁澶氫釜鐨勬椂鍊欙紝鑾峰彇绗竴涓�
+     */
+    private String getTextField(UIFormReferVO referVO){
+        String showText = referVO.getTextField();
+        if(StringUtils.isBlank(showText)){
+            return "name";
+        }
+        if(showText.contains(",")){
+            //闃叉涓囦竴鏈夊涓紝鐪嬬湅鏈夋病鏈塶ame
+            List<String> strings = VciBaseUtil.str2List(showText);
+            if(strings.contains("name")){
+                showText = "name";
+            }else{
+                showText = strings.get(0);
+            }
+        }
+        return showText;
+    }
+
+
+
+    /**
+     * 澶勭悊鍒嗙被娉ㄥ叆
+     * @param attrVOS 妯℃澘灞炴��
+     * @param dataList excel鐨勬暟鎹唴瀹�
+     * @param classifyFullInfo 鍒嗙被鐨勫叏璺緞
+     */
+    private void batchSwitchClassifyAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList,
+                                                 CodeClassifyFullInfoBO classifyFullInfo,boolean isImPort) {
+        Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = attrVOS.stream().filter(
+                s -> StringUtils.isNotBlank(s.getClassifyinvokeattr()) && StringUtils.isNotBlank(s.getClassifyinvokelevel())
+        ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        Map<String,CodeClassifyFullInfoBO> classifyFullInfoMap=new HashMap<>();
+        classifyFullInfoMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(),classifyFullInfo);
+        if (!CollectionUtils.isEmpty(dateAttrVOMap)) {
+            dataList.stream().forEach(cbo -> {
+                dateAttrVOMap.forEach((attrId, attrVO) -> {
+                    //鍒嗙被娉ㄥ叆鐨勭紪鍙锋垨鑰呭悕绉帮紝
+                    //灞傜骇鍖呭惈鎸囧畾灞傚拰鏈�灏忓眰
+                    CodeClassifyVO classifyVO = null;
+                    if(!CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(attrVO.getClassifyinvokelevel()) && !"min".equalsIgnoreCase(attrVO.getClassifyinvokelevel())) {
+                        //鎸囧畾浜嗗眰绾х殑
+                        //娉ㄦ剰锛屽洜涓烘煡璇笂绾у垎绫诲嚭鏉ョ殑灞傜骇鏄�掑簭鐨勶紝鍗抽《灞傝妭鐐规槸鏈�澶х殑鍊�
+                        if(isImPort){
+                            if(!classifyFullInfoMap.containsKey(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD))) {
+                                CodeClassifyFullInfoBO currentClassifyFullInfo = classifyService.getClassifyFullInfo(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD));
+                                classifyFullInfoMap.put(currentClassifyFullInfo.getCurrentClassifyVO().getOid(), currentClassifyFullInfo);
+                            }
+                        }
+                        CodeClassifyFullInfoBO newClassifyFullInfo= classifyFullInfoMap.get(cbo.getAttributeValue(CODE_CLASSIFY_OID_FIELD));
+                        List<CodeClassifyVO> classifyVOS = newClassifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList());
+                        int level = VciBaseUtil.getInt(attrVO.getClassifyinvokelevel());
+                        if (classifyVOS.size()>=level && level > 0 ) {
+                            classifyVO = classifyVOS.get(level-1);
+                        }
+                    }else{
+                        //褰撳墠鐨勫垎绫�
+                        classifyVO = classifyFullInfo.getCurrentClassifyVO();
+                    }
+                    try {
+                        if (classifyVO == null) {
+                            //璇存槑灞傜骇鏈夎
+                            cbo.setAttributeValue(attrId, "鍒嗙被鏍戜笂娌℃湁灞傜骇[" + attrVO.getClassifyinvokelevel() + "]");
+                        } else {
+                            Map<String, String> classifyDataMap = VciBaseUtil.objectToMapString(classifyVO);
+                            String value = classifyDataMap.getOrDefault(attrVO.getClassifyinvokeattr(), "");
+                            cbo.setAttributeValue(attrId, value);
+                        }
+                    } catch (Throwable e) {
+                        logger.error("璁剧疆灞炴�ч敊璇�", e);
+                    }
+                });
+            });
+        }
+    }
+
+    /**
+     * 澶勭悊缁勫悎瑙勫垯
+     * @param attrVOS 妯℃澘灞炴��
+     * @param dataList excel鐨勬暟鎹唴瀹�
+     */
+    private void batchSwitchComponentAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList) {
+        Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = attrVOS.stream().filter(s -> StringUtils.isNotBlank(s.getComponentrule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if(!CollectionUtils.isEmpty(dateAttrVOMap)) {
+            dateAttrVOMap.forEach((attrId, attrVO) -> {
+                dataList.stream().forEach(cbo -> {
+                    //浠巈xcel涓婃妸灞炴�ц浆鎹负map
+                    Map<String,String> thisRowDataMap = new HashMap<>();
+                    WebUtil.copyValueToMapFromCbos(cbo,thisRowDataMap);
+                    //缁勫悎鍐呭
+                    String value = formulaService.getValueByFormula(thisRowDataMap,attrVO.getComponentrule());
+                    if(value == null){
+                        value = "";
+                    }
+                    try {
+                        cbo.setAttributeValue(attrId, value);
+                    }catch (Throwable e){
+                        logger.error("璁剧疆灞炴�х殑閿欒",e);
+                    }
+                });
+            });
+        }
+    }
+
+    /**
+     * 鎵归噺杞崲鏃堕棿閮戒负鎸囧畾鐨勬牸寮�
+     * @param attrVOS 妯℃澘灞炴��
+     * @param cboList 鏁版嵁鐨勫垪琛�
+     * @param errorMap 閿欒鐨勪俊鎭�
+     */
+    private void batchSwitchDateAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> cboList,Map<String,String> errorMap){
+        Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap =attrVOS.stream().filter(s ->
+                StringUtils.isNotBlank(s.getCodedateformat()) && VciBaseUtil.getBoolean(s.getFormdisplayflag()) && StringUtils.isBlank(s.getComponentrule())
+                        && StringUtils.isBlank(s.getClassifyinvokeattr())
+        ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if(!CollectionUtils.isEmpty(dateAttrVOMap)) {
+            dateAttrVOMap.forEach((attrId, attrVO) -> {
+                cboList.stream().forEach(cbo -> {
+                    String value = cbo.getAttributeValue(attrId);
+                    if (value == null) {
+                        value = "";
+                    }
+                    if (StringUtils.isNotBlank(value)) {
+                        boolean formated = false;
+                        if(StringUtils.isNotBlank(attrVO.getCodedateformat())){
+                            try {
+                                Date date = VciDateUtil.str2Date(value, attrVO.getCodedateformat());
+                                if(date!=null){
+                                    cbo.setAttributeValue(attrId,value);
+                                    formated = true;
+                                }
+                            } catch (Exception e) {
+                                //璇存槑涓嶆槸杩欎釜鏍煎紡
+                            }
+                        }
+                        if(!formated) {
+                            try {
+                                DateConverter dateConverter = new DateConverter();
+                                dateConverter.setAsText(value);
+                                value = VciDateUtil.date2Str(dateConverter.getValue(), VciDateUtil.DateTimeMillFormat);
+                                cbo.setAttributeValue(attrId,value);
+                            }catch (Throwable e){
+                                //杞崲涓嶄簡
+                                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                                errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";灞炴�" + attrVO.getName() + "]鏃堕棿鏍煎紡涓嶆纭�" );
+                            }
+                        }
+                    }
+                });
+            });
+        }
+    }
+
+    /**
+     * 鏍¢獙鏄惁鏋氫妇鐨勫彇鍊艰寖鍥�
+     * @param attrVOS 妯℃澘灞炴��
+     * @param dataList 鏁版嵁鐨勫垪琛�
+     * @return 涓嶇鍚堟灇涓惧彇鍊艰繑鍥炵殑琛屾暟
+     */
+    private Set<String> batchCheckEnumOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS, List<ClientBusinessObject> dataList) {
+        //濡傛灉鏋氫妇鍙互淇敼锛屽垯涓嶉渶瑕佹牎楠屾槸鍚︾鍚堟灇涓剧殑閫夐」
+        Map<String, CodeClassifyTemplateAttrVO> enumAttrVOMap = attrVOS.stream().filter(s -> (StringUtils.isNotBlank(s.getEnumString()) || StringUtils.isNotBlank(s.getEnumid())) && !VciBaseUtil.getBoolean(s.getEnumeditflag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if(!CollectionUtils.isEmpty(enumAttrVOMap)){
+            return dataList.stream().filter(cbo->
+                    enumAttrVOMap.keySet().stream().anyMatch(attrId-> {
+                        String value = cbo.getAttributeValue(attrId);
+                        if(StringUtils.isNotBlank(value)) {
+                            CodeClassifyTemplateAttrVO attrVO = enumAttrVOMap.get(attrId);
+                            List<KeyValue> comboboxKVs = engineService.listComboboxItems(attrVO);
+                            return !comboboxKVs.stream().anyMatch(s -> value.equalsIgnoreCase(s.getValue()));
+                        }else{
+                            return false;
+                        }
+                    })).map(s->s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toSet());
+        }
+        return new HashSet<>();
+    }
+
+    /**
+     * 妫�鏌ユ牎楠岃鍒欐病鏈夐�氳繃鐨勫唴瀹�
+     * @param attrVOS 闇�瑕佹牎楠岀殑灞炴��
+     * @param dataList 鏁版嵁鐨勫垪琛�
+     * @param errorMap 閿欒鐨勪俊鎭槧灏�
+     * @return 鏍¢獙涓嶉�氳繃鐨勮鏁�
+     */
+    private void batchCheckVerifyOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS, List<ClientBusinessObject> dataList,Map<String,String> errorMap) {
+        Map<String, CodeClassifyTemplateAttrVO> verifyAttrVOMap = attrVOS.stream().filter(s -> StringUtils.isNotBlank(s.getVerifyrule()) && StringUtils.isBlank(s.getComponentrule())
+                &&StringUtils.isBlank(s.getClassifyinvokeattr())
+        ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if(!CollectionUtils.isEmpty(verifyAttrVOMap)){
+            Map<String/**琛屽彿**/,List<String>/**鏍¢獙涓嶉�氳繃鐨勫睘鎬�**/> unPassCheckMap = new HashMap<>();
+            verifyAttrVOMap.forEach((attrId,attrVO)->{
+                dataList.stream().forEach(cbo -> {
+                    String value = cbo.getAttributeValue(attrId);
+                    if(StringUtils.isNotBlank(value) && !value.matches(attrVO.getVerifyrule())){
+                        String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                        List<String> unPassAttrs = unPassCheckMap.getOrDefault(rowIndex, new ArrayList<>());
+                        unPassAttrs.add(attrVO.getName());
+                        unPassCheckMap.put(rowIndex,unPassAttrs);
+                    }
+                });
+            });
+            if(!CollectionUtils.isEmpty(unPassCheckMap)){
+                unPassCheckMap.forEach((rowIndex,unPassAttrs)->{
+                    errorMap.put(rowIndex,";灞炴�" + unPassAttrs.stream().collect(Collectors.joining(",")) + "]鍐呭涓嶇鍚堟牎楠岃鍒欑殑瑕佹眰");
+                });
+            }
+        }
+    }
+
+    private void bathcResembleQuery(String codeClassifyOid, CodeClassifyTemplateVO templateVO, List<ClientBusinessObject> cboList,Map<String,String>resembleMap,String btmtypeid,List<DataResembleVO> dataResembleVOS){
+        CodeClassifyFullInfoBO fullInfoBO = classifyService.getClassifyFullInfo(codeClassifyOid);
+        Map<String, String> conditionMap = new HashMap<>();
+        CodeResembleRuleVO resembleRuleVO = Optional.ofNullable(engineService.getUseResembleRule(fullInfoBO, fullInfoBO.getCurrentClassifyVO())).orElseGet(() -> new CodeResembleRuleVO());
+        //闇�瑕佽幏鍙栨槸鍚︽湁鐩镐技鏌ヨ灞炴��
+        Map<String, CodeClassifyTemplateAttrVO> attrVOs = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getSamerepeatattrflag())).collect(Collectors.toMap(s -> s.getId(), t -> t));
+        if (CollectionUtils.isEmpty(attrVOs)) {
+            return;
+        }
+        Map<String,CodeImprotResembleVO> codeImprotResembleVOMap=new HashMap<>();
+        List<CodeImprotResembleVO> codeImprotResembleVOList=new ArrayList<>();
+        Map<String,String> rowIndePathMap=new HashMap<>();
+        cboList.stream().forEach(clientBusinessObject -> {
+            CodeImprotResembleVO codeImprotResembleVO=new CodeImprotResembleVO();
+            final String[] path = {""};
+            List<String> fieldList=new ArrayList<>();
+            List<String> rowIndeList=new ArrayList<>();
+            String rowIndex = clientBusinessObject.getAttributeValue(IMPORT_ROW_INDEX);
+            attrVOs.forEach((attrId, attrVO) -> {
+                String value="";
+                /*if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) {
+                    value = WebUtil.getStringValueFromObject(WebUtil.getValueFromField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO));
+                }else {*/
+                    value= clientBusinessObject.getAttributeValue(attrId);
+               // }
+                fieldList.add(attrId);
+                value=StringUtils.isBlank(value)?"":value;
+                path[0] +=value+"#";
+                engineService.wrapperResembleConditionMap(value, resembleRuleVO, attrId, conditionMap);
+            });
+            List<Map<String,String>> dataMap=new ArrayList<>();
+            if(codeImprotResembleVOMap.containsKey(path[0])) {
+                codeImprotResembleVO=codeImprotResembleVOMap.get(path[0]);
+                rowIndeList=codeImprotResembleVO.getRownIndex();
+                dataMap=  codeImprotResembleVO.getDataList();
+                resembleMap.put(rowIndex, "瀛樺湪鐩镐技鏁版嵁");
+            }else{
+                if (!CollectionUtils.isEmpty(conditionMap)) {
+                    Map<String, String> andConditionMap = new HashMap<>();
+                    andConditionMap.put("islastr", "1");
+                    andConditionMap.put("islastv", "1");
+                    conditionMap.putAll(andConditionMap);
+                    PageHelper pageHelper = new PageHelper(-1);
+                    pageHelper.addDefaultDesc("id");
+                    CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(btmtypeid, templateVO, conditionMap, pageHelper);
+                    List<ClientBusinessObject> resembleCboList=boService.queryByOnlySql(sqlBO.getSqlUnPage());
+                    if(!CollectionUtils.isEmpty(resembleCboList)) {
+                        List<Map<String, String>> finalDataMap = dataMap;
+                        resembleCboList.stream().forEach(cbo->{
+                            Map<String,String> resembDataMap=new HashMap<>();
+                            fieldList.stream().forEach(field->{
+                                String value=cbo.getAttributeValue(field);
+                                value=StringUtils.isBlank(value)?"":value;
+                                resembDataMap.put(field,value);
+                            });
+                            resembDataMap.put("id",StringUtils.isBlank(cbo.getAttributeValue("id"))?"":cbo.getAttributeValue("id"));
+                            resembDataMap.put("rowIndex","");
+                            finalDataMap.add(resembDataMap);
+                        });
+                        resembleMap.put(rowIndex, "瀛樺湪鐩镐技鏁版嵁");
+
+                    }
+                }
+            }
+            rowIndePathMap.put(rowIndex,path[0]);
+            rowIndeList.add(rowIndex);
+            codeImprotResembleVO.setPath(path[0]);
+            codeImprotResembleVO.setRownIndex(rowIndeList);
+            codeImprotResembleVO.setConditionMap(conditionMap);
+            codeImprotResembleVO.setFields(fieldList);
+            codeImprotResembleVO.setDataList(dataMap);
+            codeImprotResembleVOMap.put(path[0],codeImprotResembleVO);
+        });
+        Map<String, ClientBusinessObject> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getAttributeValue((IMPORT_ROW_INDEX)), t -> t));
+        if(!CollectionUtils.isEmpty(rowIndePathMap)){
+            rowIndePathMap.forEach((rowIndex, path) -> {
+            if(codeImprotResembleVOMap.containsKey(path)){
+                CodeImprotResembleVO codeImprotResembleVO=  codeImprotResembleVOMap.get(path);
+                List<String> fieldList=codeImprotResembleVO.getFields();
+                List<String> rownIndexList= codeImprotResembleVO.getRownIndex();
+                List<String> newRownIndexList = rownIndexList.stream().filter(cbo -> {
+                    return rowIndex!=cbo;
+                }).collect(Collectors.toList());
+                newRownIndexList.stream().forEach(s -> {
+                    resembleMap.put(s, "瀛樺湪鐩镐技鏁版嵁");
+                });
+                List<Map<String, String>>newDataList=new ArrayList<>();
+                DataResembleVO dataResembleVO=new DataResembleVO();
+                dataResembleVO.setOid(cboMap.get(rowIndex).getOid());
+                List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> {
+                    String newRowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                    return rownIndexList.contains(newRowIndex)&&(!newRowIndex.equalsIgnoreCase(rowIndex));
+                }).collect(Collectors.toList());
+                if(!CollectionUtils.isEmpty(needSaveCboList)) {
+                    needSaveCboList.stream().forEach(cbo -> {
+                        String newRowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                        Map<String, String> resembDataMap = new HashMap<>();
+                        fieldList.stream().forEach(field -> {
+                            String value = cbo.getAttributeValue(field);
+                            value = StringUtils.isBlank(value) ? "" : value;
+                            resembDataMap.put(field, value);
+                        });
+                        resembDataMap.put("id",StringUtils.isBlank(cbo.getAttributeValue("id"))?"":cbo.getAttributeValue("id"));
+                        resembDataMap.put("rowIndex", newRowIndex);
+                        newDataList.add(resembDataMap);
+                    });
+                }
+                List<Map<String, String>>dataList=codeImprotResembleVO.getDataList();
+                newDataList.addAll(dataList);
+                dataResembleVO.setDataList(newDataList);
+                dataResembleVOS.add(dataResembleVO);
+            }
+           });
+        }
+    }
+
+    /**
+     * 鏍¢獙鍏抽敭灞炴��
+     * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param templateVO 妯℃澘鐨勫唴瀹癸紝蹇呴』鍖呭惈妯℃澘灞炴��
+     * @param cboList 鎵归噺鐨勬暟鎹�
+     */
+    private CodeImportResultVO batchCheckKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO,
+                                          List<ClientBusinessObject> cboList) {
+        //涓嶮dmEngineServiceImpl閲岀殑checkKeyAttrOnOrder鐩镐技
+        //鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮�
+        CodeKeyAttrRepeatRuleVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo);
+        //娉ㄦ剰鐨勬槸keyRuleVO鍙兘涓虹┖锛岃〃绀轰笉浣跨敤瑙勫垯鎺у埗
+        //鑾峰彇鎵�鏈夌殑鍏抽敭灞炴��
+        Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyattrflag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+
+        boolean trimAll =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
+        //鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖
+        boolean trim =keyRuleVO ==null?false:  VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
+        boolean ignoreCase = keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag());
+        boolean ignoreWidth = keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
+
+        //1. 鎴戜滑闇�瑕佸厛鍒ゆ柇excel瀵煎叆鐨勫唴瀹规槸鍚︽纭�
+        CodeImportResultVO resultVO = new CodeImportResultVO();
+        resultVO.setKeyAttrRuleInfo(String.format(keyRuleVO ==null?"":"鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}",
+                new String[]{trim?"鏄�":"鍚�",ignoreCase?"鏄�":"鍚�",ignoreWidth?"鏄�":"鍚�",trimAll?"鏄�":"鍚�"}));
+        resultVO.setSelfRepeatRowIndexList(getSelfRepeatRowIndex(ketAttrMap,cboList,keyRuleVO));
+        if(!CollectionUtils.isEmpty(resultVO.getSelfRepeatRowIndexList())){
+            //鎴戜滑绉婚櫎鏈韩閲嶅鐨勬暟鎹�
+            cboList = cboList.stream().filter(s->!resultVO.getSelfRepeatRowIndexList().contains(s.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList());
+        }
+        //2.鍒ゆ柇鍏抽敭灞炴�у湪绯荤粺閲屾槸鍚﹂噸澶�
+        //鍥犱负鏁版嵁閲忓緢澶э紝鎵�浠ュ緱鎯冲姙娉曞苟琛�
+        SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+        Map<String,List<ClientBusinessObject>> indexTODataMap=new HashMap<>();
+        List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> {
+            //姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀�
+            VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+            Map<String, String> conditionMap = new HashMap<>();
+            ketAttrMap.forEach((attrId, attrVO) -> {
+                String value =cbo.getAttributeValue(attrId.toLowerCase(Locale.ROOT));
+                if (value == null) {
+                    value = "";
+                }
+                value= value.replace(REQUIRED_CHAR,SPECIAL_CHAR);
+                engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
+            });
+            if (!CollectionUtils.isEmpty(ketAttrMap)) {
+                CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), templateVO, conditionMap, null);
+               boolean isKeyCheck= boService.queryCountBySql(sqlBO.getSqlCount(), new HashMap<>()) > 0;
+                if(isKeyCheck){
+                    List<ClientBusinessObject> newCboList=  boService.queryByOnlySql(sqlBO.getSqlUnPage());
+                    indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX),newCboList);
+                }
+                return isKeyCheck;
+            }else{
+                return false;
+            }
+        }).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(repeatDataMap)){
+            resultVO.setKeyAttrRepeatRowIndexList(repeatDataMap.stream().map(s->s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toSet()));
+        }
+        resultVO.setIndexTODataMap(indexTODataMap);
+        resultVO.setSuccess(true);
+        return resultVO;
+    }
+
+    /**
+     * 鑾峰彇瀵煎叆鐨勫唴瀹逛腑鍏抽敭灞炴�ч噸澶嶇殑琛屽彿
+     * @param ketAttrMap 鍏抽敭灞炴�х殑鏄犲皠
+     * @param dataList 瀵煎叆鐨勬暟鎹�
+     * @param keyRuleVO 鍏抽敭灞炴�ф帶鍒惰鍒�
+     * @return 閲嶅鐨勮鍙�
+     */
+    private Set<String> getSelfRepeatRowIndex(Map<String/**灞炴�х殑缂栧彿**/, CodeClassifyTemplateAttrVO> ketAttrMap,
+                                              List<ClientBusinessObject> dataList,CodeKeyAttrRepeatRuleVO keyRuleVO){
+        Set<String> selfRepeatRowIndexList = new CopyOnWriteArraySet<>();
+        boolean trimAll =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
+        //鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖
+        boolean trim =keyRuleVO ==null?false:  VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
+        boolean ignoreCase = keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag());
+        boolean ignoreWidth = keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
+        //蹇呴』灏嗗睘鎬ф寜鐓ч『搴忔帓搴忓ソ
+        List<CodeClassifyTemplateAttrVO> attrVOList = ketAttrMap.values().stream().sorted(((o1, o2) -> o1.getOrdernum().compareTo(o2.getOrdernum()))).collect(Collectors.toList());
+        Map<String/**琛屽彿**/,String/**鍏抽敭灞炴�х殑缁勫悎鍐呭**/> rowIndexKeyStringMap = new HashMap<>();
+        dataList.parallelStream().forEach(cbo-> {
+            String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+            StringBuilder sb = new StringBuilder();
+            for (int i = 0; i < attrVOList.size(); i++) {
+                CodeClassifyTemplateAttrVO attrVO = attrVOList.get(i);
+                String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
+                String value = cbo.getAttributeValue( attrId);
+                if (value == null) {
+                    value = "";
+                }
+                if(trim){
+                    value = value.trim();
+                }
+                if(trimAll){
+                    value = value.replace(" ","");
+                }
+                if(ignoreCase){
+                    value = value.toLowerCase(Locale.ROOT);
+                }
+                if(ignoreWidth){
+                    value = VciBaseUtil.toDBC(value);
+                }
+                sb.append(value).append("${ks}");
+            }
+            String keyString = sb.toString();
+            if(rowIndexKeyStringMap.containsValue(keyString) && StringUtils.isNotBlank(keyString)){
+                selfRepeatRowIndexList.add(rowIndex);
+            }else {
+                rowIndexKeyStringMap.put(rowIndex, sb.toString());
+            }
+        });
+        //鍥犱负鍙槸鍏抽敭灞炴�ч噸澶嶏紝鎵�浠ユ垜浠笉鑳介噸澶嶇殑澶氭潯閫変竴鏉℃潵鎶ラ敊
+        return selfRepeatRowIndexList;
+    }
+
+    /**
+     * 瀵煎嚭鐨勬椂鍊欏皝瑁呭繀杈撳拰鍏抽敭灞炴��
+     * @param attrVO 灞炴�х殑鏄剧ず瀵硅薄
+     * @param text 鍗曞厓鏍肩殑鍊�
+     */
+    private Object exportKeyAndRequired(Workbook workbook,CodeClassifyTemplateAttrVO attrVO,Object text){
+        //蹇呰緭鍔�*锛屽叧閿睘鎬т负钃濊壊
+        if (VciBaseUtil.getBoolean(attrVO.getRequireflag()) || VciBaseUtil.getBoolean(attrVO.getKeyattrflag())) {
+            String value = text.toString();
+            if(VciBaseUtil.getBoolean(attrVO.getRequireflag())) {
+                value += REQUIRED_CHAR;
+            }
+            if(VciBaseUtil.getBoolean(attrVO.getKeyattrflag())){
+                value += KEY_ATTR_CHAR;
+            }
+            RichTextString ts = new HSSFRichTextString(value);
+            if(VciBaseUtil.getBoolean(attrVO.getRequireflag())){
+                Font font =  workbook.createFont();
+                font.setColor(HSSFColor.HSSFColorPredefined.RED.getIndex());
+                ts.applyFont(font);
+            }
+
+            if(VciBaseUtil.getBoolean(attrVO.getKeyattrflag())){
+                Font font =  workbook.createFont();
+                font.setColor(HSSFColor.HSSFColorPredefined.BLUE.getIndex());
+                ts.applyFont(font);
+            }
+            return ts;
+        }
+        return text;
+    }
+
+    /**
+     * 鏌ヨ鏁版嵁骞跺鍑哄埌excel
+     * @param btmTypeId 涓氬姟绫诲瀷
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉
+     * @param selectFieldList 鏌ヨ鐨勫瓧娈�
+     * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param templateVO 妯℃澘鐨勪俊鎭�
+     * @param exportAttrDTO 瀵煎嚭鐨勫睘鎬�
+     * @param excelNameList excel鐨勬枃浠跺悕绉�
+     * @param tempFolder 涓存椂鏂囦欢澶�
+     * @param excelIndex excel鐨勯『搴�
+     */
+    private void selectDataAndExportExcelName(String btmTypeId, Map<String, String> conditionMap, PageHelper pageHelper, List<String> selectFieldList,
+                                              CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, CodeExportAttrDTO exportAttrDTO,
+                                              List<String> excelNameList, String tempFolder,
+                                              Integer excelIndex) {
+        DataGrid<Map<String, String>> dataGrid = engineService.queryGrid(btmTypeId, templateVO, conditionMap, pageHelper);
+        if(dataGrid == null || CollectionUtils.isEmpty(dataGrid.getData())){
+            return;
+        }
+        //杞崲鏁版嵁
+        List<Map<String, String>> dataMap = dataGrid.getData();
+        //灏佽鏌ヨ鍑烘潵鐨勬暟鎹�
+        engineService.wrapperData(dataMap, templateVO, selectFieldList,false);
+        //modify by weidy@2022-09-27
+        //鍥犱负鍦ㄥ垪琛ㄥ拰琛ㄥ崟鐨勬樉绀虹殑鏃跺�欙紝鎴戜滑鐨勫紑鍏崇被鍨嬮〉闈細澶勭悊锛屼絾鏄湪瀵煎嚭鐨勬椂鍊欙紝鎴戜滑闇�瑕佸皢true鍜宖alse閮芥浛鎹㈡垚涓枃
+        engineService.wrapperBoolean(dataMap,templateVO);
+        Map<String, CodeClassifyTemplateAttrVO> attrVOMap = templateVO.getAttributes().stream().filter(s->selectFieldList.contains(s.getId().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        Map<Integer, String> attrIdIndexMap = exportAttrDTO.getAttrIdIndexMap();
+        if (CollectionUtils.isEmpty(attrIdIndexMap)) {
+            attrIdIndexMap = templateVO.getAttributes().stream().filter(s->selectFieldList.contains(s.getId().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getOrdernum(), t -> t.getId()));
+        }
+        List<Integer> indexList = attrIdIndexMap.keySet().stream().sorted().collect(Collectors.toList());
+
+        String excelName = tempFolder + File.separator +
+                classifyFullInfo.getCurrentClassifyVO().getId() + "_" + classifyFullInfo.getCurrentClassifyVO().getName() + "_瀵煎嚭_" + excelIndex + ".xls";
+        try {
+            new File(excelName).createNewFile();
+        } catch (Throwable e) {
+            throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e);
+        }
+        excelNameList.add(excelName);
+        List<WriteExcelData> excelDataList = new ArrayList<>();
+        Workbook workbook = new HSSFWorkbook();
+        for (int i = 0; i < indexList.size(); i++) {
+            String attrId = attrIdIndexMap.get(indexList.get(i)).toLowerCase(Locale.ROOT);
+            if (attrVOMap.containsKey(attrId)) {
+                CodeClassifyTemplateAttrVO attrVO = attrVOMap.get(attrId);
+                Object text = attrVO.getName();
+                text = exportKeyAndRequired(workbook,attrVO,text);
+                WriteExcelData excelData = new WriteExcelData(0, i, text);
+                if(text instanceof RichTextString){
+                    excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+                }
+                excelDataList.add(excelData);
+            }
+        }
+        final Integer[] rowIndex = {0};
+        Map<Integer, String> finalAttrIdIndexMap = attrIdIndexMap;
+        dataMap.stream().forEach(data -> {
+            rowIndex[0]++;
+            for (int i = 0; i < indexList.size(); i++) {
+                Integer index = indexList.get(i);
+                String attrId = finalAttrIdIndexMap.get(index).toLowerCase(Locale.ROOT);
+                if (attrVOMap.containsKey(attrId)) {
+                    CodeClassifyTemplateAttrVO attrVO = attrVOMap.get(attrId);
+                    if (StringUtils.isNotBlank(attrVO.getEnumid()) || StringUtils.isNotBlank(attrVO.getEnumString())) {
+                        attrId = attrId + "Text";
+                    }
+                    if (StringUtils.isNotBlank(attrVO.getReferbtmid()) || StringUtils.isNotBlank(attrVO.getReferConfig())) {
+                        attrId = attrId + "name";
+                    }
+                    if(VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(attrId)){
+                        attrId = VciQueryWrapperForDO.LC_STATUS_FIELD_TEXT.toLowerCase(Locale.ROOT);
+                    }
+                    excelDataList.add(new WriteExcelData(rowIndex[0], i, data.getOrDefault(attrId, "")));
+                }
+            }
+        });
+        WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
+        ExcelUtil.writeDataToFile(excelName, excelOption);
+    }
+
+    /**
+     * 鎵归噺鏍¢獙鏁版嵁鐨勪俊鎭�
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞�
+     * @param cboList 鏁版嵁鐨勫唴瀹�
+     */
+    private void batchCheckRequiredAttrOnOrder(CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList,Map<String,String> errorMap){
+        Map<String, CodeClassifyTemplateAttrVO> requiredAttrMap = templateVO.getAttributes().stream().filter(s ->
+                        VciBaseUtil.getBoolean(s.getRequireflag()) && StringUtils.isBlank(s.getComponentrule()) && StringUtils.isBlank(s.getClassifyinvokeattr())//涓嶈兘鏄粍鍚堢殑鍜屽垎绫绘敞鍏ョ殑
+                ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        //涓嶮dmEngineServiceImpl閲岄潰鐨刢heckRequiredAttrOnOrder 閫昏緫搴旇鐩镐技
+        if(!CollectionUtils.isEmpty(requiredAttrMap)) {
+            Set<String> nullRowIndex = cboList.stream().filter(cbo -> requiredAttrMap.keySet().stream().anyMatch(attrId -> StringUtils.isBlank(cbo.getAttributeValue(attrId)))).map(cbo -> cbo.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toSet());
+            if(!CollectionUtils.isEmpty(nullRowIndex)){
+                String checkAttr = requiredAttrMap.values().stream().map(CodeClassifyTemplateAttrVO::getName).collect(Collectors.joining(","));
+                nullRowIndex.stream().forEach(rowIndex->{
+                    errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鏍¢獙瑙勫垯涓嶉�氳繃锛屾湁鏍¢獙鐨勫睘鎬т负" + checkAttr);
+                });
+            }
+        }
+    }
+
+    /**
+     * 鎵归噺妫�鏌ヤ紒涓氱紪鐮佹槸鍚﹀瓨鍦�
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞�
+     * @param cboList 鏁版嵁鐨勫垪琛�
+     * @param errorMap 閿欒鐨勪俊鎭�
+     */
+    private void batchCheckIdExistOnOrder(CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList,Map<String ,String> errorMap){
+        List<String> existIds = new ArrayList<>();
+        VciBaseUtil.switchCollectionForOracleIn(cboList).stream().forEach(cbos -> {
+            Map<String, String> conditionMap = new HashMap<>();
+            conditionMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(cbos.stream().map(s -> s.getId()).collect(Collectors.toSet()).toArray(new String[0])) + ")");
+            //涓氬姟鏁版嵁濡傛灉鐮佸�煎洖鏀朵細鐩存帴鍒犻櫎鏁版嵁锛屾墍浠ヨ繖閲岀洿鎺ュ垽鏂槸鍚﹀瓨鍦ㄥ嵆鍙�
+            existIds.addAll(Optional.ofNullable(boService.queryCBO(templateVO.getBtmTypeId(), conditionMap, new PageHelper(-1), Arrays.stream(new String[]{"id"})
+                    .collect(Collectors.toList()))).orElseGet(() -> new ArrayList<>()).stream().map(s -> s.getAttributeValue("id")).collect(Collectors.toList()));
+        });
+        if(!CollectionUtils.isEmpty(existIds)){
+            String idFieldName = templateVO.getAttributes().stream().filter(s -> VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(s.getId())).findFirst().orElseGet(() -> new CodeClassifyTemplateAttrVO()).getName();
+            if(StringUtils.isBlank(idFieldName)){
+                idFieldName = "浼佷笟缂栫爜";
+            }
+            String finalIdFieldName = idFieldName;
+            cboList.stream().forEach(cbo->{
+                String id = cbo.getId();
+                if(StringUtils.isBlank(id)){
+                    id = cbo.getAttributeValue("id");
+                }
+                if(existIds.contains(id)){
+                    String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                    String msg = errorMap.getOrDefault(rowIndex, "");
+                    msg+=";" + finalIdFieldName + "鐨勫�煎湪绯荤粺涓凡缁忓瓨鍦�";
+                    errorMap.put(rowIndex,msg);
+                }
+            });
+        }
+    }
+
+    /**
+     * 浠巑ap閲岃幏鍙栧��
+     * @param dataMap 鍊肩殑鏄犲皠
+     * @param attrId 灞炴�х殑缂栧彿
+     * @return 鍊�
+     */
+    private String getValueFormMap(Map<String,String> dataMap,String attrId){
+        attrId = attrId.toLowerCase(Locale.ROOT);
+        return  dataMap.getOrDefault(attrId,"");
+    }
+
+    /**
+     * 璁剧疆鍊煎埌map涓�
+     * @param dataMap 鍊肩殑鏄犲皠鍐呭
+     * @param attrId 灞炴�х殑缂栧彿
+     * @param value 灞炴�х殑鍊�
+     */
+    private void setValueToMap(Map<String,String> dataMap,String attrId,String value){
+        attrId = attrId.toLowerCase(Locale.ROOT);
+        dataMap.put(attrId,value);
+    }
+    /**
+     * 闆嗘垚鎵归噺鐢宠鏁版嵁
+     * @param orderDTO 鍒嗙被鐨勪富閿�
+     * @param dataObjectVO 鏁版嵁淇℃伅
+     * @param resultDataObjectDetailDOs 閿欒淇℃伅
+     * @return 鏈夐敊璇俊鎭殑excel
+     */
+    @Override
+    public void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) {
+        Map<String,String> errorMap=new HashMap<>();
+        VciBaseUtil.alertNotNull(orderDTO,"缂栫爜鐢宠鐩稿叧鐨勬暟鎹�",orderDTO.getCodeClassifyOid(),"涓婚搴撳垎绫讳富閿�");
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+        //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇
+        CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
+        //1.鍒ゆ柇瑙勫垯涓櫎浜嗘祦姘寸爜娈碉紝鏄惁鏈夊叾浠栫爜娈�
+        engineService.checkSecValueOnOrder(ruleVO,orderDTO);
+        //鏌ヨ鍒嗙被鍜屾ā鏉�
+        //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬�
+        List<RowDatas> rowDataList = dataObjectVO.getRowData();
+        Map<String ,RowDatas>rowDataMap=new LinkedHashMap<>();
+        rowDataList.stream().forEach(rowData->{
+            rowDataMap.put(rowData.getRowIndex(),rowData);
+        });
+        //鎵剧涓�琛岋紝涓轰簡鎵炬爣棰�
+        CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid());
+
+        //鏍¢獙妯℃澘鏄笉鏄渶鏂扮殑
+        //checkTemplateSync(sheetDataSetList,templateVO);
+        //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+        List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag())
+        ).collect(Collectors.toList());
+        Map<Integer/**鍒楀彿**/,String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>();
+        List<String> titleRowData = dataObjectVO.getColName();
+        Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId().toLowerCase(Locale.ROOT),(o1, o2)->o2));
+        getFieldIndexMap(titleRowData,attrNameIdMap,fieldIndexMap);
+
+        //闇�瑕佸垽鏂槸鍚︽墍鏈夌殑灞炴�ч兘鍦ㄦā鏉夸笂浜�
+        List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT))
+                && StringUtils.isBlank(s.getComponentrule()) && StringUtils.isBlank(s.getClassifyinvokeattr())//缁勫悎瑙勫垯鍜屽垎绫绘敞鍏ョ‘瀹炴病缁欑敤鎴峰鍑哄幓
+        ).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(unExistAttrVOs)){
+            throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪excel涓病鏈夋壘鍒�");
+        }
+        List<ClientBusinessObject> cboList = new ArrayList<>();
+        String fullPath = getFullPath(classifyFullInfo);
+
+       // List<CodeClassifyProcessTempVO> codeClassifyProcessTempVOS=codeClassifyProcessTempService.listProcessTemplate(templateVO.getOid(),"code_cls_flow_use_order");
+        boolean isProcess=false;
+        //娉ㄩ噴鎺夋澶勪笅闈㈡墍鏈夐兘鎸夌収涓嶅垽鏂祦绋嬪瓨鍌ㄧ姸鎬佷簡
+       /** if(!CollectionUtils.isEmpty(codeClassifyProcessTempVOS)){
+            isProcess=true;
+        }***/
+        Map<String,String> codeOidToSystemOidMap=new HashMap<>();//瀛樺偍缂栫爜鏁版嵁鍜岄泦鎴愮郴缁熸暟鎹畂id瀵圭収鏄犲皠
+        excelToCbo(classifyFullInfo,titleRowData,fieldIndexMap,rowDataList,templateVO,cboList,fullPath,isProcess,"create",errorMap,codeOidToSystemOidMap);
+
+        //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
+        //濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓�
+        //2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
+        batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap);
+
+
+        /**
+         * 鍏抽敭鐔熸倝閿欒鎻愮ず
+         */
+        Map<String,String> errorKeyMap=new HashMap<>();
+
+
+        //3.鍒ゆ柇鍏抽敭灞炴��
+        CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
+        Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
+        Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
+        if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
+            selfRepeatRowIndexList.stream().forEach(rowIndex->{
+               /* //浼犲叆鏁版嵁涔嬮棿鍏抽敭灞炴�х殑鏍¢獙
+                RowDatas rowData= rowDataMap.get(rowIndex);
+                XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                resultDataObjectDetailDO.setCode("");
+                resultDataObjectDetailDO.setId(rowData.getOid());
+                resultDataObjectDetailDO.setErrorid("1");
+                resultDataObjectDetailDO.setMsg(errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�ч噸澶�");
+                resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+                */
+                errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";浼犲叆鐨勬暟鎹腑鍏抽敭灞炴�ч噸澶�");
+            });
+        }
+        /****
+         * 鍏抽敭灞炴�т笌绯荤粺涓噸澶嶇殑鍒ゆ柇
+         */
+        if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
+            keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
+                //浼犲叆鏁版嵁涔嬮棿鍏抽敭灞炴�х殑鏍¢獙
+               /* RowDatas rowData= rowDataMap.get(rowIndex);
+                XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                resultDataObjectDetailDO.setCode("");
+                resultDataObjectDetailDO.setId(rowData.getOid());
+                resultDataObjectDetailDO.setErrorid("1");
+                resultDataObjectDetailDO.setMsg(errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+                resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+                */
+                errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+            });
+        }
+        //鍒嗙被娉ㄥ叆
+        batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false);
+        //boolean
+        reSwitchBooleanAttrOnOrder(attrVOS,cboList);
+       // cboList.stream().forEach(cbo->{
+           //4.鏍¢獙瑙勫垯
+            batchCheckVerifyOnOrder(attrVOS, cboList,errorMap);
+            //5.鏍¢獙鏋氫妇鏄惁姝g‘
+            batchSwitchEnumAttrOnOrder(attrVOS,cboList,errorMap);
+            //6.鏃堕棿鏍煎紡鐨勯獙璇�
+            //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss
+            batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap);
+            //7.澶勭悊鍙傜収鐨勬儏鍐�
+            batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap);
+            //鏍¢獙灞炴�ф槸鍚︽纭敊璇俊鎭�
+            if(errorMap.size()>0){
+                String[] newMsg = {""};
+                cboList.stream().forEach(cbo -> {
+                    String rowIndex =cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                    if(errorMap.containsKey(rowIndex)){
+                        String oid=cbo.getOid();
+                        String sourceOid=oid;
+                        if(codeOidToSystemOidMap.containsKey(oid)){
+                            sourceOid=codeOidToSystemOidMap.get(oid);
+                        }
+                        String code="";
+                        String errorid="103";
+                        String mes=errorMap.get(rowIndex);
+                        XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                        resultDataObjectDetailDO.setCode(code);
+                        resultDataObjectDetailDO.setId(sourceOid);
+                        resultDataObjectDetailDO.setErrorid(errorid);
+                        resultDataObjectDetailDO.setMsg(mes);
+                        resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+                    }
+                });
+
+            }
+
+            Map<String,String> newKeyMap=new HashedMap();
+            if(errorKeyMap.size()>0 ) {
+                errorKeyMap.keySet().forEach(key->{
+                    if(!errorMap.containsKey(key)){
+                        newKeyMap.put(key,errorKeyMap.get(key));
+                    }
+                });
+                if(newKeyMap.size()>0) {
+                    Set<ClientBusinessObject> editBoList = new HashSet<>();
+                    Map<String, List<ClientBusinessObject>> indexTodataMap = keyResultVO.getIndexTODataMap();
+                    cboList.stream().forEach(cbo -> {
+                        String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                        if (indexTodataMap.containsKey(rowIndex)) {
+                            String oid = cbo.getOid();
+                            String sourceOid = oid;
+                            String code = "";
+                            String errorid = "201";
+                            if(codeOidToSystemOidMap.containsKey(oid)){
+                                sourceOid=codeOidToSystemOidMap.get(oid);
+                            }
+                            List<ClientBusinessObject> newCboList = indexTodataMap.get(rowIndex);
+                            if (!CollectionUtils.isEmpty(newCboList)) {
+                                ClientBusinessObject newCbo= newCboList.get(0);
+                                String lcstatus =newCbo.getAttributeValue("lcstatus");
+                                String newOid =newCbo.getAttributeValue("oid");
+                                String ts =newCbo.getAttributeValue("ts");
+                                code=newCbo.getAttributeValue("id");
+                                String lastmodifier=newCbo.getAttributeValue("lastmodifier");
+                                if (!lcstatus.equals(CodeDefaultLC.RELEASED.getValue())) {
+                                    newCbo.setBusinessObject(cbo.getBusinessObject());
+                                    newCbo.setOid(newOid);
+                                    newCbo.setLastModifier(lastmodifier);
+                                    newCbo.setId(code);
+                                    newCbo.setTs(ts);
+                                    cbo.setLastModifier(cbo.getLastModifier());
+                                    editBoList.add(newCbo);
+                                }
+                                String mes = errorKeyMap.get(rowIndex);
+                                XMLResultDataObjectDetailDO resultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
+                                resultDataObjectDetailDO.setCode(code);
+                                resultDataObjectDetailDO.setId(sourceOid);
+                                resultDataObjectDetailDO.setErrorid(errorid);
+                                resultDataObjectDetailDO.setMsg(mes);
+                                resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+                            }
+                        }
+                    });
+                    //鍏抽敭鐔熸倝鏇存敼
+                    if (!CollectionUtils.isEmpty(editBoList)) {
+                        BatchCBO batchCbos = new BatchCBO();
+                        batchCbos.setUpdateCbos(editBoList);
+                        this.boService.persistenceBatch(batchCbos);//鏇存敼鏁版嵁
+                    }
+                    errorMap.putAll(errorKeyMap);
+                }
+            }
+
+      //  });
+        //鏈�鍚庡紕缁勫悎瑙勫垯
+        batchSwitchComponentAttrOnOrder(attrVOS,cboList);
+        //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒�
+        List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> {
+            String rowIndex =cbo.getAttributeValue(IMPORT_ROW_INDEX);
+            return !errorMap.containsKey(rowIndex);
+        }).collect(Collectors.toList());
+        List<String> needRowIndexList = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(needSaveCboList)) {
+            //9.鎴戜滑澶勭悊涓氬姟鏁版嵁
+            //鐢熸垚缂栫爜鐨勫唴瀹�
+            try {
+                 productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), needSaveCboList);
+                //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰
+                engineService.batchSaveSelectChar(templateVO, needSaveCboList);
+               // if(!isProcess){
+                       needSaveCboList.stream().forEach(needSaveCbo->{
+                           XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                            resultDataObjectDetailDO.setCode(needSaveCbo.getId());
+                           String oid=needSaveCbo.getOid();
+                           String sourceOid=oid;
+                           if(codeOidToSystemOidMap.containsKey(oid)){
+                               sourceOid=codeOidToSystemOidMap.get(oid);
+                           }
+                           resultDataObjectDetailDO.setId(sourceOid);
+                           resultDataObjectDetailDO.setErrorid("0");
+                           resultDataObjectDetailDO.setMsg("鐢宠缂栫爜鎴愬姛");
+                        resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+                });
+               /* }else{
+                    needSaveCboList.stream().forEach(needSaveCbo->{
+                        XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                       // resultDataObjectDetailDO.setCode(needSaveCbo.getId());//涓嶇敤杩斿洖缂栫爜
+                        String oid=needSaveCbo.getOid();
+                        String sourceOid=oid;
+                        if(codeOidToSystemOidMap.containsKey(oid)){
+                            sourceOid=codeOidToSystemOidMap.get(oid);
+                        }
+                        resultDataObjectDetailDO.setId(sourceOid);
+                        resultDataObjectDetailDO.setErrorid("204");
+                        resultDataObjectDetailDO.setMsg("鐢宠缂栫爜鎴愬姛锛岀瓑寰呯紪鐮佺郴缁熷彂甯冿紒");
+                        resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+                    });
+
+                }*/
+            }catch (Throwable e){
+                e.printStackTrace();
+                needSaveCboList.stream().forEach(needSaveCbo->{
+                    XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                    resultDataObjectDetailDO.setCode("");
+                    String oid=needSaveCbo.getOid();
+                    String sourceOid=oid;
+                    if(codeOidToSystemOidMap.containsKey(oid)){
+                        sourceOid=codeOidToSystemOidMap.get(oid);
+                    }
+                    resultDataObjectDetailDO.setId(sourceOid);
+                    resultDataObjectDetailDO.setErrorid("1");
+                    resultDataObjectDetailDO.setMsg("淇濆瓨鍑虹幇闂:"+e.getMessage());
+                    resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+                });
+
+            }
+        }
+    }
+
+    /***
+     * 闆嗘垚鎵归噺鍚屾鏇存柊鎺ュ彛
+     * @param codeClassifyVO;
+     * @param dataObjectVO 鏁版嵁淇℃伅
+     * @param resultDataObjectDetailDOs 閿欒淇℃伅
+     */
+    @Override
+    public void batchSyncEditDatas(CodeClassifyVO codeClassifyVO,DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) {
+        String errorid="";
+        String msg="";
+        //鏌ヨ鍒嗙被鍜屾ā鏉�
+        //鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬�
+        List<RowDatas> rowDataList = dataObjectVO.getRowData();
+        Map<String, RowDatas> rowDataMap = new LinkedHashMap<>();
+        Map<String, RowDatas> codeDataMap = new LinkedHashMap<>();
+        rowDataList.stream().forEach(rowData -> {
+            rowDataMap.put(rowData.getRowIndex(), rowData);
+            codeDataMap.put(rowData.getCode(), rowData);
+        });
+        //鎵剧涓�琛岋紝涓轰簡鎵炬爣棰�
+        CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
+        // 搴旇閮芥槸涓�涓垎绫讳笅鐨勪笟鍔℃暟鎹紝鎵剧涓�鏉$殑灏辫
+        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyVO.getOid());
+        //鏍¢獙妯℃澘鏄笉鏄渶鏂扮殑
+        //checkTemplateSync(sheetDataSetList,templateVO);
+        //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+        List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag())
+        ).collect(Collectors.toList());
+        Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>();
+        List<String> titleRowData = dataObjectVO.getColName();
+        Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId().toLowerCase(Locale.ROOT), (o1, o2) -> o2));
+        getFieldIndexMap(titleRowData, attrNameIdMap, fieldIndexMap);
+        Map<String, String> cboOidMap = new HashMap<>();
+        cboOidMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])) + ")");
+        List<ClientBusinessObject> cboList = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), cboOidMap);
+        Map<String, ClientBusinessObject> codeSystemObjectMap = cboList.stream().filter(systeDataObject -> systeDataObject != null && StringUtils.isNotBlank(systeDataObject.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
+        Map<String, String> errorMap = new HashMap<>();
+        List<CodeOrderDTO> codeOrderDTOList = new ArrayList<>();
+        this.getCodeOrderDTOs(codeClassifyVO, templateVO, codeDataMap, codeSystemObjectMap, codeOrderDTOList, errorMap);
+       // List<CodeClassifyProcessTempVO> codeClassifyProcessTempVOS=codeClassifyProcessTempService.listProcessTemplate(templateVO.getOid(),"code_cls_flow_use_order");
+        boolean isProcess=false;
+      /**  if(!CollectionUtils.isEmpty(codeClassifyProcessTempVOS)){
+            isProcess=true;
+        }**/
+
+        Map<String, CodeOrderDTO> orderDTOMap = codeOrderDTOList.stream().filter(orderDTO -> orderDTO != null && StringUtils.isNotBlank(orderDTO.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
+        List<ClientBusinessObject> updateList = new ArrayList<>();
+        List<ClientBusinessObject> deleteList = new ArrayList<>();
+
+        BatchCBO batchCBO = new BatchCBO();
+        CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid());
+        Map<String, ClientBusinessObject> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
+      //  boolean finalIsProcess = isProcess;
+        orderDTOMap.keySet().stream().forEach(code -> {
+            CodeOrderDTO orderDTO = orderDTOMap.get(code);
+            ClientBusinessObject cbo = cboMap.get(code);
+            String dataStatus=cbo.getLcStatus();
+            RowDatas rowData=codeDataMap.get(code);
+            String status=rowData.getStatus();
+           String operation=rowData.getOperation();
+            if (!cbo.getTs().contains(VciDateUtil.date2Str(orderDTO.getTs(), VciDateUtil.DateTimeFormat))) {
+               // throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯");
+                errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+";鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯");
+            }
+           /* if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) {
+                throw new VciBaseException("鏁版嵁涓嶆槸{0}鐨勭姸鎬侊紝涓嶅厑璁镐慨鏀�", new String[]{CodeDefaultLC.EDITING.getText()});
+            }*/
+            if(operation.equals("update")) {
+                //1. 鍒ゆ柇蹇呰緭椤�
+                checkRequiredAttrOnOrder(templateVO, orderDTO, errorMap);
+                //2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
+                switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO, errorMap);
+                //3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
+                switchComponentAttrOnOrder(templateVO, orderDTO);
+                //4.鏍¢獙瑙勫垯
+                checkVerifyOnOrder(templateVO, orderDTO, errorMap);
+                //5.鍒ゆ柇鍏抽敭灞炴��
+                checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO, errorMap);
+                //6.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭�
+                checkEnumOnOrder(templateVO, orderDTO, errorMap);
+                //7.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
+                switchDateAttrOnOrder(templateVO, orderDTO);
+                //榛樿鐨勫唴瀹逛笉鑳藉彉锛屾墍浠ュ彧闇�瑕佹嫹璐濊嚜瀹氫箟鐨勭浉鍏冲睘鎬у嵆鍙�
+                copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true, errorMap);
+                //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀�
+                cbo.setDescription(orderDTO.getDescription());
+                cbo.setName(orderDTO.getName());
+                try {
+                    cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
+                    cbo.setAttributeValue("name", orderDTO.getName());
+                  //  if(finalIsProcess){//鍦ㄦ祦绋嬩腑涓嶅厑璁告洿鏀�
+                   //     errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼!"));
+                  //  }else{
+                        cbo.setLcStatus(status);
+                        cbo.setAttributeValue("lcstatus",status);
+                  //  }
+                } catch (VCIError e) {
+                    e.printStackTrace();
+                }
+                updateList.add(cbo);
+            }else if(operation.equals("delete")){//濡傛灉鍦ㄦ祦绋嬩腑涓嶅厑璁稿垹闄わ紝涓嶅湪娴佺▼涓姸鎬佷负鍙戝竷鎴栬�呭仠鐢ㄧ殑鏁版嵁涓嶅厑璁稿垹闄わ紝灏嗗叾鏇存敼涓哄仠鐢紝鍏朵粬鐨勬儏鍐电洿鎺ュ垹闄�
+              //  if(finalIsProcess){
+                //    errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鍒犻櫎!"));
+                //}else {
+                    try {
+                        Map<String, String> condtionMap = new HashMap<>();
+                        condtionMap.put("createcodeoid", cbo.getOid());
+                        logger.info("oid:" + cbo.getOid());
+                        List<ClientBusinessObject> codeCbos = boService.queryCBO("codeallcode", condtionMap);
+                        logger.info("codeCbos size:" + codeCbos.size());
+                        if (!CollectionUtils.isEmpty(codeCbos)) {
+                            ClientBusinessObject codeCbo = codeCbos.get(0);
+                            logger.info("codeCbos code:" + codeCbo.getId());
+                            codeCbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue());
+                            codeCbo.setAttributeValue("lcstatus", CodeDefaultLC.TASK_BACK.getValue());
+                            updateList.add(codeCbo);
+                        }
+                        deleteList.add(cbo);
+                    }catch (VCIError e) {
+                        e.printStackTrace();
+                    }
+               // }
+            }else if(operation.equals("editstatus")){
+                try {
+                  //  if (finalIsProcess) {
+                  //      errorMap.put(code, errorMap.getOrDefault(code, errorMap.getOrDefault(code, "") + ";鏁版嵁" + code + "鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼鐘舵��!"));
+                 //   } else {
+                        cbo.setLcStatus(status);
+                        cbo.setAttributeValue("lcstatus", status);
+                        updateList.add(cbo);
+                  //  }
+                }catch (VCIError e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+        /**
+         * 閿欒淇℃伅杈撳嚭
+         */
+        if(errorMap.size()>0){
+            errorMap.keySet().forEach(code->{
+            if(codeDataMap.containsKey(code)){
+                RowDatas rowDatas=  codeDataMap.get(code);
+                String dataMsg=errorMap.get(code);
+                String oid=rowDatas.getOid();
+                XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                xmlResultDataObjectDetailDO.setErrorid("103");
+                xmlResultDataObjectDetailDO.setMsg(dataMsg);
+                xmlResultDataObjectDetailDO.setId(oid);
+                xmlResultDataObjectDetailDO.setCode(code);
+                resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
+            }
+            });
+        }else {
+            //瀛樺偍鏁版嵁
+            try {
+                batchCBO.getUpdateCbos().addAll(updateList);
+                batchCBO.getDeleteCbos().addAll(deleteList);
+                boService.persistenceBatch(batchCBO);
+                engineService.batchSaveSelectChar(firstTemplateVO, updateList);
+                errorid="0";
+                msg="鏇存柊/鐘舵�佹洿鏀�/鍒犻櫎鎴愬姛锛�";
+            }catch (Throwable e){
+                errorid="1";
+                msg="淇濆瓨澶辫触锛�"+e;
+            }finally {
+                String finalMsg = msg;
+                String finalErrorid = errorid;
+                cboList.stream().forEach(cbo->{
+                    String code =cbo.getId();
+                    if(codeDataMap.containsKey(code)) {
+                        RowDatas rowDatas=codeDataMap.get(code);
+                        String oid=rowDatas.getOid();
+                        XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
+                        xmlResultDataObjectDetailDO.setErrorid(finalErrorid);
+                        xmlResultDataObjectDetailDO.setMsg(finalMsg);
+                        xmlResultDataObjectDetailDO.setId(oid);
+                        xmlResultDataObjectDetailDO.setCode(code);
+                        resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
+                    }
+                });
+
+            }
+        }
+    }
+
+    /***
+     * 浠庣紦瀛橀噷鑾峰彇鍒伴渶瑕佸鍏ョ殑鐩稿叧鏁版嵁
+     * @param codeClssifyOid
+     * @param redisOid
+     * @return
+     */
+    @Override
+    public DataGrid<Map<String, String>> gridDatas(String codeClssifyOid, String redisOid) {
+        VciBaseUtil.alertNotNull(redisOid,"瀵煎叆鐩镐技鏁版嵁",redisOid,"鏁版嵁缂撳瓨涓婚敭");
+        List<CodeImprotDataVO> codeImprotDataVOs = redisService.getCacheList(redisOid+"-"+codeClssifyOid);
+        CodeImprotDataVO codeImprotDataVO=new CodeImprotDataVO();
+        if(!CollectionUtils.isEmpty(codeImprotDataVOs)){
+            if(StringUtils.isNotBlank(codeClssifyOid)){
+                Map<String/**鍒嗙被鍚嶇О**/, CodeImprotDataVO/**鑻辨枃鍚嶇О**/> codeClassifyDatasMap = codeImprotDataVOs.stream().collect(Collectors.toMap(s -> s.getCodeClassifyOid(), t -> t,(o1, o2)->o2));
+                if(codeClassifyDatasMap.containsKey(codeClssifyOid)){
+                    codeImprotDataVO= codeClassifyDatasMap.get(codeClssifyOid);
+                }else{
+                    codeImprotDataVO=  codeImprotDataVOs.get(0);
+                }
+            }
+        }
+        DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
+        List<Map<String, String>> dataList = new ArrayList<>();
+       if(codeImprotDataVO!=null){
+           dataList= codeImprotDataVO.getDatas();
+       }
+        dataGrid.setData(dataList);
+        if (!CollectionUtils.isEmpty(dataList)) {
+            dataGrid.setTotal(dataList.size());
+        }
+        return dataGrid;
+    }
+
+    /**
+     *
+     * @param oid
+     * @param redisOid
+     * @return
+     */
+    @Override
+    public DataGrid<Map<String,String>> gridRowResemble(String oid,String redisOid){
+        VciBaseUtil.alertNotNull(redisOid,"瀵煎叆鐩镐技鏁版嵁",redisOid,"鏁版嵁缂撳瓨涓婚敭");
+        List<DataResembleVO> codeImprotDataVOs = redisService.getCacheList(redisOid);
+        DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
+        List<Map<String, String>> dataList = new ArrayList<>();
+
+        if(!CollectionUtils.isEmpty(codeImprotDataVOs)){
+            Map<String/**鍒嗙被鍚嶇О**/, DataResembleVO/**鏁版嵁瀵硅薄**/> rowResembleDataMap = codeImprotDataVOs.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t,(o1, o2)->o2));
+            if(rowResembleDataMap.containsKey(oid)){
+                DataResembleVO dataResembleVO=  rowResembleDataMap.get(oid);
+                dataList= dataResembleVO.getDataList();
+            }
+        }
+
+        dataGrid.setData(dataList);
+        if (!CollectionUtils.isEmpty(dataList)) {
+            dataGrid.setTotal(dataList.size());
+        }
+        return dataGrid;
+    }
+    @Override
+    public List<CodeImportTemplateVO> gridclassifys(String redisOid) {
+        List<CodeImportTemplateVO> codeImportTemplateVOs=new ArrayList<>();
+        VciBaseUtil.alertNotNull(redisOid,"鍒嗙被",redisOid,"鍒嗙被缂撳瓨涓婚敭");
+        List<CodeImportTemplateVO> redisServiceCacheObjects=redisService.getCacheList(redisOid);
+        if(redisServiceCacheObjects!=null){
+            codeImportTemplateVOs=  redisServiceCacheObjects;
+        }
+        return codeImportTemplateVOs;
+    }
+
+    @Override
+    public BaseResult batchImportData(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList,String classifyAttr, boolean isImprot) {
+        List<SheetRowData> rowDataList = new ArrayList<>();
+        List<ClientBusinessObject> allNeedSaveCboList=new ArrayList<>();
+        codeImprotSaveDatVOList.stream().forEach(codeImprotSaveDatVO -> {
+            List<ClientBusinessObject>cboList=new ArrayList<>();
+            List<String> colList=codeImprotSaveDatVO.getClos();
+            CodeOrderDTO orderDTO= codeImprotSaveDatVO.getOrderDTO();
+
+            List<Map<String, String>> dataList= codeImprotSaveDatVO.getDataList();
+            Map<Integer, String> fieldIndexMap = new HashMap();
+            for (int i=0;i<dataList.size();i++){
+                SheetRowData sheetRowData=new SheetRowData();
+                Map<String,String> dataMap= dataList.get(i);
+                Map<Integer, String> data = new HashMap();
+                final int[] colIndex = {0};
+                Map<Integer, String> finalFieldIndexMap = new HashMap<>();
+                dataMap.forEach((field, value)->{
+                    if(!ROW_INDEX.equalsIgnoreCase(field)){
+                        data.put(colIndex[0],value);
+                        finalFieldIndexMap.put(colIndex[0]++,field);
+                    }
+                });
+                fieldIndexMap=finalFieldIndexMap;
+                sheetRowData.setData(data);
+                sheetRowData.setRowIndex(i+"");
+                rowDataList.add(sheetRowData);
+            }
+            CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+
+           // CodeClassifyTemplateVO codeClassifyTemplateVO=   engineService.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid());
+            CodeClassifyTemplateVO codeClassifyTemplateVO=  templateServiceI.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+            //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇
+            CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
+            //闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+            List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes().stream().filter(s ->
+                    !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag())
+            ).collect(Collectors.toList());
+            String fullPath = getFullPath(classifyFullInfo);
+            excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList, codeClassifyTemplateVO,cboList,fullPath,!isImprot);
+            Map<String,String> errorMap=new HashMap<>();
+            if(isImprot) {
+                Map<String/**涓婚敭**/, String/**璺緞**/> childOidPathMap = getChildClassifyPathMap(classifyFullInfo, fullPath);
+                //閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
+                //鎵炬墍鏈夌殑鍒嗙被璺緞,闇�瑕佹牎楠岃矾寰勬槸鍚︽纭紝鏄惁閮藉湪褰撳墠鐨勫垎绫荤殑涓嬬骇
+                List<CodeClassifyVO> childClassifyVOs = classifyService.listChildrenClassify(orderDTO.getCodeClassifyOid(), true, classifyAttr, true);
+                Map<String/**璺緞**/, CodeClassifyVO> pathMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getPath().startsWith("#") ? s.getPath().substring(1) : s.getPath(), t -> t));
+                Map<String/**涓婚敭**/, CodeClassifyVO> classifyVOMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+                classifyVOMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO());
+                pathMap.put("#current#", classifyFullInfo.getCurrentClassifyVO());
+                //鎴戜滑闇�瑕佸垽鏂繖浜涘垎绫荤殑妯℃澘鏄笉鏄竴鏍风殑锛屽彧闇�瑕佹牎楠岋紝涓嶇敤鑾峰彇
+                //妫�鏌ュ垎绫荤殑璺緞
+                checkClassifyPathInHistory(cboList, errorMap, pathMap, childOidPathMap);
+            }
+            //鍒嗙被娉ㄥ叆
+            batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,isImprot);
+            //boolean
+            reSwitchBooleanAttrOnOrder(attrVOS,cboList);
+            //4.鏍¢獙瑙勫垯
+            batchCheckVerifyOnOrder(attrVOS, cboList,errorMap);
+            //5.鏍¢獙鏋氫妇鏄惁姝g‘
+            batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap);
+            //7.澶勭悊鍙傜収鐨勬儏鍐�
+            batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap);
+            //6.鏃堕棿鏍煎紡鐨勯獙璇�
+            //6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss
+            batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap);
+            //鏈�鍚庡紕缁勫悎瑙勫垯
+            batchSwitchComponentAttrOnOrder(attrVOS,cboList);
+            //3.鍒ゆ柇鍏抽敭灞炴��
+            CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList);
+            Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
+            Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
+            if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
+                keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
+                    errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+                });
+            }
+            //4.鏍¢獙瑙勫垯
+            batchCheckVerifyOnOrder(attrVOS, cboList,errorMap);
+
+
+            SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+            List<ClientBusinessObject>needSaveCboList = cboList.stream().filter(cbo -> {
+                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+                return !errorMap.containsKey(rowIndex);
+            }).collect(Collectors.toList());
+
+            if (!CollectionUtils.isEmpty(needSaveCboList)) {
+                //9.鎴戜滑澶勭悊涓氬姟鏁版嵁
+                if (isImprot) {
+                    productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, null, needSaveCboList);
+                }else {
+                  productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, orderDTO.getSecDTOList(), needSaveCboList);
+                }
+                allNeedSaveCboList.addAll(needSaveCboList);
+            }
+            //濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰
+            engineService.batchSaveSelectChar(codeClassifyTemplateVO, allNeedSaveCboList);
+        });
+        return BaseResult.success(isImprot?"鎵归噺鍘嗗彶瀵煎叆鎴愬姛":"鎵归噺鐢宠鎴愬姛");
+    }
+    /***
+     *
+     * @param codeClassifyVO
+     * @param templateVO
+     * @param codeDataMap
+     * @param codeSystemObjectMap
+     * @param codeOrderDTOList
+     * @param errorMap
+     * @return
+     */
+    private void   getCodeOrderDTOs(CodeClassifyVO codeClassifyVO,CodeClassifyTemplateVO templateVO,Map<String ,RowDatas>codeDataMap,Map<String, ClientBusinessObject> codeSystemObjectMap,List<CodeOrderDTO> codeOrderDTOList,Map<String,String> errorMap){
+        codeDataMap.keySet().forEach(code->{
+            RowDatas rowDatas=codeDataMap.get(code);
+            Map<String, String> data= rowDatas.getFiledValue();
+            CodeOrderDTO orderDTO = new CodeOrderDTO();
+            if(codeSystemObjectMap.containsKey(code)){
+                ClientBusinessObject sysDataObject= codeSystemObjectMap.get(code);
+                orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//鍒嗙被涓婚敭
+                orderDTO.setOid(sysDataObject.getOid());//鏁版嵁oid
+                orderDTO.setLcStatus(rowDatas.getStatus());//鐘舵��
+                orderDTO.setId(code);
+                orderDTO.setTs(VciDateUtil.getDateFromStringForVci(sysDataObject.getTs()));
+                orderDTO.setBtmname(codeClassifyVO.getBtmname());//涓氬姟绫诲瀷
+                orderDTO.setDescription("闆嗘垚璋冪敤:鏇存柊");//鏁版嵁鎻忚堪
+                if(data.containsKey("name")){
+                    String name=data.get("name");
+                    orderDTO.setName(name);//鍚嶇О灞炴�у��
+                }
+                orderDTO.setData(data);//璁剧疆鏁版嵁
+                orderDTO.setSecDTOList(null);//鍒嗙被鐮佹
+                orderDTO.setEditInProcess(false);//鏄惁鍦ㄦ祦绋嬩腑
+                orderDTO.setTemplateOid(templateVO.getOid());
+            }else{
+                errorMap.put("code","缂栫爜涓猴細銆�"+code+"銆戠殑鏁版嵁鍦ㄧ郴缁熶腑涓嶅瓨鍦�");
+            }
+            codeOrderDTOList.add(orderDTO);
+        });
+    }
+
+    /**
+     * 鎷疯礉鏁版嵁鍒癱bo瀵硅薄涓�
+     *
+     * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param cbo              涓氬姟鏁版嵁
+     * @param orderDTO         缂栫爜鐢宠鐨勪俊鎭�
+     * @param templateVO       妯℃澘鐨勬樉绀哄璞�
+     * @param edit             鏄惁涓轰慨鏀�
+     */
+    private void copyValueToCBO(CodeClassifyFullInfoBO classifyFullInfo, ClientBusinessObject cbo,
+                                CodeOrderDTO orderDTO, CodeClassifyTemplateVO templateVO,
+                                boolean edit,Map<String,String> errorMap) {
+        String fullPath = "";
+        if (!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())) {
+            fullPath = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel())))
+                    .map(CodeClassifyVO::getOid).collect(Collectors.joining("##"));
+        } else {
+            fullPath = classifyFullInfo.getCurrentClassifyVO().getOid();
+        }
+        orderDTO.getData().forEach((key, value) -> {
+            if (!edit || (!boService.checkUnAttrUnEdit(key) &&
+                    !VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(key))) {
+                try {
+                    cbo.setAttributeValue(key, value);
+                } catch (VCIError e) {
+                    logger.error("璁剧疆灞炴�х殑鍊奸敊璇�", e);
+                }
+            }
+        });
+        try {
+            cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid());
+            cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD, templateVO.getOid());
+            cbo.setAttributeValue(CODE_FULL_PATH_FILED, fullPath);
+            if (!edit && StringUtils.isBlank(orderDTO.getLcStatus())) {
+                //鎵剧敓鍛藉懆鏈熺殑璧峰鐘舵�侊紝
+                if (StringUtils.isNotBlank(cbo.getLctId())) {
+                    OsLifeCycleVO lifeCycleVO = lifeCycleService.getLifeCycleById(cbo.getLctId());
+                    if (lifeCycleVO != null) {
+                        cbo.setLcStatus(lifeCycleVO.getStartStatus());
+                    } else {
+                        cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+                    }
+                } else {
+                    cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+                }
+
+            }
+            int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
+            if (secret == 0 || !secretService.checkDataSecret(secret)) {
+                Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+                cbo.setAttributeValue(SECRET_FIELD, String.valueOf((userSecret == null || userSecret == 0) ? UserSecretEnum.NONE.getValue() : userSecret));
+            }
+        } catch (Throwable e) {
+            logger.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�", e);
+        }
+    }
+
+    /**
+     * 杞崲鏃堕棿鐨勬牸寮�
+     *
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬�
+     * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+     */
+    private void switchDateAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) {
+        Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getCodedateformat())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(dateAttrVOMap)) {
+            dateAttrVOMap.forEach((attrId, attrVO) -> {
+                String value = getValueFromOrderDTO(orderDTO, attrId);
+                if (StringUtils.isNotBlank(value)) {
+                    DateConverter dateConverter = new DateConverter();
+                    dateConverter.setAsText(value);
+                    value = VciDateUtil.date2Str(dateConverter.getValue(), VciDateUtil.DateTimeMillFormat);
+                    setValueToOrderDTO(orderDTO, attrId, value);
+                }
+            });
+        }
+    }
+    /**
+     * 璁剧疆鏂扮殑鍊煎埌鐢宠瀵硅薄涓�
+     *
+     * @param orderDTO 缂栫爜鐢宠瀵硅薄
+     * @param attrId   灞炴�х殑缂栧彿
+     * @param value    鍊�
+     */
+    private void setValueToOrderDTO(CodeOrderDTO orderDTO, String attrId, String value) {
+        attrId = attrId.toLowerCase(Locale.ROOT);
+        if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) {
+            WebUtil.setValueToField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO, value);
+        } else {
+            orderDTO.getData().put(attrId, value);
+        }
+    }
+    /**
+     * 鏍¢獙鏋氫妇鐨勫唴瀹�
+     *
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬�
+     * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+     */
+    private void checkEnumOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO,Map<String,String> errorMap) {
+        //濡傛灉鏋氫妇鍙互淇敼锛屽垯涓嶉渶瑕佹牎楠屾槸鍚︾鍚堟灇涓剧殑閫夐」
+        Map<String, CodeClassifyTemplateAttrVO> enumAttrVOMap = templateVO.getAttributes().stream().filter(s -> (StringUtils.isNotBlank(s.getEnumString()) || StringUtils.isNotBlank(s.getEnumid())) && !VciBaseUtil.getBoolean(s.getEnumeditflag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(enumAttrVOMap)) {
+            enumAttrVOMap.forEach((attrId, attrVO) -> {
+                String value = getValueFromOrderDTO(orderDTO, attrId);
+                if (StringUtils.isNotBlank(value)) {
+                    //鏈夊�兼墠鑳芥牎楠�
+                    List<KeyValue> comboboxKVs = this.engineService.listComboboxItems(attrVO);
+                    if (!comboboxKVs.stream().anyMatch(s -> value.equalsIgnoreCase(s.getKey()))) {
+                        errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+";灞炴�с��"+attrVO.getName()+"銆戠殑鍊间笉绗﹀悎鏋氫妇鐨勮姹�");
+                        //throw new VciBaseException("灞炴�с�恵0}銆戠殑鍊间笉绗﹀悎鏋氫妇鐨勮姹�", new String[]{attrVO.getName()});
+                    }
+                }
+            });
+        }
+    }
+
+    /**
+     * 鏍¢獙鍏抽敭灞炴��
+     *
+     * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param templateVO       妯℃澘鐨勫唴瀹癸紝蹇呴』鍖呭惈妯℃澘灞炴��
+     * @param orderDTO         缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
+     */
+    private void checkKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO,Map<String,String> errorMap) {
+        //鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮�
+        CodeKeyAttrRepeatRuleVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo);
+        //娉ㄦ剰鐨勬槸keyRuleVO鍙兘涓虹┖锛岃〃绀轰笉浣跨敤瑙勫垯鎺у埗
+        //鑾峰彇鎵�鏈夌殑鍏抽敭灞炴��
+        Map<String, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyattrflag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        Map<String, String> conditionMap = new HashMap<>();
+        boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
+        //鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖
+        boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
+        boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag());
+        boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
+        ketAttrMap.forEach((attrId, attrVO) -> {
+            String value = getValueFromOrderDTO(orderDTO, attrId);
+            if (value == null) {
+                value = "";
+            }
+            engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
+        });
+
+        //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
+
+        if (!CollectionUtils.isEmpty(conditionMap)) {
+            final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " where 1 = 1 "};
+            conditionMap.forEach((key, value) -> {
+                sql[0] += " and " + key + " = " + value;
+            });
+            if (StringUtils.isNotBlank(orderDTO.getOid())) {
+                //淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸�
+                sql[0] += " and oid != '" + orderDTO.getOid() + "'";
+            } else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) {
+                sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'";
+            }
+            sql[0] += " and islastR = '1' and islastV = '1' ";
+            if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
+                String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}";
+                String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"};
+                String defaultValue=";鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�";
+                String errormsg=defaultValue+MessageFormat.format(ruleInfoMsg, objs);
+                errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+errormsg);
+               // throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs);
+            }
+        }
+    }
+    /**
+     * 鏍¢獙姝e垯琛ㄨ揪寮忔槸鍚︽纭�
+     *
+     * @param templateVO 妯℃澘鐨勪俊鎭紝蹇呴』鍖呭惈灞炴�х殑鍐呭
+     * @param orderDTO   缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
+     */
+    private void checkVerifyOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO,Map<String,String> errorMap) {
+        Map<String, CodeClassifyTemplateAttrVO> verifyAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getVerifyrule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(verifyAttrVOMap)) {
+            verifyAttrVOMap.forEach((attrId, attrVO) -> {
+                String value = getValueFromOrderDTO(orderDTO, attrId);
+                if (StringUtils.isNotBlank(value) && !value.matches(attrVO.getVerifyrule())) {
+                    errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+";灞炴�"+attrVO.getName()+"]鐨勫�间笉绗﹀悎鏍¢獙瑙勫垯鐨勮姹�");
+                    //鏍¢獙姝e垯琛ㄨ揪寮�
+                   // throw new VciBaseException("灞炴�{0}]鐨勫�间笉绗﹀悎鏍¢獙瑙勫垯鐨勮姹�", new String[]{attrVO.getName()});
+                }
+            });
+        }
+    }
+    /**
+     * 杞崲缁勫悎瑙勫垯鐨勫��
+     *
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬�
+     * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+     */
+    private void switchComponentAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) {
+        Map<String, CodeClassifyTemplateAttrVO> compAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getComponentrule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(compAttrVOMap)) {
+            Map<String, String> dataMap = WebUtil.objectToMapString(orderDTO);
+
+            Map<String, String> dataLowMap = new HashMap<>();
+            if (!CollectionUtils.isEmpty(dataMap)) {
+                dataMap.forEach((key, value) -> {
+                    dataLowMap.put(key.toLowerCase(Locale.ROOT), value);
+                });
+            }
+            dataLowMap.putAll(orderDTO.getData());
+            compAttrVOMap.forEach((attrId, attrVO) -> {
+                dataLowMap.put(attrId, formulaService.getValueByFormula(dataLowMap, attrVO.getComponentrule()));
+            });
+            dataLowMap.forEach((key, value) -> {
+                setValueToOrderDTO(orderDTO, key, value);
+            });
+        }
+    }
+    /**
+     * 澶勭悊鍒嗙被娉ㄥ叆鐨勪俊鎭�
+     *
+     * @param templateVO         妯℃澘鐨勬樉绀哄璞★紝蹇呴』瑕佸悗妯℃澘鐨勫睘鎬�
+     * @param classifyFullInfoBO 鍒嗙被鐨勫叏璺緞
+     * @param orderDTO           缂栫爜鐢宠鐨勪俊鎭�
+     */
+    private void switchClassifyLevelOnOrder(CodeClassifyTemplateVO templateVO, CodeClassifyFullInfoBO classifyFullInfoBO, CodeOrderDTO orderDTO,Map<String,String> errorMap) {
+        Map<String, CodeClassifyTemplateAttrVO> classifyAttrVOMap = templateVO.getAttributes().stream().filter(
+                s -> StringUtils.isNotBlank(s.getClassifyinvokeattr()) && StringUtils.isNotBlank(s.getClassifyinvokelevel())
+        ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (classifyFullInfoBO.getTopClassifyVO() == null) {
+            //闇�瑕侀噸鏂版煡璇竴涓嬶紝鍥犱负杩欎釜鏄寚瀹氱殑鍒嗙被杩涙潵鐨�
+
+        }
+        if (!CollectionUtils.isEmpty(classifyAttrVOMap)) {
+            classifyAttrVOMap.forEach((attrId, attrVO) -> {
+                //鍒嗙被娉ㄥ叆鐨勭紪鍙锋垨鑰呭悕绉帮紝
+                //灞傜骇鍖呭惈鎸囧畾灞傚拰鏈�灏忓眰
+                CodeClassifyVO classifyVO = null;
+                if (!CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(attrVO.getClassifyinvokelevel()) && !"min".equalsIgnoreCase(attrVO.getClassifyinvokelevel())) {
+                    //鎸囧畾浜嗗眰绾х殑
+                    //娉ㄦ剰锛屽洜涓烘煡璇笂绾у垎绫诲嚭鏉ョ殑灞傜骇鏄�掑簭鐨勶紝鍗抽《灞傝妭鐐规槸鏈�澶х殑鍊�
+                    List<CodeClassifyVO> classifyVOS = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList());
+                    int level = VciBaseUtil.getInt(attrVO.getClassifyinvokelevel());
+                    if (classifyVOS.size() >= level && level > 0) {
+                        classifyVO = classifyVOS.get(level - 1);
+                    }
+                } else {
+                    //褰撳墠鐨勫垎绫�
+                    classifyVO = classifyFullInfoBO.getCurrentClassifyVO();
+                }
+                if (classifyVO == null) {
+                    //璇存槑灞傜骇鏈夎
+                    errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+";鍒嗙被鏍戜笂娌℃湁灞傜骇[" + attrVO.getClassifyinvokelevel() + "]");
+                    //orderDTO.getData().put(attrId, "鍒嗙被鏍戜笂娌℃湁灞傜骇[" + attrVO.getClassifyinvokelevel() + "]");
+                    // classifyVO = classifyFullInfoBO.getCurrentClassifyVO();
+                } else {
+                    Map<String, String> classifyDataMap = VciBaseUtil.objectToMapString(classifyVO);
+                    String value = classifyDataMap.getOrDefault(attrVO.getClassifyinvokeattr(), "");
+                    orderDTO.getData().put(attrId, value);
+                }
+            });
+        }
+    }
+
+
+    /**
+     * 鏍¢獙灞炴�ф槸鍚︿负蹇呰緭
+     *
+     * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬�
+     * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+     */
+    private void checkRequiredAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO,Map<String,String> errorMap) {
+        Map<String, CodeClassifyTemplateAttrVO> requiredAttrMap = templateVO.getAttributes().stream().filter(
+                        s -> VciBaseUtil.getBoolean(s.getRequireflag()) && StringUtils.isBlank(s.getComponentrule())
+                                && StringUtils.isBlank(s.getClassifyinvokeattr()))
+                .collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+        if (!CollectionUtils.isEmpty(requiredAttrMap)) {
+            requiredAttrMap.forEach((attrId, attrVO) -> {
+                //鍙湁浼佷笟缂栫爜锛岀姸鎬侊紝澶囨敞锛屾ā鏉夸富閿紝鍒嗙被涓婚敭杩欏嚑涓槸鍥哄畾鐨勶紝鍏朵綑閮芥槸鑷閰嶇疆鐨�
+                if (StringUtils.isBlank(getValueFromOrderDTO(orderDTO, attrId))) {
+                    errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"") + ";灞炴�с�恵"+attrVO.getName()+"}銆戝繀椤昏杈撳叆(閫夋嫨)鍐呭" );
+                  //  throw new VciBaseException("灞炴�с�恵0}銆戝繀椤昏杈撳叆(閫夋嫨)鍐呭", new String[]{attrVO.getName()});
+                }
+            });
+        }
+    }
+
+
+
+
+    /**
+     * 浠庣紪鐮佺敵璇蜂俊鎭璞′笂鑾峰彇鏌愪釜灞炴�х殑鍊�
+     *
+     * @param orderDTO 缂栫爜鐢宠瀵硅薄
+     * @param attrId   灞炴�х殑缂栧彿
+     * @return 鍊�
+     */
+    private String getValueFromOrderDTO(CodeOrderDTO orderDTO, String attrId) {
+        attrId = attrId.toLowerCase(Locale.ROOT);
+        String value = null;
+        if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) {
+            value = WebUtil.getStringValueFromObject(WebUtil.getValueFromField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO));
+        } else {
+            //璇存槑鏄嚜琛岄厤缃殑
+            //鍓嶇蹇呴』瑕佷紶閫掑皬鍐欑殑灞炴��
+            value = orderDTO.getData().getOrDefault(attrId, "");
+        }
+        return value;
+    }
+
+    /**
+     * excel杞崲涓篶bo鐨勫璞�
+     * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param codeImprotDataVO: 鍒嗙被瀵瑰簲鐨勬暟鎹�
+     * @param cboList 鏁版嵁鐨勫垪琛�
+     * @param newCode 鏄惁涓烘壒閲忕敵璇�
+     */
+    private void excelToCbo(CodeClassifyFullInfoBO classifyFullInfo,CodeImprotDataVO codeImprotDataVO,List<ClientBusinessObject> cboList, boolean newCode){
+        String fullPath = getFullPath(classifyFullInfo);
+        codeImprotDataVO.getDatas().stream().forEach(rowData -> {
+            ClientBusinessObject cbo = boService.createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
+            rowData.forEach((field,value)->{
+                try {
+                    cbo.setAttributeValueWithNoCheck(field,value);
+                    if(WebUtil.isDefaultField(field)){
+                        WebUtil.setValueToField(field, cbo, value);
+                    }
+                } catch (VCIError e) {
+                    logger.error("璁剧疆灞炴�х殑鍊奸敊璇�",e);
+                }
+            });
+            try {
+                if(newCode){
+                    cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD,classifyFullInfo.getCurrentClassifyVO().getOid());
+                    cbo.setAttributeValue(CODE_FULL_PATH_FILED,fullPath);
+                    //cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+                    int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
+                    if(secret == 0 || !secretService.checkDataSecret(secret) ){
+                        Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+                        cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret));
+                    }
+                }else{
+                    //姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰�
+                    //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath));
+                    cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
+                }
+                rowData.put("oid",cbo.getOid());
+                cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD,codeImprotDataVO.getTemplateOid());
+                cbo.setAttributeValue(IMPORT_ROW_INDEX,rowData.get(IMPORT_ROW_INDEX));
+            }catch (Throwable e){
+                logger.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�",e);
+            }
+            cboList.add(cbo);
+        });
+
+    }
+
+
+    private void createRedisDatas(String uuid, CodeClassifyTemplateVO templateVO, List<CodeImprotDataVO> codeImprotDataVOs, Map<String, String> errorMap, boolean isok){
+        codeImprotDataVOs.stream().forEach(codeImprotDataVO -> {
+            List<Map<String, String>>  dataLists=new ArrayList<>();
+            CodeImprotDataVO newCodeImprotDataVO=new CodeImprotDataVO();
+            if(errorMap.size()>0) {
+                //瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒�
+               dataLists = codeImprotDataVO.getDatas().stream().filter(cbo -> {
+                    String rowIndex=cbo.get(IMPORT_ROW_INDEX);
+                    return  isok? !errorMap.containsKey(rowIndex):errorMap.containsKey(rowIndex);
+                }).collect(Collectors.toList());
+
+            }else{
+                dataLists= codeImprotDataVO.getDatas();
+            }
+            BeanUtilForVCI.copyPropertiesIgnoreCase(codeImprotDataVO,newCodeImprotDataVO);
+            newCodeImprotDataVO.setDatas(dataLists);
+            List<CodeImprotDataVO> codeImprotDataVOList=new ArrayList<>();
+            codeImprotDataVOList.add(newCodeImprotDataVO);
+            redisService.setCacheList(uuid+"-"+codeImprotDataVO.getCodeClassifyOid(), codeImprotDataVOList);
+            logger.info(uuid+"-"+codeImprotDataVO.getCodeClassifyOid()+":鏉$洰鏁�"+codeImprotDataVOList.size());
+            //redisService.expire(uuid+"-"+codeImprotDataVO.getCodeClassifyOid(),6000000);//redis杩囨湡鏃堕棿
+        });
+    }
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmProductCodeServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmProductCodeServiceImpl.java
new file mode 100644
index 0000000..2cf4f33
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/MdmProductCodeServiceImpl.java
@@ -0,0 +1,741 @@
+package org.springblade.code.service.impl;
+
+import com.vci.corba.common.VCIError;
+import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.constant.RegExpConstant;
+import com.vci.starter.web.exception.VciBaseException;
+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.util.VciDateUtil;
+import com.vci.web.enumpck.OsCodeFillTypeEnum;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.web.service.impl.FormulaServiceImpl;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.code.bo.CodeClassifyFullInfoBO;
+import org.springblade.code.dao.CodeAllCodeDaoI;
+import org.springblade.code.dao.CodeSerialValueDaoI;
+import org.springblade.code.dto.CodeOrderSecDTO;
+import org.springblade.code.enumpack.CodeCutTypeEnum;
+import org.springblade.code.enumpack.CodeGetValueTypeEnum;
+import org.springblade.code.enumpack.CodeLevelTypeEnum;
+import org.springblade.code.enumpack.CodeSecTypeEnum;
+import org.springblade.code.lifecycle.CodeAllCodeLC;
+import org.springblade.code.model.CodeAllCodeDO;
+import org.springblade.code.model.CodeSerialValueDO;
+import org.springblade.code.service.MdmProductCodeServiceI;
+import org.springblade.code.vo.pagemodel.CodeBasicSecVO;
+import org.springblade.code.vo.pagemodel.CodeClassifyTemplateVO;
+import org.springblade.code.vo.pagemodel.CodeClassifyVO;
+import org.springblade.code.vo.pagemodel.CodeRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import plm.bs.bom.clientobject.ClientBusinessObject;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.web.other.BdSelectInputCharAspect.SEP;
+import static org.springblade.code.constant.MdmEngineConstant.*;
+
+/**
+ * 鐢熸垚缂栫爜鐨勬湇鍔�
+ * @author weidy
+ * @date 2022-3-6
+ */
+@Service
+public class MdmProductCodeServiceImpl implements MdmProductCodeServiceI {
+
+    /**
+     * 涓氬姟鏁版嵁鐨勬湇鍔�
+     */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+     * 鎵�鏈夌殑缂栫爜鐨勫唴瀹�
+     */
+    @Autowired
+    private CodeAllCodeDaoI allCodeMapper;
+
+    /**
+     * 娴佹按鍙风殑鐩稿叧鐨勪俊鎭�
+     */
+    @Autowired
+    private CodeSerialValueDaoI serialValueMapper;
+
+    /**
+     * 鍏紡鐨勬湇鍔�
+     */
+    @Autowired
+    private FormulaServiceImpl formulaService;
+    /**
+     * 鐢熸垚缂栫爜--骞朵笖淇濆瓨鏁版嵁
+     *
+     * @param classifyFullInfoBO 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param templateVO         妯℃澘鐨勬樉绀哄璞�
+     * @param ruleVO             缂栫爜瑙勫垯鐨勬樉绀哄璞�
+     * @param secDTOList         鍚勪釜鐮佹鐨勫��
+     * @param dataCBOList        涓氬姟鏁版嵁
+     */
+    @Override
+    public synchronized List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO,
+															CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<ClientBusinessObject> dataCBOList) {
+        BatchCBO batchCBO = new BatchCBO();
+        WebUtil.setPersistence(false);
+        dataCBOList = dataCBOList.stream().sorted(((o1, o2) -> o1.getCreateTime().compareTo(o2.getCreateTime()))).collect(Collectors.toList());
+        batchCBO.getCreateCbos().addAll(dataCBOList);
+        List<String> codeList = new ArrayList<>();
+
+        /*****
+         * 淇濊瘉骞跺彂鐨勬椂鍊欙紝鏈�澶ф祦姘村彿閮藉鐨勶紝浣嗘槸杩欑鍔犻攣鏈夊紛绔�
+         *
+         */
+
+        if(dataCBOList.stream().anyMatch(cbo->StringUtils.isNotBlank(cbo.getId()) && StringUtils.isNotBlank(cbo.getAttributeValue(CODE_SEC_LENGTH_FIELD)))){
+            //鏄巻鍙叉暟鎹鍏�
+            //鍘嗗彶鏁版嵁鎵ц鐨勬椂鍊欙紝杩欎釜绯荤粺浼氬緢鍗�
+            //涓昏鏄负浜嗗綍鍏ユ渶澶ф祦姘村彿鍜宎llcode
+            SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+            List<CodeAllCodeDO> allCodeDOList = new ArrayList<>();
+            Map<String/**娴佹按渚濇嵁**/,Map<String/**鐮佹鐨勪富閿�**/,Double/**鏈�澶ф祦姘村彿**/>> maxSerialMap = new HashMap<>();
+            dataCBOList.parallelStream().forEach(cbo->{
+                VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+                String code = cbo.getId();
+                List<String> serialUnitList = new ArrayList<>();
+                String[] secLengths = cbo.getAttributeValue(CODE_SEC_LENGTH_FIELD).split("#");
+                List<CodeBasicSecVO> secVOList = ruleVO.getSecVOList().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
+                Map<String/**鐮佹鐨勪富閿�**/,String/**鐮佹鐨勫��**/> serialValueMap = new HashMap<>();
+                Map<String, CodeBasicSecVO> secVOMap = secVOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+                for (int i = 0; i < secLengths.length; i++) {
+                    CodeBasicSecVO secVO = secVOList.get(i);
+                    String thisSecValue  = "";
+                    if(i == 0){
+                        thisSecValue = code.contains("#")?code.substring(0,code.indexOf("#")):code;
+                    } else if(i == secLengths.length-1){
+                        //鏈�鍚�
+                        thisSecValue =  code.contains("#")?code.substring(code.lastIndexOf("#")):code;
+                    }else {
+                        int start = 0;
+                        for (int j = 0; j < i; j++) {
+                            start += VciBaseUtil.getInt(secLengths[j]) + 1;
+                        }
+                        thisSecValue = code.substring(start,start+VciBaseUtil.getInt(secLengths[1]));
+                    }
+                    if(VciBaseUtil.getBoolean(secVO.getSerialDependFlag())){
+                        serialUnitList.add(thisSecValue);
+                    }
+                    if(CodeSecTypeEnum.CODE_SERIAL_SEC.getValue().equalsIgnoreCase(secVO.getSectype())){
+                        serialValueMap.put(secVO.getOid(),thisSecValue);
+                    }
+                }
+                String serialUnitString = serialUnitList.size() == 0 ? EMPTY_SERIAL_UNIT : serialUnitList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE));
+                List<String> serialUnFileStringList = new ArrayList<>();
+                if(!CollectionUtils.isEmpty(serialValueMap)){
+                    serialValueMap.forEach((secOid,secValue)->{
+                        //瑕佺湅鏄笉鏄ˉ浣嶇殑
+                        CodeBasicSecVO secVO = secVOMap.get(secOid);
+                        Double serialDb = null;
+                        if(OsCodeFillTypeEnum.NONE.getValue().equalsIgnoreCase(secVO.getCodeFillType())){
+                            //涓嶈ˉ鐮�
+                            //鎶婃墍鏈変笉鏄暟瀛楃殑鍘绘帀锛屽洜涓哄彲鑳戒細鏄�佹暟鎹紝鏂拌鍒�
+                            serialDb = VciBaseUtil.getDouble(killUnNumberChar(secValue));
+                        }else {
+                            //宸﹀彸濉厖鐨勶紝鎴戜滑闇�瑕�
+                            serialDb = VciBaseUtil.getDouble(killUnNumberChar(killFillChar(secValue,secVO.getCodeFillSeparator(),
+                                    OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(secVO.getCodeFillType()))));
+                        }
+                        Map<String, Double> thisUnitMaxMap = maxSerialMap.getOrDefault(serialUnitString, new HashMap<>());
+                        thisUnitMaxMap.put(secOid,serialDb);
+                        maxSerialMap.put(serialUnitString,thisUnitMaxMap);
+                        serialUnFileStringList.add(String.valueOf(serialDb));
+                    });
+                }
+                CodeAllCodeDO allCodeDO = new CodeAllCodeDO();
+                allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid());
+                allCodeDO.setCodeRuleOid(ruleVO.getOid());
+                allCodeDO.setId(cbo.getId());
+                allCodeDO.setCodeClassifyTemplateOid(templateVO.getOid());
+                allCodeDO.setCreateCodeBtm(cbo.getBtmName());
+                allCodeDO.setCreateCodeOid(cbo.getOid());
+                allCodeDO.setSerialUnit(serialUnitString);
+                allCodeDO.setUnFillSerial(serialUnFileStringList.stream().collect(Collectors.joining(SERIAL_VALUE_SPACE)));
+                allCodeDO.setLcStatus(cbo.getLcStatus());
+                allCodeDOList.add(allCodeDO);
+            });
+            //澶勭悊鏈�澶х殑娴佹按鍙�
+            List<CodeSerialValueDO> addSerialValueList = new ArrayList<>();
+            List<CodeSerialValueDO> editSerialValueList = new ArrayList<>();
+            maxSerialMap.forEach((serialUnit,secOidMaxMap)->{
+                secOidMaxMap.forEach((secOid,maxSerial)->{
+                    Map<String, String> conditionMap = new HashMap<>();
+                    conditionMap.put("codeRuleOid", ruleVO.getOid());
+                    conditionMap.put("serialUnit", serialUnit);
+                    //杩欎釜瀛楁鏄负浜嗚В鍐冲涓祦姘寸殑闂
+                    conditionMap.put("codeSecOid", secOid);
+                    List<CodeSerialValueDO> serialValueDOS = serialValueMapper.selectByCondition(conditionMap, new PageHelper(-1));
+                    if (!CollectionUtils.isEmpty(serialValueDOS)) {
+                        CodeSerialValueDO serialValueDO = serialValueDOS.get(0);
+                        if(VciBaseUtil.getDouble(serialValueDO.getMaxSerial())<maxSerial){
+                            serialValueDO.setMaxSerial(String.valueOf(maxSerial));
+                            editSerialValueList.add(serialValueDO);
+                        }
+                    }else{
+                        //娌℃湁
+                        CodeSerialValueDO serialValueDO = new CodeSerialValueDO();
+                        serialValueDO.setCodeRuleOid(ruleVO.getOid());
+                        serialValueDO.setSerialUnit(serialUnit);
+                        serialValueDO.setCodeSecOid(secOid);
+                        serialValueDO.setMaxSerial(maxSerial.toString());
+                        addSerialValueList.add(serialValueDO);
+                    }
+                });
+            });
+            if(!CollectionUtils.isEmpty(addSerialValueList)){
+                batchCBO.copyFromOther(serialValueMapper.batchInsert(addSerialValueList));
+            }
+            if(!CollectionUtils.isEmpty(editSerialValueList)){
+                batchCBO.copyFromOther(serialValueMapper.batchUpdate(editSerialValueList));
+            }
+            //澶勭悊allCode
+            if(!CollectionUtils.isEmpty(allCodeDOList)){
+                    Map<String, List<CodeAllCodeDO>> ruleGroup = allCodeDOList.stream().collect(Collectors.groupingBy(s -> s.getCodeRuleOid()));
+                Map<String, CodeAllCodeDO> codeDOMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getCodeRuleOid() + SEP + s.getId(), t -> t));
+                List<CodeAllCodeDO> addCodeDOs = new ArrayList<>();
+                List<CodeAllCodeDO> editCodeDOs = new ArrayList<>();
+                ruleGroup.forEach((ruleOid,allCodeDOS)->{
+                    VciBaseUtil.switchCollectionForOracleIn(allCodeDOS).stream().forEach(codeDOs->{
+                        Map<String,String> conditionMap = new HashMap<>();
+                        conditionMap.put("coderuleoid",ruleOid);
+                        conditionMap.put("id",QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDOs.stream().map(s->s.getId()).collect(Collectors.toList()).toArray(new String[0])) + ")");
+                        List<CodeAllCodeDO> existCodes = allCodeMapper.selectByCondition(conditionMap, new PageHelper(-1));
+                        if(!CollectionUtils.isEmpty(existCodes)){
+                            existCodes.stream().forEach(existCode->{
+                                String rule_id = existCode.getCodeRuleOid() + SEP + existCode.getId();
+                                if(codeDOMap.containsKey(rule_id)){
+                                    CodeAllCodeDO newCodeDO = codeDOMap.get(rule_id);
+                                    existCode.setCreateCodeOid(newCodeDO.getOid());
+                                    existCode.setCreateCodeBtm(newCodeDO.getCreateCodeBtm());
+                                    existCode.setCodeClassifyTemplateOid(newCodeDO.getCodeClassifyTemplateOid());
+                                    existCode.setCodeClassifyOid(newCodeDO.getCodeClassifyOid());
+                                    existCode.setLcStatus(newCodeDO.getLcStatus());
+                                    editCodeDOs.add(existCode);
+                                }
+                            });
+                        }
+                    });
+                });
+                if(!CollectionUtils.isEmpty(editCodeDOs)){
+                    Set<String> exitIds = editCodeDOs.stream().map(s -> s.getCodeRuleOid() + SEP + s.getId()).collect(Collectors.toSet());
+                    addCodeDOs = allCodeDOList.stream().filter(s -> !exitIds.contains(s.getCodeRuleOid() + SEP + s.getId())).collect(Collectors.toList());
+                }else{
+                    addCodeDOs = allCodeDOList;
+                }
+                if(!CollectionUtils.isEmpty(editCodeDOs)){
+                    batchCBO.copyFromOther(allCodeMapper.batchUpdate(editCodeDOs));
+                }
+                if(!CollectionUtils.isEmpty(addCodeDOs)){
+                    batchCBO.copyFromOther(allCodeMapper.batchInsert(addCodeDOs));
+                    Map<String, String> statusMap = addCodeDOs.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus()));
+                    batchCBO.getCreateCbos().stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmName())).forEach(s -> {
+                        s.setLcStatus(statusMap.get(s.getOid()));
+                        try {
+                            s.setAttributeValue("lcstatus",statusMap.get(s.getOid()));
+                        } catch (VCIError e) {
+                            e.printStackTrace();
+                        }
+                    });
+                }
+            }
+            WebUtil.setPersistence(true);
+            boService.persistenceBatch(batchCBO);
+            return codeList;
+        }else {
+            List<CodeBasicSecVO> secVOList = ruleVO.getSecVOList().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
+            List<String> serialUnitList = new LinkedList<>();
+            List<String> secValueList = new ArrayList<>();
+            Map<String, String> secValueMap = secDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), s -> s.getSecValue()));
+            List<CodeBasicSecVO> serialSecVOList = new ArrayList<>();
+            List<CodeBasicSecVO> attrSecVOList = new ArrayList<>();
+            for (int i = 0; i < secVOList.size(); i++) {
+                CodeBasicSecVO secVO = secVOList.get(i);
+                switchSecValue(secVO, secValueMap, classifyFullInfoBO, serialSecVOList, attrSecVOList, serialUnitList, secValueList);
+            }
+            //澶勭悊灞炴�х爜娈靛拰娴佹按鐮佹
+            Map<String/**娴佹按鐮佹鐨勪富閿�**/, Map<String/**娴佹按渚濇嵁**/, Double>> lastMaxSerialValueMap = new HashMap<>();
+            List<CodeAllCodeDO> allCodeDOList = new ArrayList<>();
+
+            //宸茬粡瀛樺偍鐨勬渶澶ф祦姘村彿鐨勫唴瀹�
+            Map<String/**鐮佹鐨勪富閿�**/, Map<String, CodeSerialValueDO>> maxSerialValueMap = new HashMap<>();
+
+            for (int i = 0; i < dataCBOList.size(); i++) {
+                ClientBusinessObject cbo = dataCBOList.get(i);
+                List<String> thisSecValueList = new LinkedList<>();
+                for (int j = 0; j < secValueList.size(); j++) {
+                    thisSecValueList.add(secValueList.get(j));
+                }
+                List<String> thisSerialUnitList = new LinkedList<>();
+                //鍥犱负娴佹按渚濇嵁姣忔鍙兘涓嶄竴鏍凤紝鎵�浠ユ瘡娆¢兘鎷疯礉涓�浠�
+                for (int j = 0; j < serialUnitList.size(); j++) {
+                    thisSerialUnitList.add(serialUnitList.get(j));
+                }
+                //鍏堢湅鐪嬫湁娌℃湁灞炴�х殑鐮佹
+                boolean attrSevIsSerialDepend = CollectionUtils.isEmpty(attrSecVOList) ? false : (attrSecVOList.stream().anyMatch(s -> VciBaseUtil.getBoolean(s.getSerialDependFlag())));
+                switchAttrSecValue(attrSecVOList, cbo, thisSecValueList, attrSevIsSerialDepend, thisSerialUnitList);
+
+                String serialUnitString = thisSerialUnitList.size() == 0 ? EMPTY_SERIAL_UNIT : thisSerialUnitList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE));
+                switchSerialSecValue(serialSecVOList, attrSevIsSerialDepend, ruleVO, serialUnitString, maxSerialValueMap, thisSecValueList, lastMaxSerialValueMap, i == 0);
+
+                //缁勮缂栫爜鐨勫��
+                cbo.setId(thisSecValueList.stream().collect(Collectors.joining()));
+                codeList.add(cbo.getId());
+                StringBuilder sb = new StringBuilder();
+                //鎶婄爜娈甸噷闈㈤兘鎵句竴涓嬫祦姘村彿
+                for (int j = 0; j < serialSecVOList.size(); j++) {
+                    CodeBasicSecVO secVO = serialSecVOList.get(j);
+                    Double serialValue = lastMaxSerialValueMap.getOrDefault(secVO.getOid(), new HashMap<>()).getOrDefault(serialUnitString, 0d);
+                    if (serialValue != null) {
+                        sb.append(String.valueOf(serialValue.longValue())).append(SERIAL_VALUE_SPACE);
+                    }
+                }
+                //瑕佸瓨鍌ㄦ渶鍚庣殑鍏ㄩ儴allcode
+                wrapperAllCode(classifyFullInfoBO, ruleVO, cbo, templateVO, allCodeDOList, serialUnitString, sb.toString());
+            }
+            batchCBO.copyFromOther(allCodeMapper.batchInsert(allCodeDOList));
+            saveSerialValue(batchCBO, ruleVO, lastMaxSerialValueMap, maxSerialValueMap);
+
+            Map<String, String> statusMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus()));
+            batchCBO.getCreateCbos().stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmName())).forEach(s -> {
+                s.setLcStatus(statusMap.get(s.getOid()));
+                try {
+                    s.setAttributeValue("lcstatus",statusMap.get(s.getOid()));
+                } catch (VCIError e) {
+                    e.printStackTrace();
+                }
+            });
+
+
+        }
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO);
+        return codeList;
+    }
+
+    /**
+     * 鍘婚櫎琛ヤ綅瀛楃
+     * @param s 瀛楃
+     * @param fillString 琛ヤ綅瀛楃
+     * @param left 鏄惁宸﹁ˉ浣�
+     * @return 鏇挎崲鍚庣殑鍊�
+     */
+    private String killFillChar(String s, String fillString,boolean left){
+        Integer index = 0;
+        String value = s;
+        if(left){
+            for (int i = 0; i < s.length(); i++) {
+                char c = s.charAt(i);
+                if((new String(new char[]{c})).equalsIgnoreCase(fillString)){
+                    index = i;
+                }
+            }
+            if(index >0){
+                value = value.substring(index);
+            }
+        }else{
+            //浠庡彸寰�宸︽壘
+            for (int i = s.length()-1; i >=0; i++) {
+                char c = s.charAt(i);
+                if((new String(new char[]{c})).equalsIgnoreCase(fillString)){
+                    index = i;
+                }
+            }
+            if(index >0){
+                value = value.substring(0,index);
+            }
+        }
+        return value;
+
+    }
+
+    /**
+     * 鍘绘帀涓嶆槸鏁板瓧鐨勫瓧绗�
+     * @param s 瀛楃
+     * @return 鏇挎崲鍚庣殑鍊�
+     */
+    private String killUnNumberChar(String s){
+        Integer lastUnNumberIndex = 0;
+        for (int i = 0; i < s.length(); i++) {
+            char c = s.charAt(i);
+            if(!(new String(new char[]{c})).matches(RegExpConstant.NUMBER)){
+                lastUnNumberIndex = i;
+            }
+        }
+        String value = s;
+        if(lastUnNumberIndex >0){
+            value = value.substring(lastUnNumberIndex);
+        }
+        return value;
+    }
+
+    /**
+     * 鍥炴敹鐮佸��
+     *
+     * @param btmId                 涓氬姟鏁版嵁鐨勪笟鍔$被鍨�
+     * @param businessOidCollection 涓氬姟鏁版嵁鐨勪富閿�
+     * @return 鍙楀奖鍝嶇殑鏁版嵁鍐呭
+     */
+    @Override
+    public BatchCBO recycleCode(String btmId, Collection<String> businessOidCollection) {
+        boolean oldPersistence =  WebUtil.isPersistence();
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = new BatchCBO();
+        VciBaseUtil.switchCollectionForOracleIn(businessOidCollection).stream().forEach(oids-> {
+            Map<String, String> conditionMap = new HashMap<>();
+            //缂栫爜瑕佽褰曚负鍥炴敹鐨勭姸鎬�
+            conditionMap.put("createcodeoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(oids.toArray(new String[0])) + ")");
+            conditionMap.put("createcodebtm", btmId);
+            List<CodeAllCodeDO> allCodeDOS = allCodeMapper.selectByCondition(conditionMap, new PageHelper(-1));
+            if (!CollectionUtils.isEmpty(allCodeDOS)) {
+                allCodeDOS.stream().forEach(codeDO->{
+                    codeDO.setLcStatus(CodeAllCodeLC.TASK_BACK.getValue());
+                });
+                batchCBO.copyFromOther(allCodeMapper.batchUpdate(allCodeDOS));
+            }
+        });
+        WebUtil.setPersistence(oldPersistence);
+        return batchCBO;
+    }
+
+    /**
+     * 杞崲鐮佸�肩殑鍐呭
+     * @param secVO 鐮佹鐨勫唴瀹�
+     * @param secValueMap 鐮佸�肩殑鍐呭锛宬ey鏄爜娈电殑涓婚敭锛寁alue鏄爜鍊�
+     * @param classifyFullInfoBO 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+     * @param serialSecVOList 娴佹按鐮佹
+     * @param attrSecVOList 灞炴�х爜娈�
+     * @param serialUnitList 娴佹按渚濇嵁
+     * @param secValueList 鐮佸�煎垪琛�
+     */
+    private void switchSecValue(CodeBasicSecVO secVO,Map<String,String> secValueMap,
+                                CodeClassifyFullInfoBO classifyFullInfoBO,List<CodeBasicSecVO> serialSecVOList,
+                                List<CodeBasicSecVO> attrSecVOList, List<String> serialUnitList,
+                                List<String> secValueList ){
+        CodeSecTypeEnum secType = CodeSecTypeEnum.forValue(secVO.getSectype());
+        String secValue = secValueMap.getOrDefault(secVO.getOid(), "");
+        switch (secType) {
+            case CODE_FIXED_SEC:
+                //鍥哄畾鐮佹鐨勶紝鐩存帴鐢ㄧ爜鍊�,涓嶈鐮佸�肩殑闀垮害鏄灏戯紝鍥犱负鍙彉闀垮害鍜屽浐瀹氶暱搴︽槸鎺у埗鍦ㄧ爜娈电鐞嗛噷闈㈢殑鐮佸�煎畾涔夌殑
+                break;
+            case CODE_DATE_SEC:
+                //鏃堕棿鐮佹锛岄渶瑕佸皢褰撳墠鏃堕棿渚濇嵁鏃堕棿鏍煎紡杩涜杞崲.
+                //鏃堕棿鐮佹涓嶆秹鍙婂埌鏄惁琛ヤ綅
+                secValue = VciDateUtil.date2Str(new Date(), secVO.getCodeDateFormatStr());
+                break;
+            case CODE_CLASSIFY_SEC:
+                //鍒嗙被鐮佹鐨勶紝涔熸槸浠庡墠绔�夋嫨浜嗙爜鍊煎嵆鍙紝涓嶈鐮佸�肩殑闀垮害鏄灏�
+                break;
+            case CODE_LEVEL_SEC:
+                //灞傜骇鐮佹锛岄渶瑕佷粠鍒嗙被涓婅幏鍙栫浉搴旂殑淇℃伅
+                if (CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(secVO.getCodeLevelType())) {
+                    //鏈�灏忓眰锛屽洜涓烘垜浠彧鑳藉湪鍙跺瓙鑺傜偣涓婄敵璇风紪鐮侊紝鎵�浠ヨ繖涓氨鏄綋鍓嶅垎绫荤殑
+                    if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(secVO.getCodeGetValueType()) || CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) {
+                        //灏辨槸褰撳墠鍒嗙被鐨�
+                        secValue = classifyFullInfoBO.getCurrentClassifyVO().getId();
+                    } else {
+                        //鎴戜滑闇�瑕佷粠椤跺眰寮�濮嬫壘鍒板綋鍓嶅垎绫讳负姝�
+                        secValue = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId();
+                    }
+                } else {
+                    //鎸囧畾灞傦紝鎴戜滑闇�瑕侀�氳繃涓婄骇鐨勬潵鑾峰彇
+                    if (CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) {
+                        //璇存槑褰撳墠宸茬粡鏄渶楂樼殑浜�
+                        secValue = classifyFullInfoBO.getCurrentClassifyVO().getId();
+                    } else {
+                        //杩欎釜鎴戜滑闇�瑕佺湅鐪�,灞傜骇鏄笉鏄ぇ浜庝簡鏈�澶у眰绾х殑鏁�
+                        List<CodeClassifyVO> parentClassifyVOList = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList());
+                        if (secVO.getCodeLevelValue() > (parentClassifyVOList.size() + 1)) {
+                            //鎸囧畾鐨勫眰绾ф瘮褰撳墠鐨勫眰绾ц繕澶т簡锛屾墍浠ュ彧鑳借幏鍙栧綋鍓嶅眰绾т簡
+                            if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(secVO.getCodeGetValueType())) {
+                                secValue = classifyFullInfoBO.getCurrentClassifyVO().getId();
+                            } else {
+                                secValue = parentClassifyVOList.stream().map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId();
+                            }
+                        } else {
+                            //鎴戜滑鑾峰彇鍏朵腑鎸囧畾灞傜殑鍐呭
+                            if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(secVO.getCodeGetValueType())) {
+                                CodeClassifyVO classifyVO = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() == secVO.getCodeLevelValue().intValue()).findFirst().orElseGet(() -> null);
+                                if (classifyVO != null) {
+                                    secValue = classifyVO.getId();
+                                }
+                            } else {
+                                //灏忎簬绛変簬鐨勫叏閮ㄦ嬁鍑烘潵
+                                secValue = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() <= secVO.getCodeLevelValue().intValue()).sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining());
+                            }
+                        }
+                    }
+                }
+                //鐪嬬湅闀垮害鏄惁闇�瑕佹埅鏂�
+                if (!CodeCutTypeEnum.NONE.getValue().equalsIgnoreCase(secVO.getValueCutType()) &&
+                        secVO.getValueCutLength() != null && secVO.getValueCutLength() > 0 && secValue.length() > secVO.getValueCutLength()) {
+                    if (CodeCutTypeEnum.RIGHT.getValue().equalsIgnoreCase(secVO.getValueCutType())) {
+                        //宸︽埅鍙栨槸浠庡乏杈瑰壀鎺夛紝鍙虫埅鍙栨槸浠庡彸杈瑰壀鎺�--淇濈暀宸﹁竟
+                        secValue = secValue.substring(0, secVO.getValueCutLength());
+                    } else {
+                        secValue = secValue.substring(secValue.length() - secVO.getValueCutLength());
+                    }
+                }
+                break;
+            case CODE_REFER_SEC:
+                //寮曠敤鐨勫湪椤甸潰涓婂凡缁忛�夋嫨浜嗭紝鎵�浠ョ洿鎺ヤ娇鐢ㄥ墠绔笂浼犻�掔殑鍊�
+                //寮曠敤灏辨槸鍙傜収锛屽彲鑳芥槸鍏朵粬鐨勫垎绫伙紙涓氬姟绫诲瀷锛変笅鐨勬暟鎹紝鎵�浠ュ彧鍦ㄩ〉闈笂閫夋嫨
+                break;
+            case CODE_ATTR_SEC:
+                //灞炴�т笌寮曠敤鐨勫尯鍒槸锛屽睘鎬ф槸褰撳墠鏁版嵁閲岀殑灞炴�э紝鑰屽紩鐢ㄥ彲鑳芥槸寮曠敤鍏朵粬鐨勫垎绫荤殑锛堜笟鍔$被鍨嬶級
+                //鍥犱负鍙兘鏄壒閲忕殑鏁版嵁鐨勬搷浣滐紝鎵�浠ユ垜浠繖閲屼笉鑳界洿鎺ュ鐞嗗睘鎬э紝闇�瑕佸悗杈逛竴杈瑰鐞�
+                secValue = "${attr_" + secVO.getOid() + "}";
+                attrSecVOList.add(secVO);
+                break;
+            case CODE_VARIABLE_SEC:
+                //鍙彉鐮佹锛屾槸鍦ㄩ〉闈笂杈撳叆鍐呭
+                if (secValue.length() > VciBaseUtil.getInt(secVO.getCodeSecLength())) {
+                    throw new VciBaseException("銆恵0}銆戣繖涓爜娈垫槸鍙彉鐮佹锛屼絾鏄幇鍦ㄨ緭鍏ョ殑鐮佸�肩殑闀垮害({1})瓒呰繃浜嗚瀹氱殑闀垮害{2}", new String[]{secVO.getName(), String.valueOf(secValue.length()), secVO.getCodeSecLength()});
+                }
+                OsCodeFillTypeEnum fillTypeEnum = OsCodeFillTypeEnum.forValue(secVO.getCodeFillType());
+                secValue = fillString(VciBaseUtil.getInt(secVO.getCodeSecLength()), fillTypeEnum, secValue, secVO.getCodeFillSeparator());
+                break;
+            case CODE_SERIAL_SEC:
+                //娴佹按鐮佹
+                serialSecVOList.add(secVO);
+                secValue = "${" + secVO.getOid() + "}";
+            default:
+                break;
+        }
+        if (VciBaseUtil.getBoolean(secVO.getSerialDependFlag())) {
+            serialUnitList.add(secValue);
+        }
+        secValueList.add(secValue);
+    }
+
+
+    /**
+     * 琛ヤ綅
+     * @param totalLength 鎬婚暱搴�
+     * @param fillTypeEnum 琛ヤ綅鏂瑰紡
+     * @param text 褰撳墠鐨勫唴瀹�
+     * @param fillChar 琛ヤ綅鐨勫瓧绗�
+     * @return 涓嶅~鍏呬綅缃拰闀垮害宸茬粡杈惧埌/瓒呰繃鐨勬椂鍊欎笉浼氬~鍏�
+     */
+    private String fillString(int totalLength,OsCodeFillTypeEnum fillTypeEnum,String text,String fillChar){
+        if(text.length() >= totalLength || OsCodeFillTypeEnum.NONE.equals(fillTypeEnum)){
+            //涓嶇敤琛ヤ綅浜�
+            return  text;
+        }
+        int balance = totalLength - text.length();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < balance; i++) {
+            sb.append(fillChar);
+        }
+        if(OsCodeFillTypeEnum.LEFT.equals(fillTypeEnum)) {
+            text = sb.toString() + text;
+        }else {
+            text = text + sb.toString();
+        }
+        return  text;
+    }
+
+    /**
+     * 杞崲灞炴�х爜娈电殑鍊�
+     * @param attrSecVOList 灞炴�х爜娈电殑鏄剧ず瀵硅薄
+     * @param cbo 涓氬姟鏁版嵁锛岀敤浜庤幏鍙栫爜娈电殑鍊�
+     * @param thisSecValueList 鐮佸�肩殑鍒楄〃
+     * @param attrSevIsSerialDepend 鏄惁鏈変綔涓烘祦姘翠緷鎹�
+     * @param serialUnitList 娴佹按渚濇嵁鐨勫唴瀹�
+     */
+    private void switchAttrSecValue(List<CodeBasicSecVO> attrSecVOList,ClientBusinessObject cbo,
+                                    List<String> thisSecValueList,boolean attrSevIsSerialDepend,
+                                    List<String> serialUnitList){
+        if (!CollectionUtils.isEmpty(attrSecVOList)) {
+            attrSecVOList.stream().forEach(attrSevVO -> {
+                String value = "";
+                if (StringUtils.isNotBlank(attrSevVO.getGetValueClass())) {
+                    //浣跨敤缁勫悎瑙勫垯鏉ュ鐞嗙殑
+                    value = getValueByFormulaForCBO(cbo, attrSevVO.getGetValueClass());
+                } else {
+                    value = cbo.getAttributeValue(attrSevVO.getReferAttributeId());
+                }
+                if (value == null) {
+                    value = "";
+                }
+                //鏇挎崲secValueList閲岄潰鐨勫唴瀹�
+                for (int j = 0; j < thisSecValueList.size(); j++) {
+                    String secValue = thisSecValueList.get(j);
+                    if (secValue.equalsIgnoreCase("${attr_" + attrSevVO.getOid() + "}")) {
+                        thisSecValueList.set(j, value);
+                    }
+                }
+                if (attrSevIsSerialDepend) {
+                    //鏄祦姘翠緷璧栫殑璇濓紝闇�瑕佸幓鏇挎崲涓�涓�
+                    for (int j = 0; j < serialUnitList.size(); j++) {
+                        String secValue = serialUnitList.get(j);
+                        if (secValue.equalsIgnoreCase("${attr_" + attrSevVO.getOid() + "}")) {
+                            serialUnitList.set(j, value);
+                        }
+                    }
+                }
+            });
+        }
+    }
+
+    /**
+     * 浣跨敤CBO澶勭悊缁勫悎瑙勫垯鐨勫唴瀹�
+     * @param cbo 鏁版嵁鐨勫唴瀹�
+     * @param rule 瑙勫垯鐨勫唴瀹�
+     * @return 杞崲鍚庣殑
+     */
+    private String getValueByFormulaForCBO(ClientBusinessObject cbo,String rule){
+        Map<String,String> dataMap = new HashMap<>();
+        WebUtil.copyValueToMapFromCbos(cbo,dataMap);
+        return formulaService.getValueByFormula(dataMap,rule);
+    }
+
+    /**
+     * 杞崲娴佹按鐮佹鐨勫��
+     * @param serialSecVOList 娴佹按鐮佹
+     * @param attrSevIsSerialDepend 鏄惁鏈夊睘鎬х爜娈靛弬涓庢祦姘�
+     * @param ruleVO 瑙勫垯鐨勫唴瀹�
+     * @param serialUnitString 娴佹按渚濇嵁
+     * @param maxSerialValueMap 鏈�澶х殑娴佹按鍙�
+     * @param thisSecValueList 鏈鐨勭爜鍊�
+     * @param lastMaxSerialValueMap 灏佽鍚�
+     * @param firstData 鏄惁涓虹涓�鏉℃暟鎹�
+     */
+    private void switchSerialSecValue(List<CodeBasicSecVO> serialSecVOList,boolean attrSevIsSerialDepend,
+                                      CodeRuleVO ruleVO,String serialUnitString,
+                                      Map<String/**鐮佹鐨勪富閿�**/,Map<String/**娴佹按渚濇嵁**/,CodeSerialValueDO>> maxSerialValueMap,List<String> thisSecValueList,
+                                      Map<String/**鐮佹鐨勪富閿�**/,Map<String/**娴佹按渚濇嵁**/, Double>> lastMaxSerialValueMap,boolean firstData){
+        if (!CollectionUtils.isEmpty(serialSecVOList)) {
+            for (int j = 0; j < serialSecVOList.size(); j++) {
+                CodeBasicSecVO secVO = serialSecVOList.get(j);
+                if (attrSevIsSerialDepend || firstData) {
+                    //濡傛灉灞炴�х爜娈典篃鏄緷璧栵紝鍒欐瘡娆¢兘瑕佹煡璇紝濡傛灉灞炴�х爜娈典笉鏄緷璧栵紝鍒欏彧鏌ヨ涓�娆�
+                    Map<String, String> conditionMap = new HashMap<>();
+                    conditionMap.put("codeRuleOid", ruleVO.getOid());
+                    conditionMap.put("serialUnit", serialUnitString);
+                    //杩欎釜瀛楁鏄负浜嗚В鍐冲涓祦姘寸殑闂
+                    conditionMap.put("codeSecOid", secVO.getOid());
+                    List<CodeSerialValueDO> serialValueDOS = serialValueMapper.selectByCondition(conditionMap, new PageHelper(-1));
+                    if (!CollectionUtils.isEmpty(serialValueDOS)) {
+                        Map<String, CodeSerialValueDO> unitSerialMap = maxSerialValueMap.getOrDefault(secVO.getOid(), new HashMap<>());
+                        CodeSerialValueDO serialValueDO = serialValueDOS.get(0);
+                        unitSerialMap.put(serialValueDO.getSerialUnit(),serialValueDO);
+                        maxSerialValueMap.put(secVO.getOid(), unitSerialMap);
+                    }
+                }
+                Double startValue = null;
+                if(maxSerialValueMap.containsKey(secVO.getOid()) && maxSerialValueMap.get(secVO.getOid()).containsKey(serialUnitString)){
+                    startValue = VciBaseUtil.getDouble(maxSerialValueMap.get(secVO.getOid()).get(serialUnitString).getMaxSerial());
+                }
+                if(lastMaxSerialValueMap.containsKey(secVO.getOid()) && lastMaxSerialValueMap.get(secVO.getOid()).containsKey(serialUnitString)){
+                    //璇存槑澶氫釜鐢宠锛屼箣鍓嶅凡缁忓姞浜嗘祦姘村彿浜�
+                    startValue = lastMaxSerialValueMap.get(secVO.getOid()).get(serialUnitString);
+                }
+                Double thisSerialValue = 0d;
+                if (startValue == null) {
+                    //绗竴涓紪鐮�
+                    thisSerialValue = VciBaseUtil.getDouble(secVO.getSerialStart());
+                } else {
+                    //娴佹按鍙疯偗瀹氭槸鏁板瓧
+                    thisSerialValue = startValue + (j + 1) * secVO.getSerialStep();
+                }
+                //瑕佺湅鏄惁瓒呰繃鏈�澶х殑娴佹按鍊�
+                if (thisSerialValue >= secVO.getCodeFillLimit()) {
+                    throw new VciBaseException("娴佹按鍙峰凡缁忚秴杩囧厑璁哥殑鏈�澶ф祦姘村�納0}",new String[]{secVO.getCodeFillLimit().toString()});
+                }
+                //瑕佺湅琛ヤ綅鐨勫唴瀹�
+                Integer fillLength = VciBaseUtil.getInt(secVO.getCodeFillLength());
+                if (fillLength == 0 || fillLength > VciBaseUtil.getInt(secVO.getCodeSecLength())) {
+                    //闃叉鍦ㄦ坊鍔犵殑鍦版柟娌℃湁鎺у埗姝g‘
+                    fillLength = VciBaseUtil.getInt(secVO.getCodeSecLength());
+                }
+                String serialString = String.valueOf(thisSerialValue.longValue());
+                serialString = fillString(fillLength, OsCodeFillTypeEnum.forValue(secVO.getCodeFillType()), serialString, secVO.getCodeFillSeparator());
+                for (int z = 0; z < thisSecValueList.size(); z++) {
+                    String secValue = thisSecValueList.get(z);
+                    if (secValue.equalsIgnoreCase("${" + secVO.getOid() + "}")) {
+                        thisSecValueList.set(z, serialString);
+                    }
+                }
+                Map<String, Double> unitSerialMap = lastMaxSerialValueMap.getOrDefault(secVO.getOid(), new HashMap<>());
+                unitSerialMap.put(serialUnitString, thisSerialValue);
+                lastMaxSerialValueMap.put(secVO.getOid(),unitSerialMap);
+            }
+        }
+    }
+
+    /**
+     * 灏佽瀛樺偍鐮佸�肩殑瀵硅薄
+     * @param classifyFullInfoBO 鍒嗙被鍏ㄩ儴鐨勪俊鎭�
+     * @param ruleVO 瑙勫垯鐨勫唴瀹�
+     * @param cbo 涓氬姟鏁版嵁
+     * @param templateVO 妯℃澘鐨勪俊鎭�
+     * @param allCodeDOList 鎵�鏈夌殑鐮佸�肩殑瀵硅薄鍒楄〃
+     */
+    private void wrapperAllCode(CodeClassifyFullInfoBO classifyFullInfoBO,CodeRuleVO ruleVO,
+                                ClientBusinessObject cbo,CodeClassifyTemplateVO templateVO,
+                                List<CodeAllCodeDO> allCodeDOList,String serialUnitString,String serialValueString){
+        CodeAllCodeDO allCodeDO = new CodeAllCodeDO();
+        allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid());
+        allCodeDO.setCodeRuleOid(ruleVO.getOid());
+        allCodeDO.setId(cbo.getId());
+        allCodeDO.setCodeClassifyTemplateOid(templateVO.getOid());
+        allCodeDO.setCreateCodeBtm(cbo.getBtmName());
+        allCodeDO.setCreateCodeOid(cbo.getOid());
+        allCodeDO.setSerialUnit(serialUnitString);
+        allCodeDO.setUnFillSerial(serialValueString);
+        allCodeDO.setLcStatus(cbo.getLcStatus());
+        allCodeDOList.add(allCodeDO);
+    }
+
+    /**
+     * 淇濆瓨娴佹按鐨勪俊鎭�
+     * @param batchCBO 鏁版嵁瀛樺偍瀹瑰櫒
+     * @param ruleVO 瑙勫垯鐨勬樉绀哄璞�
+     * @param lastMaxSerialValueMap 鏈�澶х殑娴佹按鍊兼槧灏�
+     * @param maxSerialValueMap 渚濇嵁瀛樺偍鐨勬渶澶ф祦姘寸殑鍐呭
+     */
+    private void saveSerialValue(BatchCBO batchCBO,CodeRuleVO ruleVO,
+                                 Map<String/**鐮佹鐨勪富閿�**/,Map<String, Double>> lastMaxSerialValueMap,
+                                 Map<String/**鐮佹鐨勪富閿�**/,Map<String, CodeSerialValueDO>> maxSerialValueMap){
+        List<CodeSerialValueDO> editSerialValueDOList = new ArrayList<>();
+        List<CodeSerialValueDO> addSerialValueDOList = new ArrayList<>();
+        //瀛樺偍鏈�澶ф祦姘村彿
+        lastMaxSerialValueMap.forEach((secOid,maxSerialMap)->{
+            maxSerialMap.forEach((unit,maxSerial)->{
+                CodeSerialValueDO serialValueDO = null;
+                if(maxSerialValueMap.containsKey(secOid) && maxSerialValueMap.get(secOid).containsKey(unit)){
+                    //璇存槑鏈�
+                    serialValueDO = maxSerialValueMap.get(secOid).get(unit);
+                    serialValueDO.setMaxSerial(maxSerial.toString());
+                    editSerialValueDOList.add(serialValueDO);
+                }else{
+                    serialValueDO = new CodeSerialValueDO();
+                    serialValueDO.setCodeRuleOid(ruleVO.getOid());
+                    serialValueDO.setSerialUnit(unit);
+                    serialValueDO.setCodeSecOid(secOid);
+                    serialValueDO.setMaxSerial(maxSerial.toString());
+                    addSerialValueDOList.add(serialValueDO);
+                }
+            });
+        });
+        if(!CollectionUtils.isEmpty(editSerialValueDOList)){
+            batchCBO.copyFromOther(serialValueMapper.batchUpdate(editSerialValueDOList));
+        }
+        if(!CollectionUtils.isEmpty(addSerialValueDOList)){
+            batchCBO.copyFromOther(serialValueMapper.batchInsert(addSerialValueDOList));
+        }
+    }
+
+}
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntAuthorityServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntAuthorityServiceImpl.java
new file mode 100644
index 0000000..bdeaf08
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntAuthorityServiceImpl.java
@@ -0,0 +1,288 @@
+package org.springblade.code.service.impl;
+
+
+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.springblade.code.dao.SysIntAuthorityDaoI;
+import org.springblade.code.dto.SysIntAuthorityDTO;
+import org.springblade.code.enumpack.SysIntegrationAuthorityTypeEnum;
+import org.springblade.code.model.SysIntAuthorityDO;
+import org.springblade.code.service.SysIntAuthorityServiceI;
+import org.springblade.code.service.SysIntInfoServiceI;
+import org.springblade.code.vo.pagemodel.SysIntAuthorityVO;
+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 lihang
+ * @date 2022-03-07
+ */
+@Service
+public class SysIntAuthorityServiceImpl implements SysIntAuthorityServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private SysIntAuthorityDaoI sysIntAuthorityMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 绯荤粺闆嗘垚鐨勬帴鍙d俊鎭湇鍔�
+     */
+    @Autowired
+    private SysIntInfoServiceI sysIntInfoService;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<SysIntAuthorityVO> gridSysIntAuthority(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<SysIntAuthorityDO> doList = sysIntAuthorityMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<SysIntAuthorityVO> dataGrid=new DataGrid<SysIntAuthorityVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(sysIntAuthorityDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(sysIntAuthorityMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param sysIntAuthorityDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<SysIntAuthorityVO> sysIntAuthorityDO2VOs(Collection<SysIntAuthorityDO>  sysIntAuthorityDOs) throws VciBaseException{
+        List<SysIntAuthorityVO> voList = new ArrayList<SysIntAuthorityVO>();
+        if(!CollectionUtils.isEmpty(sysIntAuthorityDOs)){
+           for(SysIntAuthorityDO s: sysIntAuthorityDOs){
+                SysIntAuthorityVO vo =  sysIntAuthorityDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  sysIntAuthorityDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  SysIntAuthorityVO sysIntAuthorityDO2VO(SysIntAuthorityDO sysIntAuthorityDO) throws VciBaseException{
+              SysIntAuthorityVO vo = new SysIntAuthorityVO();
+        if(sysIntAuthorityDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntAuthorityDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+     * @param sysIntAuthorityDTO 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public SysIntAuthorityVO addSave(SysIntAuthorityDTO sysIntAuthorityDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(sysIntAuthorityDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        if (SysIntegrationAuthorityTypeEnum.LOGIN.getValue().equals(sysIntAuthorityDTO.getType())){
+            VciBaseUtil.alertNotNull(sysIntAuthorityDTO.getUseraccount(),"鐢ㄦ埛鐧诲綍楠岃瘉鏂瑰紡鐨勯獙璇佺敤鎴�",sysIntAuthorityDTO.getUsercode(),"鐢ㄦ埛鐧诲綍楠岃瘉鏂瑰紡鐨勯獙璇佸瘑鐮�");
+        } else if (SysIntegrationAuthorityTypeEnum.TOKEN.getValue().equals(sysIntAuthorityDTO.getType())) {
+            VciBaseUtil.alertNotNull(sysIntAuthorityDTO.getToken(),"浠ょ墝楠岃瘉鏂瑰紡鐨勪护鐗�");
+        }
+        //灏咲TO杞崲涓篋O
+        SysIntAuthorityDO sysIntAuthorityDO = new SysIntAuthorityDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntAuthorityDTO,sysIntAuthorityDO);
+        sysIntAuthorityMapper.insert(sysIntAuthorityDO);
+        return sysIntAuthorityDO2VO(sysIntAuthorityDO);
+    }
+
+    /**
+     * 淇敼绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+     * @param sysIntAuthorityDTO 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public SysIntAuthorityVO editSave(SysIntAuthorityDTO sysIntAuthorityDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(sysIntAuthorityDTO,"鏁版嵁瀵硅薄",sysIntAuthorityDTO.getOid(),"绯荤粺闆嗘垚鎺ュ彛鐨勮璇佷富閿�");
+         //灏咲TO杞崲涓篋O
+         SysIntAuthorityDO sysIntAuthorityDO = selectByOid(sysIntAuthorityDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(sysIntAuthorityDTO,sysIntAuthorityDO);
+         sysIntAuthorityMapper.updateByPrimaryKey(sysIntAuthorityDO);
+         return sysIntAuthorityDO2VO(sysIntAuthorityDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param sysIntAuthorityDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param sysIntAuthorityDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(SysIntAuthorityDTO sysIntAuthorityDTO, SysIntAuthorityDO sysIntAuthorityDO) {
+            SysIntAuthorityDO tsDO = new SysIntAuthorityDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntAuthorityDTO,tsDO);
+        //boService.checkTs(tsDO);
+        if(!checkIsLinked(sysIntAuthorityDO.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{
+        return !sysIntInfoService.isAlreadyUse(null,oid);
+    }
+
+    /**
+     * 鍒犻櫎绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+     * @param sysIntAuthorityDTO 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteSysIntAuthority(SysIntAuthorityDTO sysIntAuthorityDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(sysIntAuthorityDTO,"绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹暟鎹璞�",sysIntAuthorityDTO.getOid(),"绯荤粺闆嗘垚鎺ュ彛鐨勮璇佺殑涓婚敭");
+        SysIntAuthorityDO sysIntAuthorityDO = selectByOid(sysIntAuthorityDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(sysIntAuthorityDTO,sysIntAuthorityDO);
+        if(baseResult.isSuccess()) {
+                    }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = sysIntAuthorityMapper.deleteByPrimaryKey(sysIntAuthorityDO.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  SysIntAuthorityVO getObjectByOid(String oid) throws VciBaseException{
+        return sysIntAuthorityDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private SysIntAuthorityDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntAuthorityDO sysIntAuthorityDO = sysIntAuthorityMapper.selectByPrimaryKey(oid.trim());
+        if(sysIntAuthorityDO == null || StringUtils.isBlank(sysIntAuthorityDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return sysIntAuthorityDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇绯荤粺闆嗘垚鎺ュ彛鐨勮璇�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<SysIntAuthorityVO> listSysIntAuthorityByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<SysIntAuthorityDO> sysIntAuthorityDOList = listSysIntAuthorityDOByOidCollections(oidCollections);
+        return sysIntAuthorityDO2VOs(sysIntAuthorityDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<SysIntAuthorityDO> listSysIntAuthorityDOByOidCollections(Collection<String> oidCollections){
+        List<SysIntAuthorityDO> sysIntAuthorityDOList = new ArrayList<SysIntAuthorityDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<SysIntAuthorityDO> tempDOList =  sysIntAuthorityMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        sysIntAuthorityDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  sysIntAuthorityDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収绯荤粺闆嗘垚鎺ュ彛鐨勮璇佸垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 绯荤粺闆嗘垚鎺ュ彛鐨勮璇佹樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<SysIntAuthorityVO> refDataGridSysIntAuthority(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridSysIntAuthority(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntBaseServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntBaseServiceImpl.java
new file mode 100644
index 0000000..b45ffd9
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntBaseServiceImpl.java
@@ -0,0 +1,283 @@
+package org.springblade.code.service.impl;
+
+
+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.springblade.code.dao.SysIntBaseDaoI;
+import org.springblade.code.dto.SysIntBaseDTO;
+import org.springblade.code.model.SysIntBaseDO;
+import org.springblade.code.service.SysIntBaseServiceI;
+import org.springblade.code.service.SysIntInfoServiceI;
+import org.springblade.code.vo.pagemodel.SysIntBaseVO;
+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 lihang
+ * @date 2022-03-07
+ */
+@Service
+public class SysIntBaseServiceImpl implements SysIntBaseServiceI {
+
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private SysIntBaseDaoI sysIntBaseMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 绯荤粺闆嗘垚鐨勬帴鍙d俊鎭湇鍔�
+     */
+    @Autowired
+    private SysIntInfoServiceI sysIntInfoService;
+
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<SysIntBaseVO> gridSysIntBase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<SysIntBaseDO> doList = sysIntBaseMapper.selectByCondition(conditionMap,pageHelper);
+        DataGrid<SysIntBaseVO> dataGrid=new DataGrid<SysIntBaseVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(sysIntBaseDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(sysIntBaseMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param sysIntBaseDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<SysIntBaseVO> sysIntBaseDO2VOs(Collection<SysIntBaseDO>  sysIntBaseDOs) throws VciBaseException{
+        List<SysIntBaseVO> voList = new ArrayList<SysIntBaseVO>();
+        if(!CollectionUtils.isEmpty(sysIntBaseDOs)){
+           for(SysIntBaseDO s: sysIntBaseDOs){
+                SysIntBaseVO vo =  sysIntBaseDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  sysIntBaseDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  SysIntBaseVO sysIntBaseDO2VO(SysIntBaseDO sysIntBaseDO) throws VciBaseException{
+              SysIntBaseVO vo = new SysIntBaseVO();
+        if(sysIntBaseDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntBaseDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+     * @param sysIntBaseDTO 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public SysIntBaseVO addSave(SysIntBaseDTO sysIntBaseDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(sysIntBaseDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        //灏咲TO杞崲涓篋O
+        SysIntBaseDO sysIntBaseDO = new SysIntBaseDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntBaseDTO,sysIntBaseDO);
+        sysIntBaseMapper.insert(sysIntBaseDO);
+        return sysIntBaseDO2VO(sysIntBaseDO);
+    }
+
+    /**
+     * 淇敼绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+     * @param sysIntBaseDTO 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public SysIntBaseVO editSave(SysIntBaseDTO sysIntBaseDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(sysIntBaseDTO,"鏁版嵁瀵硅薄",sysIntBaseDTO.getOid(),"绯荤粺闆嗘垚鐨勭郴缁熶俊鎭富閿�");
+         //灏咲TO杞崲涓篋O
+         SysIntBaseDO sysIntBaseDO = selectByOid(sysIntBaseDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(sysIntBaseDTO,sysIntBaseDO);
+         sysIntBaseMapper.updateByPrimaryKey(sysIntBaseDO);
+         return sysIntBaseDO2VO(sysIntBaseDO);
+     }
+
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param sysIntBaseDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param sysIntBaseDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(SysIntBaseDTO sysIntBaseDTO, SysIntBaseDO sysIntBaseDO) {
+            SysIntBaseDO tsDO = new SysIntBaseDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntBaseDTO,tsDO);
+        //boService.checkTs(tsDO);
+        if(!checkIsLinked(sysIntBaseDO.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{
+        return !sysIntInfoService.isAlreadyUse(oid,null);
+    }
+
+    /**
+     * 鍒犻櫎绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+     * @param sysIntBaseDTO 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteSysIntBase(SysIntBaseDTO sysIntBaseDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(sysIntBaseDTO,"绯荤粺闆嗘垚鐨勭郴缁熶俊鎭暟鎹璞�",sysIntBaseDTO.getOid(),"绯荤粺闆嗘垚鐨勭郴缁熶俊鎭殑涓婚敭");
+        SysIntBaseDO sysIntBaseDO = selectByOid(sysIntBaseDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(sysIntBaseDTO,sysIntBaseDO);
+        if(baseResult.isSuccess()) {
+
+        }else{
+            return baseResult;
+        }
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = sysIntBaseMapper.deleteByPrimaryKey(sysIntBaseDO.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  SysIntBaseVO getObjectByOid(String oid) throws VciBaseException{
+        return sysIntBaseDO2VO(selectByOid(oid));
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private SysIntBaseDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntBaseDO sysIntBaseDO = sysIntBaseMapper.selectByPrimaryKey(oid.trim());
+        if(sysIntBaseDO == null || StringUtils.isBlank(sysIntBaseDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return sysIntBaseDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇绯荤粺闆嗘垚鐨勭郴缁熶俊鎭�
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞�
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<SysIntBaseVO> listSysIntBaseByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<SysIntBaseDO> sysIntBaseDOList = listSysIntBaseDOByOidCollections(oidCollections);
+        return sysIntBaseDO2VOs(sysIntBaseDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<SysIntBaseDO> listSysIntBaseDOByOidCollections(Collection<String> oidCollections){
+        List<SysIntBaseDO> sysIntBaseDOList = new ArrayList<SysIntBaseDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<SysIntBaseDO> tempDOList =  sysIntBaseMapper.selectByPrimaryKeyCollection(oids);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                        sysIntBaseDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  sysIntBaseDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収绯荤粺闆嗘垚鐨勭郴缁熶俊鎭垪琛�
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 绯荤粺闆嗘垚鐨勭郴缁熶俊鎭樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<SysIntBaseVO> refDataGridSysIntBase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridSysIntBase(conditionMap,pageHelper);
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntInfoServiceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntInfoServiceImpl.java
new file mode 100644
index 0000000..3b250e1
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/SysIntInfoServiceImpl.java
@@ -0,0 +1,1091 @@
+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.frameworkcore.constant.FrameWorkDefaultValueConstant;
+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.pagemodel.TreeQueryObject;
+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.redis.RedisService;
+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.springblade.code.bo.CodeTemplateAttrSqlBO;
+import org.springblade.code.constant.MdmBtmTypeConstant;
+import org.springblade.code.dao.*;
+import org.springblade.code.dto.SysIntHeaderDTO;
+import org.springblade.code.dto.SysIntInfoDTO;
+import org.springblade.code.dto.SysIntParamDTO;
+import org.springblade.code.dto.UpdateSysInfoStatusDTO;
+import org.springblade.code.dto.datapush.classify.JsonRootDataDTO;
+import org.springblade.code.dto.datapush.classify.NodeClassifyDTO;
+import org.springblade.code.dto.datapush.classify.NodeDataDTO;
+import org.springblade.code.dto.datapush.classify.NodeLibraryDTO;
+import org.springblade.code.dto.datapush.result.ResultJsonDTO;
+import org.springblade.code.dto.datapush.result.ResultNodeDataDTO;
+import org.springblade.code.dto.datapush.result.ResultNodeObjectDTO;
+import org.springblade.code.enumpack.SysIntegrationAuthorityTypeEnum;
+import org.springblade.code.enumpack.SysIntegrationRequestTypeEnum;
+import org.springblade.code.enumpack.sysIntegrationPushTypeEnum;
+import org.springblade.code.model.*;
+import org.springblade.code.service.CodeClassifyServiceI;
+import org.springblade.code.service.MdmEngineServiceI;
+import org.springblade.code.service.SysIntBaseServiceI;
+import org.springblade.code.service.SysIntInfoServiceI;
+import org.springblade.code.utils.HttpUtils;
+import org.springblade.code.utils.WsErpClientUtil;
+import org.springblade.code.vo.pagemodel.*;
+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.frameworkcore.constant.FrameWorkLangCodeConstant.*;
+import static org.springblade.code.constant.MdmDuckingConstant.*;
+import static org.springblade.code.constant.MdmEngineConstant.CODE_CLASSIFY_OID_FIELD;
+
+
+/**
+ * 绯荤粺闆嗘垚鍩虹淇℃伅鏈嶅姟
+ * @author lihang
+ * @date 2022-03-07
+ */
+@Service
+public class SysIntInfoServiceImpl implements SysIntInfoServiceI {
+
+    @Value("${dataSyncPush.dataParamName:xmlData}")
+    public String DATA_PARAM_NAME;
+    /**
+    * 鏃ュ織
+    */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+    * 鏁版嵁鎿嶄綔灞�
+    */
+    @Resource
+    private SysIntInfoDaoI sysIntInfoMapper;
+
+    /**
+    * 涓氬姟绫诲瀷鎿嶄綔鐨勬湇鍔�
+    */
+    @Autowired
+    private WebBoServiceI boService;
+
+    /**
+    * 瀵硅薄鐨勬搷浣�
+    */
+    @Autowired
+    private RevisionModelUtil revisionModelUtil;
+
+    /**
+     * 绯荤粺闆嗘垚涓殑绯荤粺淇℃伅鏈嶅姟
+     */
+    @Autowired
+    private SysIntBaseServiceI sysIntBaseService;
+
+    /**
+     * 鎺ュ彛鍙傛暟
+     */
+    @Autowired
+    private SysIntParamDaoI sysIntParamDaoI;
+
+    /**
+     * 鎺ュ彛楠岃瘉淇℃伅
+     */
+    @Autowired
+    private SysIntHeaderDaoI sysIntHeaderDaoI;
+
+    /**
+     * 鍒嗙被涓氬姟绫诲瀷鎿嶄綔鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyServiceI codeClassifyServiceI;
+    /**
+     * 缂撳瓨鏈嶅姟
+     */
+    @Autowired
+    private RedisService redisService;
+    /**
+     * 闆嗘垚鏃ュ織鏁版嵁鎿嶄綔灞�
+     */
+    @Resource
+    private DockingLogeDaoI dockingLogeDaoI;
+    @Resource
+    private DockingTaskDaoI dockingTaskDaoI;
+    /**
+     * 鏁版嵁鏈嶅姟
+     */
+    @Autowired(required = false)
+    @Lazy
+    private MdmEngineServiceI mdmEngineServiceI;
+
+    /**
+     * 鏌ヨ鎵�鏈夌殑绯荤粺闆嗘垚鍩虹淇℃伅
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<SysIntInfoVO> gridSysIntInfo(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if (pageHelper == null) {
+            pageHelper = new PageHelper(-1);
+        }
+        pageHelper.addDefaultDesc("createTime");
+        List<SysIntInfoDO> doList = sysIntInfoMapper.selectByCondition(conditionMap,pageHelper);
+//        Set<String> targetIdList = doList.stream().map(SysIntInfoDO::getTargetSystemOid).collect(Collectors.toSet());
+//        Set<String> sourceIdList = doList.stream().map(SysIntInfoDO::getSourceSystemOid).collect(Collectors.toSet());
+//        List<String> oidList = new ArrayList<>();
+//        oidList.addAll(targetIdList);
+//        oidList.addAll(sourceIdList);
+//        if (!CollectionUtils.isEmpty(oidList)) {
+//            List<SysIntBaseVO> sysIntBaseVOList = (List<SysIntBaseVO>) sysIntBaseService.listSysIntBaseByOids(oidList);
+//            matchSysOid2BuildInfoDO(doList, sysIntBaseVOList);
+//        }
+        DataGrid<SysIntInfoVO> dataGrid=new DataGrid<SysIntInfoVO>();
+        if (!CollectionUtils.isEmpty(doList)) {
+            dataGrid.setData(sysIntInfoDO2VOs(doList));
+            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(sysIntInfoMapper.countByCondition(conditionMap))));
+        }
+        return dataGrid;
+    }
+
+    /**
+     * 鏍规嵁BaseVO闆嗗悎涓殑oid瀵笽nfoDO鐨勭洰鏍囩郴缁熶富閿�佹潵婧愮郴缁熶富閿繘琛屽尮閰嶏紝缁勮绯荤粺鍚嶇О鍜岀郴缁熸爣璇�
+     * @param doList 绯荤粺闆嗘垚鍩虹淇℃伅瀵硅薄闆嗗悎
+     * @param sysIntBaseVOList 绯荤粺闆嗘垚绯荤粺淇℃伅闆嗗悎
+     */
+    private void matchSysOid2BuildInfoDO(List<SysIntInfoDO> doList, List<SysIntBaseVO> sysIntBaseVOList) {
+        doList.forEach(info -> {
+            sysIntBaseVOList.stream().filter(vo -> {
+                return info.getTargetSystemOid().equals(vo.getOid());
+            }).forEach(base -> {
+                info.setTargetSysId(base.getId());
+                info.setTargetSysName(base.getName());
+            });
+            sysIntBaseVOList.stream().filter(vo -> {
+                return info.getSourceSystemOid().equals(vo.getOid());
+            }).forEach(base -> {
+                info.setSourceSysId(base.getId());
+                info.setSourceSysName(base.getName());
+                info.setAuthorityTypeText(SysIntegrationAuthorityTypeEnum.getTextByValue(info.getAuthorityType()));
+            });
+        });
+    }
+    @Override
+    public List<SysIntInfoDO> selectAll(Map conditonMap){
+        return sysIntInfoMapper.selectAll(conditonMap);
+    }
+
+    /**
+     * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param sysIntInfoDOs 鏁版嵁瀵硅薄鍒楄〃
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public List<SysIntInfoVO> sysIntInfoDO2VOs(Collection<SysIntInfoDO>  sysIntInfoDOs) throws VciBaseException{
+        List<SysIntInfoVO> voList = new ArrayList<SysIntInfoVO>();
+        if(!CollectionUtils.isEmpty(sysIntInfoDOs)){
+           for(SysIntInfoDO s: sysIntInfoDOs){
+                SysIntInfoVO vo =  sysIntInfoDO2VO(s);
+                if(vo != null){
+                    voList.add(vo);
+                }
+            }
+        }
+        return voList;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+     * @param  sysIntInfoDO 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public  SysIntInfoVO sysIntInfoDO2VO(SysIntInfoDO sysIntInfoDO) throws VciBaseException{
+              SysIntInfoVO vo = new SysIntInfoVO();
+        if(sysIntInfoDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntInfoDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            vo.setPushTypeText(sysIntegrationPushTypeEnum.getTextByValue(vo.getPushType()));
+
+        }
+        return vo;
+    }
+
+    /**
+     * 澧炲姞绯荤粺闆嗘垚鍩虹淇℃伅
+     * @param sysIntInfoDTO 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    @Override
+    public SysIntInfoVO addSave(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(sysIntInfoDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+        checkColumnNotNull(sysIntInfoDTO);
+        String sourcesystemoid = sysIntInfoDTO.getSourcesystemoid();
+        SysIntBaseVO sysIntBaseVO = sysIntBaseService.getObjectByOid(sourcesystemoid);
+        sysIntInfoDTO.setSysbaseoid(sourcesystemoid);
+        sysIntInfoDTO.setSysbaseid(sysIntBaseVO.getId());
+        sysIntInfoDTO.setSysbasename(sysIntBaseVO.getName());
+        sysIntInfoDTO.setUsedflag("true");//璁剧疆榛樿鍚敤鐘舵��
+
+        //灏咲TO杞崲涓篋O
+        SysIntInfoDO sysIntInfoDO = new SysIntInfoDO();
+        BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntInfoDTO,sysIntInfoDO);
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+
+        BatchCBO batchCBO_update = new BatchCBO();
+        BatchCBO sysIntInfoBo=  sysIntInfoMapper.insert(sysIntInfoDO);
+
+        List<SysIntParamDTO> sysIntParamDTOS=  sysIntInfoDTO.getSysIntParamDTOs();
+        List<SysIntParamDO> sysIntParamDOS=new ArrayList<>();
+        if(!CollectionUtils.isEmpty(sysIntParamDTOS)) {
+            sysIntParamDTOS.stream().forEach(sysIntParamDTO -> {
+                SysIntParamDO sysIntParamDO = new SysIntParamDO();
+                sysIntParamDTO.setInfoOid(sysIntInfoDO.getOid());
+                BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntParamDTO, sysIntParamDO);
+                sysIntParamDOS.add(sysIntParamDO);
+            });
+        }
+        List<SysIntHeaderDTO> sysIntHeaderDTOs= sysIntInfoDTO.getSysIntHeaderDTOS();
+        List<SysIntHeaderDO> sysIntHeaderDOS = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(sysIntHeaderDTOs)) {
+            sysIntHeaderDTOs.stream().forEach(sysIntHeaderDTO -> {
+                SysIntHeaderDO sysIntHeaderDO = new SysIntHeaderDO();
+                sysIntHeaderDTO.setInfoOid(sysIntInfoDO.getOid());
+                BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntHeaderDTO, sysIntHeaderDO);
+                sysIntHeaderDOS.add(sysIntHeaderDO);
+            });
+        }
+
+        batchCBO_update.copyFromOther(sysIntInfoBo);
+        //鎵归噺澶勭悊淇濆瓨header瀵硅薄
+        if(!CollectionUtils.isEmpty(sysIntHeaderDOS)) {
+            BatchCBO sysIntHeaderBO = sysIntHeaderDaoI.batchInsert(sysIntHeaderDOS);
+            batchCBO_update.copyFromOther(sysIntHeaderBO);
+        }
+        //鎵归噺澶勭悊淇濆瓨Param瀵硅薄
+        if(!CollectionUtils.isEmpty(sysIntParamDOS)) {
+            BatchCBO sysIntParamBO = sysIntParamDaoI.batchInsert(sysIntParamDOS);
+            batchCBO_update.copyFromOther(sysIntParamBO);
+        }
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO_update);//涓�璧锋墽琛屼繚瀛�
+
+        return sysIntInfoDO2VO(sysIntInfoDO,sysIntHeaderDOS,sysIntParamDOS);
+    }
+
+    /**
+     *
+     * @param sysIntInfoDO
+     * @param sysIntHeaderDOS
+     * @param sysIntParamDOS
+     * @return
+     */
+    private SysIntInfoVO sysIntInfoDO2VO(SysIntInfoDO sysIntInfoDO, List<SysIntHeaderDO> sysIntHeaderDOS, List<SysIntParamDO> sysIntParamDOS) {
+        SysIntInfoVO vo = new SysIntInfoVO();
+        if(sysIntInfoDO != null){
+            BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntInfoDO,vo);
+            //濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+            List<SysIntParamVO> sysIntParamVOs=new ArrayList<>();
+            if(!CollectionUtils.isEmpty(sysIntParamDOS)){
+                sysIntParamDOS.stream().forEach(sysIntParamDO -> {
+                    SysIntParamVO sysIntParamVO=new SysIntParamVO();
+                    BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntParamDO,sysIntParamVO);
+                    sysIntParamVOs.add(sysIntParamVO);
+                });
+                vo.setSysIntParamVOs(sysIntParamVOs);
+            }
+            List<SysIntHeaderVO> sysIntHeaderVOs=new ArrayList<>();
+            if(!CollectionUtils.isEmpty(sysIntHeaderDOS)){
+                sysIntHeaderDOS.stream().forEach(sysIntHeaderDO -> {
+                    SysIntHeaderVO sysIntHeaderVO=new SysIntHeaderVO();
+                    BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntHeaderDO,sysIntHeaderVO);
+                    sysIntHeaderVOs.add(sysIntHeaderVO);
+                });
+                vo.setSysIntHeaderVOs(sysIntHeaderVOs);
+            }
+        }
+        return vo;
+    }
+
+    /**
+     * 绯荤粺闆嗘垚鎺ュ彛鍩虹淇℃伅Null瀛楁妫�楠�
+     * @param sysIntInfoDTO 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+    private void checkColumnNotNull(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException {
+        if (SysIntegrationRequestTypeEnum.HTTP.getValue().equals(sysIntInfoDTO.getInterfacetype())){
+            VciBaseUtil.alertNotNull(sysIntInfoDTO.getRequesturl(),"HTTP鎺ュ彛鐨勮姹傚湴鍧�",sysIntInfoDTO.getRequestmethod(),"HTTP鎺ュ彛鐨勮姹傛柟寮�");
+        }
+        if (SysIntegrationRequestTypeEnum.WEB_SERVICE.getValue().equals(sysIntInfoDTO.getInterfacetype())){
+            VciBaseUtil.alertNotNull(sysIntInfoDTO.getInterfaceFunction(),"WebService鐨勬帴鍙e嚱鏁�");
+        }
+        if (SysIntegrationRequestTypeEnum.CLASSPATH.getValue().equals(sysIntInfoDTO.getInterfacetype())){
+            VciBaseUtil.alertNotNull(sysIntInfoDTO.getClassPath(),"绫昏矾寰�");
+        }
+    }
+
+    /**
+     * 淇敼绯荤粺闆嗘垚鍩虹淇℃伅
+     * @param sysIntInfoDTO 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+     */
+     @Override
+     public SysIntInfoVO editSave(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException{
+         VciBaseUtil.alertNotNull(sysIntInfoDTO,"鏁版嵁瀵硅薄",sysIntInfoDTO.getOid(),"绯荤粺闆嗘垚鍩虹淇℃伅涓婚敭");
+
+
+         String sourcesystemoid = sysIntInfoDTO.getSourcesystemoid();
+         SysIntBaseVO sysIntBaseVO = sysIntBaseService.getObjectByOid(sourcesystemoid);
+         sysIntInfoDTO.setSysbaseoid(sourcesystemoid);
+         sysIntInfoDTO.setSysbaseid(sysIntBaseVO.getId());
+         sysIntInfoDTO.setSysbasename(sysIntBaseVO.getName());
+
+         //灏咲TO杞崲涓篋O
+         SysIntInfoDO sysIntInfoDO = selectByOid(sysIntInfoDTO.getOid());
+         revisionModelUtil.copyFromDTOIgnore(sysIntInfoDTO,sysIntInfoDO);
+        String sysInfoOid=sysIntInfoDO.getOid();
+         List<SysIntParamDTO> sysIntParamDTOS=  sysIntInfoDTO.getSysIntParamDTOs();
+         List<SysIntParamDO> sysIntParamDOS=new ArrayList<>();
+         if(!CollectionUtils.isEmpty(sysIntParamDTOS)) {
+             sysIntParamDTOS.stream().forEach(sysIntParamDTO -> {
+                 SysIntParamDO sysIntParamDO = new SysIntParamDO();
+                 BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntParamDTO, sysIntParamDO);
+                 sysIntParamDOS.add(sysIntParamDO);
+             });
+         }
+         List<SysIntHeaderDTO> sysIntHeaderDTOs= sysIntInfoDTO.getSysIntHeaderDTOS();
+         List<SysIntHeaderDO> sysIntHeaderDOS = new ArrayList<>();
+         if(!CollectionUtils.isEmpty(sysIntHeaderDTOs)) {
+             sysIntHeaderDTOs.stream().forEach(sysIntHeaderDTO -> {
+                 SysIntHeaderDO sysIntHeaderDO = new SysIntHeaderDO();
+                 BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntHeaderDTO, sysIntHeaderDO);
+                 sysIntHeaderDOS.add(sysIntHeaderDO);
+             });
+         }
+         WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+         BatchCBO batchCBO_update = new BatchCBO();
+         BatchCBO sysIntInfoBo=  sysIntInfoMapper.updateByPrimaryKey(sysIntInfoDO);
+
+         batchCBO_update.copyFromOther(sysIntInfoBo);
+         //鎵归噺澶勭悊淇濆瓨header瀵硅薄
+         if(!CollectionUtils.isEmpty(sysIntHeaderDOS)) {
+             List<String> idList=new ArrayList<>();
+             List<SysIntHeaderDO> headers_old = getHeadersBySystemInfoOid(sysInfoOid);
+             for (SysIntHeaderDO sysIntHeaderDO:headers_old){
+                 sysIntHeaderDO.setUsedflag(FLAG_FAIL);
+                 idList.add(sysIntHeaderDO.getOid());
+             }
+             if(idList.size()!=0){
+                 BatchCBO sysIntHeaderDeleteBO = sysIntHeaderDaoI.batchDeleteByOids(idList);
+                 batchCBO_update.copyFromOther(sysIntHeaderDeleteBO);
+             }
+             //鍐嶆柊澧瀐eaders
+             for(SysIntHeaderDO sysIntHeaderDO:sysIntHeaderDOS){
+                 sysIntHeaderDO.setUsedflag(FLAG_TRUE);
+                 sysIntHeaderDO.setInfoOid(sysIntInfoDTO.getOid());
+
+             }
+             BatchCBO batchCBO_insert = sysIntHeaderDaoI.batchInsert(sysIntHeaderDOS);
+             batchCBO_update.copyFromOther(batchCBO_insert);
+         }
+         //鎵归噺澶勭悊淇濆瓨Param瀵硅薄
+         if(!CollectionUtils.isEmpty(sysIntParamDOS)) {
+            //鍏堝垹闄arams_old
+             List<String> idList=new ArrayList<>();
+             List<SysIntParamDO> params_old = getParamsBySystemInfoOid(sysInfoOid);
+             for (SysIntParamDO sysIntParamDO:params_old){
+                 sysIntParamDO.setUsedflag(FLAG_FAIL);
+                 idList.add(sysIntParamDO.getOid());
+             }
+             if(idList.size()!=0){
+                 BatchCBO sysIntParamDeleteBO = sysIntParamDaoI.batchDeleteByOids(idList);
+                 batchCBO_update.copyFromOther(sysIntParamDeleteBO);
+             }
+             //鍐嶆柊澧瀙arams
+             for(SysIntParamDO sysIntParamDOi:sysIntParamDOS){
+                 sysIntParamDOi.setUsedflag(FLAG_TRUE);
+                 sysIntParamDOi.setInfoOid(sysIntInfoDTO.getOid());
+             }
+             BatchCBO sysIntParamBO = sysIntParamDaoI.batchInsert(sysIntParamDOS);
+             batchCBO_update.copyFromOther(sysIntParamBO);
+         }
+         WebUtil.setPersistence(true);//涓嶆墽琛屼繚瀛�
+         boService.persistenceBatch(batchCBO_update);//涓�璧锋墽琛屼繚瀛�
+         return sysIntInfoDO2VO(sysIntInfoDO,sysIntHeaderDOS,sysIntParamDOS);
+     }
+
+    /**
+     * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+     * @param sysIntInfoDTO 鏁版嵁浼犺緭瀵硅薄
+     * @param sysIntInfoDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+     * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+     */
+    private BaseResult checkIsCanDeleteForDO(SysIntInfoDTO sysIntInfoDTO, SysIntInfoDO sysIntInfoDO) {
+            SysIntInfoDO tsDO = new SysIntInfoDO();
+            BeanUtilForVCI.copyPropertiesIgnoreCase(sysIntInfoDTO,tsDO);
+        boService.checkTs(tsDO);
+        if(!checkIsLinked(sysIntInfoDO.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 sysIntInfoDTO 绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+     */
+    @Override
+    public BaseResult deleteSysIntInfo(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException{
+        VciBaseUtil.alertNotNull(sysIntInfoDTO,"绯荤粺闆嗘垚鍩虹淇℃伅鏁版嵁瀵硅薄",sysIntInfoDTO.getOid(),"绯荤粺闆嗘垚鍩虹淇℃伅鐨勪富閿�");
+        SysIntInfoDO sysIntInfoDO = selectByOid(sysIntInfoDTO.getOid());
+        BaseResult baseResult = checkIsCanDeleteForDO(sysIntInfoDTO,sysIntInfoDO);
+        if(baseResult.isSuccess()) {
+
+                    }else{
+            return baseResult;
+        }
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO_update = new BatchCBO();
+        //鎵ц鍒犻櫎鎿嶄綔
+        BatchCBO batchCBO = sysIntInfoMapper.deleteByPrimaryKey(sysIntInfoDO.getOid());
+        batchCBO_update.copyFromOther(batchCBO);
+        List<SysIntHeaderDO> sysIntHeaderDOS=sysIntHeaderDaoI.selectBySysinfoOid(sysIntInfoDO.getOid());
+        if(!CollectionUtils.isEmpty(sysIntHeaderDOS)){
+            List<String>headerIdList=new ArrayList<>();
+            sysIntHeaderDOS.stream().forEach(sysIntHeaderDO -> {
+                headerIdList.add(sysIntHeaderDO.getOid());
+            });
+            BatchCBO  headerBO=sysIntHeaderDaoI.batchDeleteByOids(headerIdList);
+            batchCBO_update.copyFromOther(headerBO);
+        }
+        List<SysIntParamDO> sysIntParamDOS=sysIntParamDaoI.selectBySysinfoOid (sysIntInfoDO.getOid());
+        if(!CollectionUtils.isEmpty(sysIntParamDOS)){
+            List<String>paramIdList=new ArrayList<>();
+            sysIntParamDOS.stream().forEach(sysIntParamDO -> {
+                paramIdList.add(sysIntParamDO.getOid());
+            });
+            BatchCBO paramBO=  sysIntParamDaoI.batchDeleteByOids(paramIdList);
+            batchCBO_update.copyFromOther(paramBO);
+        }
+        WebUtil.setPersistence(true);
+        boService.persistenceBatch(batchCBO_update);//涓�璧锋墽琛屼繚瀛�
+        return (batchCBO_update!=null && batchCBO_update.getDeleteCbos() !=null &&batchCBO_update.getDeleteCbos().size() > 0)?BaseResult.successMsg(DELETE_SUCCESS):BaseResult.fail(DELETE_FAIL);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇绯荤粺闆嗘垚鍩虹淇℃伅
+    * @param oid 涓婚敭
+    * @return 绯荤粺闆嗘垚鍩虹淇℃伅鏄剧ず瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+    */
+    @Override
+    public  SysIntInfoVO getObjectByOid(String oid) throws VciBaseException{
+
+        SysIntInfoDO sysIntInfoDO= selectByOid(oid);
+        List<SysIntHeaderDO> sysIntHeaderDOS=sysIntHeaderDaoI.selectBySysinfoOid(oid.trim());
+        List<SysIntParamDO> sysIntParamDOS=sysIntParamDaoI.selectBySysinfoOid(oid.trim());
+        return sysIntInfoDO2VO(sysIntInfoDO,sysIntHeaderDOS,sysIntParamDOS);
+    }
+
+    /**
+    * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+    * @param oid 涓婚敭
+    * @return  鏁版嵁瀵硅薄
+    * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+    */
+    private SysIntInfoDO selectByOid(String oid) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oid,"涓婚敭");
+        SysIntInfoDO sysIntInfoDO = sysIntInfoMapper.selectByPrimaryKey(oid.trim());
+        if(sysIntInfoDO == null || StringUtils.isBlank(sysIntInfoDO.getOid())){
+            throw new VciBaseException(DATA_OID_NOT_EXIST);
+        }
+        return sysIntInfoDO;
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇绯荤粺闆嗘垚鍩虹淇℃伅
+     * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 绯荤粺闆嗘垚鍩虹淇℃伅鏄剧ず瀵硅薄
+     * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+     */
+    @Override
+    public Collection<SysIntInfoVO> listSysIntInfoByOids(Collection<String> oidCollections) throws VciBaseException{
+        VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+        List<SysIntInfoDO> sysIntInfoDOList = listSysIntInfoDOByOidCollections(oidCollections);
+        return sysIntInfoDO2VOs(sysIntInfoDOList);
+    }
+
+    /**
+    * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+    * @param oidCollections 涓婚敭鐨勯泦鍚�
+    * @return 鏁版嵁瀵硅薄鍒楄〃
+    */
+    private List<SysIntInfoDO> listSysIntInfoDOByOidCollections(Collection<String> oidCollections){
+        List<SysIntInfoDO> sysIntInfoDOList = new ArrayList<SysIntInfoDO>();
+        if(!CollectionUtils.isEmpty(oidCollections)){
+            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+            for(Collection<String> oids: oidCollectionsList){
+                List<SysIntInfoDO> tempDOList =  sysIntInfoMapper.selectByPrimaryKeyCollection(oids);
+                Set<String> oidSet = tempDOList.stream().map(SysIntInfoDO::getTargetSystemOid).collect(Collectors.toSet());
+                oidSet.addAll(tempDOList.stream().map(SysIntInfoDO::getSourceSystemOid).collect(Collectors.toSet()));
+                List<SysIntBaseVO> baseVOList = (List<SysIntBaseVO>) sysIntBaseService.listSysIntBaseByOids(oidSet);
+                matchSysOid2BuildInfoDO(tempDOList,baseVOList);
+                if(!CollectionUtils.isEmpty(tempDOList)){
+                    sysIntInfoDOList.addAll(tempDOList);
+                }
+            }
+        }
+        return  sysIntInfoDOList;
+    }
+
+
+
+    /**
+     * 鍙傜収绯荤粺闆嗘垚鍩虹淇℃伅鍒楄〃
+     * @param conditionMap 鏌ヨ鏉′欢
+     * @param pageHelper 鍒嗛〉鍜屾帓搴�
+     * @return 绯荤粺闆嗘垚鍩虹淇℃伅鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public DataGrid<SysIntInfoVO> refDataGridSysIntInfo(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+        if(conditionMap == null){
+            conditionMap = new HashMap<String, String>();
+        }
+        return gridSysIntInfo(conditionMap,pageHelper);
+    }
+
+    /**
+     * 褰撳墠鎺ュ彛淇℃伅鏄惁鏈変娇鐢ㄧ洰鏍囦俊鎭�
+     * @param sysOid 绯荤粺Oid
+     * @param authorityOid 璁よ瘉鏂瑰紡Oid
+     * @return true = 鍦ㄤ娇鐢� 锛沠alse = 鏈娇鐢�
+     * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+     */
+    @Override
+    public boolean isAlreadyUse(String sysOid, String authorityOid) throws VciBaseException {
+        Map<String,String> conditionMap = new HashMap<>();
+        if (StringUtils.isNotBlank(sysOid)){
+            conditionMap.put("sourceSystemOid",sysOid);
+            Long countSource = sysIntInfoMapper.countByCondition(conditionMap);
+            if (countSource > 0){
+                return true;
+            }
+            conditionMap.clear();
+            conditionMap.put("targetSystemOid",sysOid);
+            Long countTarget = sysIntInfoMapper.countByCondition(conditionMap);
+            if (countTarget > 0){
+                return true;
+            }
+            conditionMap.clear();
+        }
+        if (StringUtils.isNotBlank(authorityOid)){
+            conditionMap.put("authorityOid",authorityOid);
+            Long countAuthority = sysIntInfoMapper.countByCondition(conditionMap);
+            if (countAuthority > 0){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    //=========浠ヤ笅绯荤粺鍙傛暟鍜岄獙璇佷俊鎭�
+
+    /**
+     * 鏍规嵁绯荤粺淇℃伅鏌ヨ鎺ュ彛param
+     * @param sysInfoOid
+     * @return
+     */
+    @Override
+    public List<SysIntParamDO> getParamsBySystemInfoOid(String sysInfoOid){
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(SysIntParamDO.class);
+        queryWrapper.addQueryMap("infoOid",sysInfoOid);
+        queryWrapper.addQueryMap("usedflag",FLAG_TRUE);
+        List<SysIntParamDO> all_params = sysIntParamDaoI.selectByWrapper(queryWrapper);
+        return all_params;
+    }
+
+    /**
+     * 1銆佸厛鍒犻櫎浠ュ墠鎵�鏈塸aram
+     * 2銆佸啀鏌ヨ浼犲叆鐨勬墍鏈塸aram
+     * @return
+     */
+    @Override
+    public BaseResult updateParams(String sysInfoOid,List<SysIntParamDO> params){
+
+        //鍏堜綔搴熸墍鏈夌殑params_old
+        List<SysIntParamDO> params_old = getParamsBySystemInfoOid(sysInfoOid);
+        for (SysIntParamDO sysIntParamDO:params_old){
+            sysIntParamDO.setUsedflag(FLAG_FAIL);
+        }
+
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+        BatchCBO batchCBO_update = new BatchCBO();
+        if(params_old.size()!=0){
+            batchCBO_update = sysIntParamDaoI.batchUpdate(params_old);
+        }
+
+        if(params!=null&&params.size()!=0) {
+            //鍐嶆柊澧瀙arams
+            for(SysIntParamDO sysIntParamDOi:params){
+                sysIntParamDOi.setUsedflag(FLAG_TRUE);
+            }
+            BatchCBO batchCBO_insert = sysIntParamDaoI.batchInsert(params);
+            batchCBO_update.copyFromOther(batchCBO_insert);
+        }
+
+        WebUtil.setPersistence(true);//鎵ц淇濆瓨
+        boService.persistenceBatch(batchCBO_update);//涓�璧锋墽琛屼繚瀛�
+        return BaseResult.success("淇濆瓨鎴愬姛!");
+    }
+
+    /**
+     * 鏍规嵁绯荤粺淇℃伅鏌ヨ鎺ュ彛header
+     * @param sysInfoOid
+     * @return
+     */
+    @Override
+    public List<SysIntHeaderDO> getHeadersBySystemInfoOid(String sysInfoOid){
+        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(SysIntHeaderDO.class);
+        queryWrapper.addQueryMap("infoOid",sysInfoOid);
+        queryWrapper.addQueryMap("usedflag",FLAG_TRUE);
+        List<SysIntHeaderDO> all_headers = sysIntHeaderDaoI.selectByWrapper(queryWrapper);
+        return all_headers;
+    }
+
+    /**
+     * 1銆佸厛鍒犻櫎浠ュ墠鎵�鏈塰eader
+     * 2銆佸啀鏌ヨ浼犲叆鐨勬墍鏈塰eader
+     * @return
+     */
+    @Override
+    public BaseResult updateHeaders(String sysInfoOid,List<SysIntHeaderDO> headers){
+        //鍏堜綔搴熸墍鏈夌殑headers_old
+        List<SysIntHeaderDO> headers_old = getHeadersBySystemInfoOid(sysInfoOid);
+        for (SysIntHeaderDO sysIntHeaderDO:headers_old){
+            sysIntHeaderDO.setUsedflag(FLAG_FAIL);
+        }
+
+        WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+        BatchCBO batchCBO_update = new BatchCBO();
+        if(headers_old.size()!=0){
+            batchCBO_update = sysIntHeaderDaoI.batchUpdate(headers_old);
+        }
+
+        if(headers!=null&&headers.size()!=0) {
+            //鍐嶆柊澧瀐eaders
+            for(SysIntHeaderDO sysIntHeaderDO:headers){
+                sysIntHeaderDO.setUsedflag(FLAG_TRUE);
+            }
+            BatchCBO batchCBO_insert = sysIntHeaderDaoI.batchInsert(headers);
+            batchCBO_update.copyFromOther(batchCBO_insert);
+        }
+
+        WebUtil.setPersistence(true);//鎵ц淇濆瓨
+        boService.persistenceBatch(batchCBO_update);//涓�璧锋墽琛屼繚瀛�
+        return BaseResult.success("淇濆瓨鎴愬姛!");
+    }
+
+    @Override
+    public List<SysIntInfoDO> getSysInfoByClassifyOid(String[] classifyOids) {
+        return null;
+    }
+
+    /***
+     *璁剧疆鏄惁鍚敤/鍋滅敤
+     * @param sysInfoStatusDTO
+     * @return
+     */
+    @Override
+    public BaseResult updateStatus(UpdateSysInfoStatusDTO sysInfoStatusDTO){
+        VciBaseUtil.alertNotNull(sysInfoStatusDTO.getOid(),"鏁版嵁瀵硅薄",sysInfoStatusDTO.getOid(),"绯荤粺闆嗘垚鍩虹淇℃伅涓婚敭");
+        SysIntInfoDO sysIntInfoDO = selectByOid(sysInfoStatusDTO.getOid());
+        try {
+            sysIntInfoDO.setTs(VciDateUtil.str2Date(sysInfoStatusDTO.getTs(), VciDateUtil.DateTimeFormat));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        if(sysInfoStatusDTO.getUpdate().equals("disable")) {
+            sysIntInfoDO.setUsedflag("false");
+        }else{
+            sysIntInfoDO.setUsedflag("true");
+        }
+        sysIntInfoMapper.updateByPrimaryKey(sysIntInfoDO);
+        return BaseResult.success();
+    }
+
+    /***
+     * 鎺ㄩ�佸垎绫�/鏁版嵁
+     * @param sysIntInfoDTO
+     * @return
+     * @throws VciBaseException
+     */
+    @Override
+    public BaseResult pushData(SysIntInfoDTO sysIntInfoDTO) throws VciBaseException {
+        VciBaseUtil.alertNotNull(sysIntInfoDTO,"鏁版嵁瀵硅薄",sysIntInfoDTO.getOid(),"绯荤粺闆嗘垚鍩虹淇℃伅涓婚敭");
+        boolean issuccess=false;
+        String type="鏁版嵁鎺ㄩ��";
+        if(sysIntInfoDTO.getPushType().equalsIgnoreCase("1")){//鎺ㄩ�佹暟鎹�
+            pushDockingTasks(sysIntInfoDTO);
+        }else if(sysIntInfoDTO.getPushType().equalsIgnoreCase("2")){//鎺ㄩ�佸垎绫�
+            issuccess= pushClsfDatas(sysIntInfoDTO);
+            type="鍒嗙被鎺ㄩ��";
+        }
+        return issuccess?BaseResult.successMsg(type+"鎴愬姛锛�"):BaseResult.successMsg(type+"澶辫触锛�");
+    }
+    private  BaseResult pushDockingTasks(SysIntInfoDTO sysIntInfoDTO) {
+        String msg="鏁版嵁鎺ㄩ�佸埌瀹氭椂浠诲姟鎴愬姛锛�";
+        try {
+            SysIntInfoVO sysIntInfoVO = getObjectByOid(sysIntInfoDTO.getOid());
+            String codeClassifyOid = sysIntInfoVO.getClassifyoid();
+            CodeClassifyTemplateVO templateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(codeClassifyOid);
+            CodeClassifyVO topClassifyVO = codeClassifyServiceI.getTopClassifyVO(codeClassifyOid);
+            String btmTypeId = topClassifyVO.getBtmtypeid();
+            if (StringUtils.isBlank(btmTypeId)) {
+                return BaseResult.fail("杩欎釜鍒嗙被鎵�灞為《灞傚垎绫绘病鏈夋坊鍔犱笟鍔$被鍨�");
+            }
+            List<CodeClassifyVO> codeClassifyIdPathVOS = codeClassifyServiceI.listChildrenClassify(topClassifyVO.getOid(), true, "id", false);
+            List<CodeClassifyVO> codeClassifynamePathVOS = codeClassifyServiceI.listChildrenClassify(topClassifyVO.getOid(), true, "name", false);
+            Map<String/**鍒嗙被oid**/, String/**鍒嗙被浠e彿閾炬帴绗�**/> clsfOidIdMap = codeClassifyIdPathVOS.stream().collect(Collectors.toMap(s -> s.getOid(), t -> reverseOrderByList(t.getPath(), topClassifyVO, 1).toLowerCase(Locale.ROOT), (o1, o2) -> o2));
+            Map<String/**鍒嗙被oid**/, String/**鍒嗙被鍚嶇О閾炬帴绗�**/> clsfOidNameMap = codeClassifynamePathVOS.stream().collect(Collectors.toMap(s -> s.getOid(), t -> reverseOrderByList(t.getPath(), topClassifyVO, 2).toLowerCase(Locale.ROOT), (o1, o2) -> o2));
+
+            PageHelper pageHelper = new PageHelper();
+            pageHelper.setPage(1);
+            pageHelper.setLimit(1000000);
+            pageHelper.setStart(0);
+            HashMap<String, String> conditionMap = new HashMap<>();
+            if (!codeClassifyServiceI.checkHasChild(codeClassifyOid)) {
+                conditionMap.put(CODE_CLASSIFY_OID_FIELD, codeClassifyOid);
+            } else {
+                conditionMap.put(CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY)
+                        + " where lcstatus='" + FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED +
+                        "' start with parentCodeClassifyOid = '" + codeClassifyOid + "' CONNECT BY PRIOR OID = parentCodeClassifyOid )");
+            }
+            conditionMap.put("islastr", "1");
+            conditionMap.put("islastv", "1");
+            List<String> lcstatusList = new ArrayList<>(Arrays.asList(new String[]{"TakeBack", "Released", "Disabled"}));
+            conditionMap.put("lcstatus", QueryOptionConstant.IN + VciBaseUtil.toInSql(lcstatusList.toArray(new String[0])));
+
+            CodeTemplateAttrSqlBO sqlBO = mdmEngineServiceI.getSqlByTemplateVO(btmTypeId, templateVO, conditionMap, pageHelper);
+            List<Map> maps = boService.queryByOnlySqlForMap(sqlBO.getSqlHasPage());
+            List<DockingTaskDO> dockingTaskDO_insert = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(maps)) {
+                maps.stream().forEach(map -> {
+                    String btmoid = map.get("oid".toUpperCase(Locale.ROOT)) == null ? "" : map.get("oid".toUpperCase(Locale.ROOT)).toString();//鏁版嵁oid
+                    String sendtype = map.get("lcstatus".toUpperCase(Locale.ROOT)) == null ? "" : map.get("lcstatus".toUpperCase(Locale.ROOT)).toString();//鏁版嵁鎺ㄩ�佺被鍨�
+                    String id = map.get("id".toUpperCase(Locale.ROOT)) == null ? "" : map.get("id".toUpperCase(Locale.ROOT)).toString();//缂栫爜
+                    String btmid = topClassifyVO.getBtmtypeid();//鏁版嵁涓氬姟绫诲瀷
+                    String classifyoid = map.get("codeclsfid".toUpperCase(Locale.ROOT)) == null ? "" : map.get("codeclsfid".toUpperCase(Locale.ROOT)).toString();//鏁版嵁鎵�鍦ㄧ殑鍒嗙被id
+                    String date2Str = VciDateUtil.date2Str(new Date(), VciDateUtil.DateTimeFormatStr);
+                    DockingTaskDO dockingTaskDO = new DockingTaskDO();
+                    dockingTaskDO.setOid(date2Str +"_"+id);
+                    dockingTaskDO.setSendflag(SEND_FLAG_FALSE);
+                    dockingTaskDO.setId(id);//缂栫爜
+                    dockingTaskDO.setUniquecode("");
+                    dockingTaskDO.setBtmoid(btmoid);//鏁版嵁oid
+                    dockingTaskDO.setBtmid(btmid);//鏁版嵁涓氬姟绫诲瀷id
+                    if (clsfOidIdMap.containsKey(classifyoid)) {
+                        String classifyid = clsfOidIdMap.get(classifyoid);
+                        dockingTaskDO.setClassifyid(classifyid);//鏁版嵁鍦ㄥ垎绫籭d
+                    }
+                    dockingTaskDO.setClassifyoid(classifyoid);//鏁版嵁鎵�鍦ㄥ垎绫籵id
+                    if (clsfOidNameMap.containsKey(classifyoid)) {
+                        String classifyname = clsfOidNameMap.get(classifyoid);
+                        dockingTaskDO.setClassifyname(classifyname);//鏁版嵁鎵�鍦ㄥ垎绫诲悕绉�
+                    }
+                    dockingTaskDO.setSendtype(sendtype);//鏁版嵁鎺ㄩ�佺被鍨�
+                    //String dataoid=redisService.getUUIDEveryDay();
+                    dockingTaskDO.setDataoid(date2Str +"_"+ btmoid);
+                    //intinfo
+                    dockingTaskDO.setSysinfooid(sysIntInfoVO.getOid());//intinfo鐨刼id
+                    dockingTaskDO.setSystemoid(sysIntInfoVO.getSysbaseoid());//绯荤粺oid
+                    dockingTaskDO.setSystemcode(sysIntInfoVO.getSysbaseid());//绯荤粺缂栫爜
+                    dockingTaskDO.setSystemname(sysIntInfoVO.getSysbasename());//绯荤粺name
+                    dockingTaskDO_insert.add(dockingTaskDO);
+                });
+            }
+            BatchCBO bo = dockingTaskDaoI.batchInsert(dockingTaskDO_insert);
+
+        }catch (Throwable e){
+            msg="鏁版嵁鎺ㄩ�佸埌瀹氭椂浠诲姟澶辫触!";
+            logger.error("鏁版嵁鎺ㄩ�佸埌瀹氭椂浠诲姟澶辫触!"+e);
+            e.printStackTrace();
+        }finally {
+            logger.info(msg);
+            return BaseResult.successMsg("鏁版嵁鎺ㄩ�佸埌瀹氭椂浠诲姟鎴愬姛锛�");
+        }
+    }
+    private String reverseOrderByList(String StringValue, CodeClassifyVO topClassifyVO,int type){
+        String[] s=StringValue.split("#");
+        StringBuffer sb=new StringBuffer();
+        List<String> list=new ArrayList<>(Arrays.asList(s));
+        Collections.reverse(list);
+        System.out.println(list.toString());
+        for (String o:list){
+            if(StringUtils.isNotBlank(o)){
+                sb.append(o).append(",");
+            }
+        }
+        sb.append(type==1?topClassifyVO.getId():topClassifyVO.getName());
+        System.out.println(sb.toString());
+
+        return sb.toString();
+    }
+    /***
+     * 鍒嗙被鎺ㄩ�侀泦鎴�
+     * @param sysIntInfoDTO
+     * @return
+     */
+    private  boolean pushClsfDatas(SysIntInfoDTO sysIntInfoDTO){
+        SysIntInfoVO sysIntInfoVO= getObjectByOid(sysIntInfoDTO.getOid());
+        String classOid= sysIntInfoVO.getClassifyoid();
+        List<CodeClassifyVO> listChildrenClassify=  codeClassifyServiceI.listChildrenClassify(classOid,true,"id",false);
+        List<NodeClassifyDTO>nodeClassifyDTOList=new ArrayList<>();
+        JsonRootDataDTO jsonRootDataDTO=new JsonRootDataDTO();
+        NodeDataDTO nodeDataDTO=new NodeDataDTO();
+        //姣忎釜task涓�涓簨鍔★紝寮�鍚�
+        WebUtil.setPersistence(false);
+        BatchCBO batchCBO = new BatchCBO();
+        boolean isSuccess=false;
+        try {
+            String sendString = "";
+            if (!CollectionUtils.isEmpty(listChildrenClassify)) {
+                listChildrenClassify.stream().forEach(codeClassifyVO -> {
+                    NodeClassifyDTO nodeClassifyDTO = new NodeClassifyDTO();
+                    nodeClassifyDTO.setClassCode(codeClassifyVO.getId());//鍒嗙被浠e彿
+                    nodeClassifyDTO.setDescription(codeClassifyVO.getDescription());//鍒嗙被鎻忚堪
+                    nodeClassifyDTO.setFullPathName(codeClassifyVO.getPath());//鍏ㄨ矾寰�
+                    nodeClassifyDTO.setLcStatus(codeClassifyVO.getLcStatus());//鐘舵��
+                    nodeClassifyDTO.setPid(codeClassifyVO.getId());//鐖秈d鑺傜偣
+                    nodeClassifyDTO.setId(codeClassifyVO.getOid());//鍒嗙被oid
+                    nodeClassifyDTO.setName(codeClassifyVO.getName());//鍒嗙被鍚嶇О
+                    nodeClassifyDTOList.add(nodeClassifyDTO);
+                });
+                NodeLibraryDTO nodeLibraryDTO = new NodeLibraryDTO();
+                nodeLibraryDTO.setClassify(nodeClassifyDTOList);
+                CodeClassifyVO rootClassify = codeClassifyServiceI.getTopClassifyVO(classOid);
+                nodeLibraryDTO.setId(rootClassify.getOid());
+                nodeLibraryDTO.setName(rootClassify.getName());
+                nodeDataDTO.setLibrary(nodeLibraryDTO);
+                jsonRootDataDTO.setData(nodeDataDTO);
+                String paramType = sysIntInfoDTO.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, batchCBO);
+                isSuccess=true;
+            }
+        }catch (Throwable e){
+            e.printStackTrace();
+            isSuccess=false;
+        }finally {
+            //姣忎竴涓猼ask涓�涓簨鐗�
+            WebUtil.setPersistence(true);
+            boService.persistenceBatch(batchCBO);
+            return true;
+        }
+    }
+    /***
+     * 璋冪敤鎺ュ彛
+     * @param sysIntInfoVO
+     * @throws Throwable
+     */
+    private void callInterface(String  sendString , SysIntInfoVO sysIntInfoVO,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<SysIntParamVO> sysIntParamVOList = sysIntInfoVO.getSysIntParamVOs();
+            //鏌ヨheader
+            List<SysIntHeaderVO> sysIntHeaderVOList =sysIntInfoVO.getSysIntHeaderVOs();
+            if(type.equals(URLTYPE_HTTP)) {
+                if (requestmethod.equals(URLTYPE_GET)) {//GET璇锋眰
+                    String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString;
+                    //鎷兼帴param
+                    for (SysIntParamVO sysIntParamVO : sysIntParamVOList) {
+                        sendurl = sendurl + "&" + sysIntParamVO.getParamkey() + "=" + sysIntParamVO.getParamvalue();
+                    }
+                    paramString = sendurl;
+                    backString = HttpUtils.get(sendurl);
+                } else if (requestmethod.equals(URLTYPE_POST)) {//POST璇锋眰
+                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+                    if(!CollectionUtils.isEmpty(sysIntParamVOList)) {
+                        for (SysIntParamVO sysIntParamVO : sysIntParamVOList) {
+                            params.add(sysIntParamVO.getParamkey(), sysIntParamVO.getParamvalue());
+                        }
+                    }
+                    params.add(DATA_PARAM_NAME,sendString);
+                    paramString = params.toString();
+                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+                    if(!CollectionUtils.isEmpty(sysIntHeaderVOList)) {
+                        for (SysIntHeaderVO sysIntHeaderVO : sysIntHeaderVOList) {
+                            headers.add(sysIntHeaderVO.getHeaderkey(), sysIntHeaderVO.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 (SysIntParamVO sysIntParamVO : sysIntParamVOList) {
+                    params.add(sysIntParamVO.getParamkey(), sysIntParamVO.getParamvalue());
+                }
+                paramString = sendString;
+                MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+                for (SysIntHeaderVO sysIntHeaderVO : sysIntHeaderVOList) {
+                    headers.add(sysIntHeaderVO.getHeaderkey(), sysIntHeaderVO.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.getClassifyid());
+            resultNodeObjectDTO.setOid(sysIntInfoVO.getClassifyoid());
+            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(sysIntInfoVO.getSysbaseid());
+                dockingLogeDO.setSystemname(sysIntInfoVO.getSysbasename());
+                dockingLogeDO.setSystemoid(sysIntInfoVO.getSysbaseoid());
+                dockingLogeDO.setClassifyoid(sysIntInfoVO.getClassifyoid());
+                dockingLogeDO.setClassifyid(sysIntInfoVO.getClassifyid());
+                dockingLogeDO.setClassifyname(sysIntInfoVO.getClassifyname());
+                dockingLogeDO.setId(sysIntInfoVO.getId());
+                dockingLogeDO.setUniquecode("");
+                dockingLogeDO.setInterfacestatus(isSend?"true":"false");
+                dockingLogeDO.setParamstring(paramString);
+                dockingLogeDO.setType(DATA_LOGE_OUT);
+                dockingLogeDO.setReturnstring(backString);
+                dockingLogeDO.setMsg(msg);
+                logger.info("闆嗘垚鎺ㄩ�佹暟鎹�,systemcode:"+sysIntInfoVO.getSysbaseid()+",systemname:"+sysIntInfoVO.getSysbasename()+",url:"+url+",param:"+paramString+",e:"+msg);
+                BatchCBO dockingLogeDOBo = dockingLogeDaoI.insert(dockingLogeDO);
+                batchCBO.copyFromOther(dockingLogeDOBo);
+            }
+        }
+    }
+
+    private void initData(String rootClassOid , Map<String,String> clsfOidIdMap,Map<String,String> clsfOidNameMap){
+        TreeQueryObject treeQueryObject=new TreeQueryObject();
+        treeQueryObject.setParentOid(rootClassOid);
+        treeQueryObject.setQueryAllLevel(true);
+        List<CodeClassifyDO>  codeClassifyDOList=codeClassifyServiceI.selectCodeClassifyDOByTree(treeQueryObject);
+        if(!CollectionUtils.isEmpty(codeClassifyDOList)){
+            codeClassifyDOList.stream().forEach(codeClassify->{
+                String id=codeClassify.getId();
+                String name=codeClassify.getName();
+            });
+
+        }
+    }
+}
+
diff --git a/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/UniversalInterfaceImpl.java b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/UniversalInterfaceImpl.java
new file mode 100644
index 0000000..5bd4fb8
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/java/org/springblade/code/service/impl/UniversalInterfaceImpl.java
@@ -0,0 +1,913 @@
+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.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.pagemodel.SessionInfo;
+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.VciQueryWrapperForDO;
+import com.vci.web.pageModel.BatchCBO;
+import com.vci.web.redis.RedisService;
+import com.vci.web.service.WebBoServiceI;
+import com.vci.webservice.annotation.VciWebservice;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.code.bo.CodeClassifyFullInfoBO;
+import org.springblade.code.constant.MdmDuckingConstant;
+import org.springblade.code.dao.DockingLogeDaoI;
+import org.springblade.code.dto.CodeOrderDTO;
+import org.springblade.code.dto.CodeOrderSecDTO;
+import org.springblade.code.enumpack.CodeSecTypeEnum;
+import org.springblade.code.model.CodeClassifyDO;
+import org.springblade.code.model.DockingLogeDO;
+import org.springblade.code.service.CodeClassifyServiceI;
+import org.springblade.code.service.MdmEngineServiceI;
+import org.springblade.code.service.MdmIOServiceI;
+import org.springblade.code.service.UniversalInterfaceI;
+import org.springblade.code.utils.AttributeMapConfig;
+import org.springblade.code.utils.gennerAttrMapUtil;
+import org.springblade.code.vo.pagemodel.*;
+import org.springblade.code.vo.universalInter.apply.*;
+import org.springblade.code.vo.universalInter.attrmap.ClsfAttrMappingDO;
+import org.springblade.code.vo.universalInter.attrmap.LibraryClsfDO;
+import org.springblade.code.vo.universalInter.attrmap.LibraryDO;
+import org.springblade.code.vo.universalInter.attrmap.RowDatas;
+import org.springblade.code.vo.universalInter.classify.*;
+import org.springblade.code.vo.universalInter.data.*;
+import org.springblade.code.vo.universalInter.result.json.*;
+import org.springblade.code.vo.universalInter.result.xml.XMLResultClassfyVO;
+import org.springblade.code.vo.universalInter.result.xml.XMLResultDataObjectDetailDO;
+import org.springblade.code.vo.universalInter.result.xml.XMLResultSystemVO;
+import org.springframework.beans.factory.annotation.Autowired;
+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 org.springblade.code.constant.MdmEngineConstant.DEFAULT_SYNC_ATTR_LIST;
+
+
+/***
+ * 缁熶竴鎺ュ彛
+ */
+@VciWebservice(path = "/universalInterface")
+public class UniversalInterfaceImpl implements UniversalInterfaceI {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private AttributeMapConfig attributeMapConfig;
+    /**
+     * 缂撳瓨鏈嶅姟
+     */
+    @Autowired
+    private RedisService redisService;
+    /**
+     * 涓婚搴撳垎绫荤殑鏈嶅姟
+     */
+    @Autowired
+    private CodeClassifyServiceI classifyService;
+    /**
+     * 涓绘暟鎹紩鎿庣殑鏈嶅姟
+     */
+    @Autowired
+    private MdmEngineServiceI engineService;
+
+    /**
+     * 闆嗘垚鎺ュ彛鏃ュ織鏈嶅姟鐨勯厤缃�
+     */
+    @Resource
+    private DockingLogeDaoI dockingLogeDao;
+    /**
+     * 瀵嗙骇鐨勬湇鍔�
+     */
+
+    @Autowired
+    private MdmIOServiceI mdmIOService;
+    /**
+     * 鏁版嵁鐨勬湇鍔�
+     */
+    @Autowired
+    private WebBoServiceI boService;
+
+    private  static String separator="##VCI##";
+    private  String errorid="0";
+    private String msg="鎴愬姛";
+    private  String objerrorCode="0";
+    private String objerrorMsg="鎴愬姛";
+
+    @Override
+    public String applyCode(String data, String dataType) throws Throwable {
+        String resultStr = "";
+        String errorid="0";
+        msg="鎴愬姛";
+        objerrorCode="0";
+        objerrorMsg="鎴愬姛";
+        logger.info("鐢宠缂栫爜鐨勬暟鎹弬鏁�:->"+data);
+        logger.info("鐢宠缂栫爜鐨勬暟鎹被鍨�:->"+dataType);
+        String systemId="";
+        List<XMLResultClassfyVO> resultClassfyVOList = new ArrayList<>();
+        try {
+            if(StringUtils.isBlank(data)) {
+                errorid="101";
+                throw new Throwable("鎺ュ彛鍙傛暟锛氫紶閫掍负绌�");
+            }
+            InterParameterVO interParameterVO  =new InterParameterVO();
+            //濡傛灉dataType鏄痻ml鍒欙紝閫氳繃xml搴忓垪鍖栨垚瀵硅薄褰㈠紡锛屽鏋滄槸json鍒欓�氳繃json杞崲鎴愬璞℃牸寮�
+            try {
+                if ("xml".equals(dataType)) {
+                    XStream xStream = new XStream(new DomDriver());
+                    xStream.processAnnotations(RootDataVO.class);
+                    xStream.autodetectAnnotations(true);
+                    RootDataVO rootDataVO = (RootDataVO) xStream.fromXML(data);
+                    interParameterVO.setData(rootDataVO);
+                } else {
+                    interParameterVO = JSONObject.toJavaObject(JSONObject.parseObject(data), InterParameterVO.class);
+                }
+            }catch (Throwable e){
+                errorid="101";
+                throw new Throwable("鎺ュ彛鍙傛暟锛氫紶鍏ユ暟鎹弬鏁拌В鏋愬け璐�");
+            }
+            ClassfysVO classfysVO = interParameterVO.getData().getClassifys();
+            systemId = interParameterVO.getData().getSystemId();
+            UserVO userVo = interParameterVO.getData().getUser();
+            List<ClassfyVO> classVOList = classfysVO.getClassify();
+            InterParameterVO finalInterParameterVO = interParameterVO;
+
+            //杩欐槸璐﹀彿淇℃伅
+            SessionInfo sessionInfo = new SessionInfo();
+            sessionInfo.setUserId(userVo.getUserName());
+            sessionInfo.setUserName(userVo.getTrueName());
+            sessionInfo.setIp(userVo.getIp());
+            VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+
+            String finalSystemId = systemId;
+            classVOList.stream().forEach(classVO -> {
+                logger.info("鍙傛暟锛氬垎绫籆Ode:" + classVO.getClassCode());
+                LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs = new LinkedList<>();
+                //鑾峰彇鍒嗙被淇℃伅
+                try {
+                    String libray = classVO.getLibrary();
+                    CodeClassifyVO codeClassifyVO = getClassfy(classVO);
+                    logger.info("end锛氬垎绫绘煡璇㈠畬姣�");
+                    //鑾峰彇鍒嗙被妯℃澘淇℃伅
+                    if(codeClassifyVO==null || StringUtils.isBlank(codeClassifyVO.getOid())){
+                        objerrorCode="100";
+                        throw  new  Throwable ("鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙栧埌鍒嗙被淇℃伅");
+                    }
+                    CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
+                    if(templateVO==null||StringUtils.isBlank(templateVO.getOid())){
+                        objerrorCode="1";
+                        throw  new  Throwable ("鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙朚DM绯荤粺涓搴旀ā鏉�");
+                    }
+                    logger.info("end锛氭ā鏉挎煡璇㈠畬姣�");
+                    ApplyDatasVO applyDatasVO = classVO.getObjects();
+                    org.springblade.code.vo.universalInter.attrmap.DataObjectVO dataObjectVO = new org.springblade.code.vo.universalInter.attrmap.DataObjectVO();
+                    List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag())
+                    ).collect(Collectors.toList());
+                    this.getConfigDatas(finalSystemId, libray, applyDatasVO, attrVOS, dataObjectVO);
+                    logger.info("end锛氭暟鎹粍缁囧畬姣�");
+                    //瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇
+                    CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyVO.getOid());
+                    if(classifyFullInfo==null ||classifyFullInfo.getCurrentClassifyVO()==null || StringUtils.isBlank(classifyFullInfo.getCurrentClassifyVO().getOid())){
+                        objerrorCode="1";
+                        logger.info("classifyFullInfo:"+"鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙栧垎绫荤浉鍏充俊鎭�");
+                        throw  new  Throwable ("鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙栧垎绫荤浉鍏充俊鎭�");
+                    }
+                    CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
+                    if(ruleVO==null||StringUtils.isBlank(ruleVO.getOid())){
+                        objerrorCode="102";
+                        throw  new  Throwable ("鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙朚DM绯荤粺涓搴旇鍒�");
+                    }
+                    logger.info("end锛氳鍒欒幏鍙栧畬姣�");
+                    List<CodeOrderSecDTO> codeOrderSecDTOList = getRuleCodeOrderSecDTOs(classVO.getSections().getSection(), ruleVO);
+                    logger.info("end锛氱爜娈佃幏鍙栧畬姣�");
+                    CodeOrderDTO orderDTO = new CodeOrderDTO();
+                    orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//鍒嗙被涓婚敭
+                    orderDTO.setSecDTOList(codeOrderSecDTOList);//鍒嗙被鐮佹
+                    mdmIOService.batchSyncApplyCode(orderDTO, dataObjectVO, resultDataObjectDetailDOs);
+                    logger.info("end锛氱敵璇疯幏鍙栧畬姣�");
+                } catch (Throwable e) {
+                    XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                    xmlResultDataObjectDetailDO.setCode("");
+                    xmlResultDataObjectDetailDO.setId("");
+                    xmlResultDataObjectDetailDO.setErrorid(objerrorCode);
+                    xmlResultDataObjectDetailDO.setMsg("缂栫爜鐢宠澶辫触:"+e.getMessage());
+                    resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
+                    e.printStackTrace();
+                }finally {
+                    XMLResultClassfyVO resultClassfyVO = new XMLResultClassfyVO();
+                    resultClassfyVO.setClassCode(classVO.getClassCode());
+                    resultClassfyVO.setLibrary(classVO.getLibrary());
+                    resultClassfyVO.setFullclsfNamePath(classVO.getFullclsfNamePath());
+                    resultClassfyVO.setObjects(resultDataObjectDetailDOs);
+                    resultClassfyVOList.add(resultClassfyVO);
+                }
+            });
+            XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO();
+            xmlResultSystemVO.setClassifys(resultClassfyVOList);
+            xmlResultSystemVO.setMsg(msg);
+            xmlResultSystemVO.setErrorid(errorid);
+            resultStr= transferResultXMl(xmlResultSystemVO,dataType);
+        }catch (Throwable e){
+            e.printStackTrace();;
+            msg="鐢宠缂栫爜澶辫触:"+e.getMessage();
+          /*  XMLResultSystemVO XMLResultSystemVO=new XMLResultSystemVO();
+            XMLResultSystemVO.setErrorid(errorid);
+            XMLResultSystemVO.setMsg("鐢宠缂栫爜澶辫触锛�->"+e.getMessage());
+            XMLResultSystemVO.setClassifys(resultClassfyVOList);
+            resultStr=transferResultXMl(XMLResultSystemVO,dataType);
+
+            logger.error("鐢宠缂栫爜澶辫触锛�->"+e);
+            return resultStr;*/
+        }finally {
+            XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO();
+            xmlResultSystemVO.setClassifys(resultClassfyVOList);
+            xmlResultSystemVO.setMsg(msg);
+            xmlResultSystemVO.setErrorid(errorid);
+            resultStr= transferResultXMl(xmlResultSystemVO,dataType);
+            final boolean[] issucess = {true};
+            if(!errorid.equals("0")) {
+                issucess[0] = false;
+            }else {
+                if(!CollectionUtils.isEmpty(resultClassfyVOList)) {
+                    resultClassfyVOList.stream().forEach(xMLResultClassfyVO -> {
+                        xMLResultClassfyVO.getObjects().stream().forEach(objec -> {
+                            if (!(objec.getErrorid().equals("0") || objec.getErrorid().equals("204"))) {
+                                issucess[0] = false;
+                                msg=objec.getMsg();
+                            }
+                        });
+                    });
+                }
+
+            }
+            try {
+                //璁板綍鏃ュ織
+                this.saveLogs(systemId, systemId, data, resultStr, issucess[0], msg, "applyCode");
+            }catch (Throwable e){
+                e.printStackTrace();
+            }
+        }
+        logger.info("杩斿洖鍙傛暟:"+resultStr);
+
+        return resultStr;
+    }
+
+    /***
+     * 闆嗘垚鏇存柊鎺ュ彛
+     * @param data 锛氭暟鎹俊鎭弬鏁帮細鏍规嵁datatype瀹氫箟鍏舵牸寮弜ml/json
+     * @param dataType 纭畾灞炴�т俊鎭弬鏁颁紶杈撴牸寮�
+     * @return
+     * @throws Throwable
+     */
+    @Override
+    public String syncEditData(String data, String dataType) throws Throwable {
+        String resultStr = "";
+        String errorid="0";
+        msg="鎴愬姛";
+        String systemId="";
+        objerrorCode="0";
+        objerrorMsg="鎴愬姛";
+        logger.info("鏇存敼缂栫爜鐨勬暟鎹弬鏁�:->"+data);
+        logger.info("鏇存敼缂栫爜鐨勬暟鎹被鍨�:->"+dataType);
+        List<XMLResultClassfyVO> resultClassfyVOList = new ArrayList<>();
+        try {
+            if (StringUtils.isBlank(data)) {
+                errorid = "101";
+                throw new Throwable("鎺ュ彛鍙傛暟锛氫紶閫掍负绌�");
+            }
+            InterParameterVO interParameterVO = new InterParameterVO();
+            //濡傛灉dataType鏄痻ml鍒欙紝閫氳繃xml搴忓垪鍖栨垚瀵硅薄褰㈠紡锛屽鏋滄槸json鍒欓�氳繃json杞崲鎴愬璞℃牸寮�
+            try {
+                if ("xml".equals(dataType)) {
+                    XStream xStream = new XStream(new DomDriver());
+                    xStream.processAnnotations(RootDataVO.class);
+                    xStream.autodetectAnnotations(true);
+                    RootDataVO rootDataVO = (RootDataVO) xStream.fromXML(data);
+                    interParameterVO.setData(rootDataVO);
+                } else {
+                    interParameterVO = JSONObject.toJavaObject(JSONObject.parseObject(data), InterParameterVO.class);
+                }
+            } catch (Throwable e) {
+                errorid = "101";
+                throw new Throwable("鎺ュ彛鍙傛暟锛氫紶鍏ユ暟鎹弬鏁拌В鏋愬け璐�");
+
+            }
+            ClassfysVO classfysVO = interParameterVO.getData().getClassifys();
+            systemId = interParameterVO.getData().getSystemId();
+            UserVO userVo = interParameterVO.getData().getUser();
+            List<ClassfyVO> classVOList = classfysVO.getClassify();
+            InterParameterVO finalInterParameterVO = interParameterVO;
+            //杩欐槸璐﹀彿淇℃伅
+            SessionInfo sessionInfo = new SessionInfo();
+            sessionInfo.setUserId(userVo.getUserName());
+            sessionInfo.setUserName(userVo.getTrueName());
+            sessionInfo.setIp(userVo.getIp());
+            VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+            String finalSystemId = systemId;
+            classVOList.stream().forEach(classVO->{
+                    logger.info("鍙傛暟锛氬垎绫籆Ode:" + classVO.getClassCode());
+                    LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs = new LinkedList<>();
+                    //鑾峰彇鍒嗙被淇℃伅
+                    try {
+                        String libray = classVO.getLibrary();
+                        CodeClassifyVO codeClassifyVO = getClassfy(classVO);
+                        if(codeClassifyVO==null || StringUtils.isBlank(codeClassifyVO.getOid())){
+                            objerrorCode="100";
+                            throw  new  Throwable ("鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙栧埌鍒嗙被淇℃伅");
+                        }
+                        logger.info("end锛氬垎绫绘煡璇㈠畬姣�");
+                        //鑾峰彇鍒嗙被妯℃澘淇℃伅
+                        CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
+                        if(templateVO==null||StringUtils.isBlank(templateVO.getOid())){
+                            objerrorCode="102";
+                            throw  new  Throwable ("鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙朚DM绯荤粺涓搴旀ā鏉�");
+                        }
+                        logger.info("end锛氭ā鏉挎煡璇㈠畬姣�");
+                        ApplyDatasVO applyDatasVO = classVO.getObjects();
+                        org.springblade.code.vo.universalInter.attrmap.DataObjectVO dataObjectVO = new org.springblade.code.vo.universalInter.attrmap.DataObjectVO();
+                        //灏嗛粯璁ょ殑灞炴�у叏閮ㄦ浛鎹㈡帀
+                        List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormdisplayflag())
+                        ).collect(Collectors.toList());
+                        this.getConfigDatas(finalSystemId, libray, applyDatasVO, attrVOS, dataObjectVO);
+                        logger.info("end锛氭暟鎹瀯寤哄畬姣�");
+                        logger.info("start锛氫慨鏀规暟鎹墽琛屽畬姣�");
+                        mdmIOService.batchSyncEditDatas(codeClassifyVO,dataObjectVO, resultDataObjectDetailDOs);
+                        logger.info("end锛氫慨鏀规暟鎹墽琛屽畬姣�");
+                    } catch (Throwable e) {
+                        XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                        xmlResultDataObjectDetailDO.setCode("");
+                        xmlResultDataObjectDetailDO.setId("");
+                        xmlResultDataObjectDetailDO.setErrorid(objerrorCode);
+                        xmlResultDataObjectDetailDO.setMsg("缂栫爜鏇存敼/鐘舵�佹洿鏀�/鍒犻櫎:"+e.getMessage());
+                        resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
+                        e.printStackTrace();
+                    }finally {
+                        XMLResultClassfyVO resultClassfyVO = new XMLResultClassfyVO();
+                        resultClassfyVO.setClassCode(classVO.getClassCode());
+                        resultClassfyVO.setLibrary(classVO.getLibrary());
+                        resultClassfyVO.setFullclsfNamePath(classVO.getFullclsfNamePath());
+                        resultClassfyVO.setObjects(resultDataObjectDetailDOs);
+                        resultClassfyVOList.add(resultClassfyVO);
+                    }
+
+            });
+        }catch (Throwable e){
+            e.printStackTrace();;
+            msg="缂栫爜鏇存敼/鐘舵�佹洿鏀�/鍒犻櫎:"+e.getMessage();
+          /*  XMLResultSystemVO XMLResultSystemVO=new XMLResultSystemVO();
+            XMLResultSystemVO.setErrorid(errorid);
+            XMLResultSystemVO.setMsg("鐢宠缂栫爜澶辫触锛�->"+e.getMessage());
+            XMLResultSystemVO.setClassifys(resultClassfyVOList);
+            resultStr=transferResultXMl(XMLResultSystemVO,dataType);
+
+            logger.error("鐢宠缂栫爜澶辫触锛�->"+e);
+            return resultStr;*/
+        }finally {
+            XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO();
+            xmlResultSystemVO.setClassifys(resultClassfyVOList);
+            xmlResultSystemVO.setMsg(msg);
+            xmlResultSystemVO.setErrorid(errorid);
+            resultStr= transferResultXMl(xmlResultSystemVO,dataType);
+            final boolean[] issucess = {true};
+            if(!errorid.equals("0")) {
+                issucess[0] = false;
+            }else {
+                if(!CollectionUtils.isEmpty(resultClassfyVOList)) {
+                    resultClassfyVOList.stream().forEach(xMLResultClassfyVO -> {
+                        xMLResultClassfyVO.getObjects().stream().forEach(objec -> {
+                            if (!(objec.getErrorid().equals("0") || objec.getErrorid().equals("204"))) {
+                                issucess[0] = false;
+                                msg=objec.getMsg();
+                            }
+                        });
+                    });
+                }
+
+            }
+            try {
+                //璁板綍鏃ュ織
+                this.saveLogs(systemId, systemId, data, resultStr, issucess[0], msg, "syncEditData");
+            }catch (Throwable e){
+                e.printStackTrace();
+            }
+        }
+        logger.info("杩斿洖鍙傛暟:"+resultStr);
+        //瀛樺偍鏃ュ織
+        return resultStr;
+    }
+
+    /****
+     * 鏌ヨ鍒嗙被
+     * @param data
+     * @param dataType
+     * @return
+     * @throws Throwable
+     */
+    @Override
+    public String queryClassify(String data, String dataType) throws Throwable{
+        boolean issucess=false;
+        String resultStr = "";
+        String errorid="0";
+        msg="鎴愬姛";
+        String systemId="";
+        logger.info("鏌ヨ鍒嗙被鐨勬暟鎹弬鏁�:->"+data);
+        logger.info("鏌ヨ鍒嗙被鐨勬暟鎹被鍨�:->"+dataType);
+        ResultClassifyVO resultClassifyVO =new ResultClassifyVO();
+        List<ClassifyVO> classifyVOList=new ArrayList<>();
+        ResultData resultData=new ResultData();
+        try {
+            if (StringUtils.isBlank(data)) {
+                errorid = "101";
+                throw new Throwable("鎺ュ彛鍙傛暟锛氫紶閫掍负绌�");
+            }
+            QueryClassifyVO queryClassifyVO = new QueryClassifyVO();
+            //濡傛灉dataType鏄痻ml鍒欙紝閫氳繃xml搴忓垪鍖栨垚瀵硅薄褰㈠紡锛屽鏋滄槸json鍒欓�氳繃json杞崲鎴愬璞℃牸寮�
+            try {
+                if ("xml".equals(dataType)) {
+                    XStream xStream = new XStream(new DomDriver());
+                    xStream.processAnnotations(QueryData.class);
+                    xStream.autodetectAnnotations(true);
+                    QueryData queryData = (QueryData) xStream.fromXML(data);
+                    queryClassifyVO.setData(queryData);
+                } else {
+                    queryClassifyVO = JSONObject.toJavaObject(JSONObject.parseObject(data), QueryClassifyVO.class);
+                }
+            } catch (Throwable e) {
+                errorid = "101";
+                msg="鎺ュ彛鍙傛暟锛氫紶鍏ユ暟鎹弬鏁拌В鏋愬け璐�";
+                e.printStackTrace();
+                throw new Throwable("鎺ュ彛鍙傛暟锛氫紶鍏ユ暟鎹弬鏁拌В鏋愬け璐�");
+            }
+            QueryData queryData=queryClassifyVO.getData();
+            UserVO userVo=queryData.getUserVo();
+            systemId=queryData.getSystemId();
+            QueryLibraryVO libraryVO= queryData.getLibrary();
+            String libId= libraryVO.getId();
+            List<String> classifyIdList=  libraryVO.getClassifyid();
+            List<CodeClassifyDO> codeClassifyDOS =new ArrayList<>();
+            //杩欐槸璐﹀彿淇℃伅
+            //杩欐槸璐﹀彿淇℃伅
+            SessionInfo sessionInfo = new SessionInfo();
+            sessionInfo.setUserId(userVo.getUserName());
+            sessionInfo.setUserName(userVo.getTrueName());
+            sessionInfo.setIp(userVo.getIp());
+            VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+            if(!CollectionUtils.isEmpty(classifyIdList)){
+                //鍏堢畝绉版槸鍚︽湁鍏宠仈妯℃澘锛屾湁妯℃澘瑕佸厛鍒犻櫎
+                VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyDO.class);
+                queryWrapper.addQueryMap("id", QueryOptionConstant.IN  + VciBaseUtil.toInSql(classifyIdList.toArray(new String[0])));
+                codeClassifyDOS=classifyService.selectByWrapper(queryWrapper);
+            }else {
+                VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyDO.class);
+                queryWrapper.addQueryMap("id", QueryOptionConstant.IN  + VciBaseUtil.toInSql(libId));
+                List<CodeClassifyDO> libIdDos =classifyService.selectByWrapper(queryWrapper);
+                String oid= libIdDos.get(0).getOid();
+
+                TreeQueryObject treeQueryObject=new TreeQueryObject();
+                treeQueryObject.setParentOid(oid);
+                treeQueryObject.setQueryAllLevel(true);
+                codeClassifyDOS=classifyService.selectCodeClassifyDOByTree(treeQueryObject);
+            }
+            LibraryVO libraryVo=new LibraryVO();
+            libraryVo.setId(libId);
+            libraryVo.setName("");
+            if(!CollectionUtils.isEmpty(codeClassifyDOS)){
+                errorid = "0";
+                msg="鎴愬姛!";
+                codeClassifyDOS.stream().forEach(codeClassifyDO -> {
+                    ClassifyVO classifyVO=new ClassifyVO();
+                    classifyVO.setId(codeClassifyDO.getOid());
+                    classifyVO.setLcStatus(codeClassifyDO.getLcStatus());
+                    classifyVO.setClassCode(codeClassifyDO.getId());
+                    classifyVO.setDescription(codeClassifyDO.getDescription());
+                    classifyVO.setName(codeClassifyDO.getName());
+                    classifyVO.setPid(codeClassifyDO.getParentCodeClassifyOid());
+                    classifyVO.setFullPathName(codeClassifyDO.getPath());
+                    classifyVOList.add(classifyVO);
+                });
+                libraryVo.setClassify(classifyVOList);
+            }else{
+                errorid = "100";
+                msg="鏈煡璇㈠埌鐩稿叧鐨勫垎绫讳俊鎭�";
+            }
+            issucess=true;
+            resultData.setLibrary(libraryVo);
+        }catch (Throwable e){
+            e.printStackTrace();;
+            msg="鏌ヨ鍒嗙被澶辫触:"+e.getMessage();
+        }finally {
+            resultData.setErrorid(errorid);
+            resultData.setMsg(msg);
+            resultClassifyVO.setResultData(resultData);
+        }
+        if(dataType.equals("xml")){
+            //缁勭粐杩斿洖鎺ュ彛淇℃伅
+            XStream xStream = new XStream(new DomDriver());
+            xStream.processAnnotations(XMLResultSystemVO.class);
+            xStream.autodetectAnnotations(true);
+            resultStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(resultData);
+
+        }else{
+            Object object = JSONObject.toJSON(resultClassifyVO);
+            resultStr = object.toString();
+        }
+        try {
+            //璁板綍鏃ュ織
+            this.saveLogs(systemId, systemId, data, resultStr, issucess, msg, "queryClassify");
+        }catch (Throwable e){
+            e.printStackTrace();
+        }
+        logger.info("杩斿洖鍙傛暟:"+resultStr);
+        return resultStr;
+    }
+
+    /***
+     *
+     * @param data
+     * @param dataType
+     * @return
+     * @throws Throwable
+     */
+    @Override
+    public String queryData(String data, String dataType) throws Throwable {
+        boolean issucess=false;
+        String resultStr = "";
+        String errorid="0";
+        msg="鎴愬姛";
+        String systemId="";
+        logger.info("鏌ヨ鍒嗙被鐨勬暟鎹弬鏁�:->"+data);
+        logger.info("鏌ヨ鍒嗙被鐨勬暟鎹被鍨�:->"+dataType);
+        DataCondtionsVO dataCondtionsVO=new DataCondtionsVO();
+        ResultDataVO resultDataVO=new ResultDataVO();
+        try {
+            try {
+                if ("xml".equals(dataType)) {
+                    XStream xStream = new XStream(new DomDriver());
+                    xStream.processAnnotations(CondtionsVO.class);
+                    xStream.autodetectAnnotations(true);
+                    CondtionsVO condtionsVO = (CondtionsVO) xStream.fromXML(data);
+                    dataCondtionsVO.setCondtions(condtionsVO);
+                } else {
+                    dataCondtionsVO = JSONObject.toJavaObject(JSONObject.parseObject(data), DataCondtionsVO.class);
+                }
+            } catch (Throwable e) {
+                errorid = "101";
+                msg = "鎺ュ彛鍙傛暟锛氫紶鍏ユ暟鎹弬鏁拌В鏋愬け璐�";
+                e.printStackTrace();
+                throw new Throwable("鎺ュ彛鍙傛暟锛氫紶鍏ユ暟鎹弬鏁拌В鏋愬け璐�");
+            }
+            CondtionsVO condtionsVO=dataCondtionsVO.getCondtions();
+            systemId=condtionsVO.getSystemId();
+            UserVO userVo=condtionsVO.getUser();
+            CondtionVO condtionVO= condtionsVO.getCondtion();
+            SessionInfo sessionInfo = new SessionInfo();
+            sessionInfo.setUserId(userVo.getUserName());
+            sessionInfo.setUserName(userVo.getTrueName());
+            sessionInfo.setIp(userVo.getIp());
+            VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+
+            String classCode=condtionVO.getClassCode();
+            String library= condtionVO.getLibrary();
+            String queryFileds= condtionVO.getQueryFileds();
+
+            List<CodeClassifyDO> codeClassifyDOS =new ArrayList<>();
+            //鍏堢畝绉版槸鍚︽湁鍏宠仈妯℃澘锛屾湁妯℃澘瑕佸厛鍒犻櫎
+            VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyDO.class);
+            queryWrapper.addQueryMap("id", QueryOptionConstant.IN  + VciBaseUtil.toInSql(classCode));
+            List<CodeClassifyDO> libIdDos =classifyService.selectByWrapper(queryWrapper);
+            if(!CollectionUtils.isEmpty(libIdDos)){
+                CodeClassifyDO currentCodeClassifyDO=libIdDos.get(0);
+                String oid=currentCodeClassifyDO.getOid();
+                TreeQueryObject treeQueryObject=new TreeQueryObject();
+                treeQueryObject.setParentOid(oid);
+                treeQueryObject.setQueryAllLevel(true);
+                codeClassifyDOS=classifyService.selectCodeClassifyDOByTree(treeQueryObject);
+                codeClassifyDOS.add(currentCodeClassifyDO);
+                Map<String, CodeClassifyDO> oidCodeclassifyDOMap = codeClassifyDOS.stream().filter(systeDataObject -> systeDataObject != null && StringUtils.isNotBlank(systeDataObject.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+
+                List<PropertyVO>  propertyVOS=condtionVO.getPro();
+                Map<String,String> condtionMap=new HashMap<>();
+                propertyVOS.stream().forEach(propertyVO -> {
+                    condtionMap.put(propertyVO.getFiledName(),propertyVO.getFiledValue());
+                });
+                condtionMap.put("codeclsfid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(oidCodeclassifyDOMap.keySet().toArray(new String[0])) + ")");
+                List<ClientBusinessObject> clientBusinessObjects= boService.queryCBO( currentCodeClassifyDO.getBtmTypeId(),condtionMap);
+                List<DataObjectVO> dataObjectVOS=new ArrayList<>();
+                if(!CollectionUtils.isEmpty(clientBusinessObjects)){
+                    CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(currentCodeClassifyDO.getOid());
+                    Map<String, CodeClassifyTemplateAttrVO> filedAttributeMap = templateVO.getAttributes().stream().filter(attribute -> attribute != null && StringUtils.isNotBlank(attribute.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
+
+                    clientBusinessObjects.stream().forEach(cbo -> {
+                        DataObjectVO dataObjectVO=new DataObjectVO();
+                        dataObjectVO.setCode(cbo.getId());
+                        dataObjectVO.setStatus(cbo.getLcStatus());
+                        String codeclsfid=cbo.getAttributeValue("codeclsfid");
+                        if(oidCodeclassifyDOMap.containsKey(codeclsfid)){
+                            CodeClassifyDO classifyDO=  oidCodeclassifyDOMap.get(codeclsfid);
+                            dataObjectVO.setClassCode(classifyDO.getId());
+                        }
+                        dataObjectVO.setLibrary(library);
+                        String [] newQueryFileds=queryFileds.split(",");
+                        List<PropertyVO> propertyVOList=new ArrayList<>();
+                        for(String filed:newQueryFileds){
+                            String value=cbo.getAttributeValue(filed);
+                            if(filedAttributeMap.containsKey(filed)){
+                                CodeClassifyTemplateAttrVO attrVO=  filedAttributeMap.get(filed);
+                                PropertyVO propertyVO=new PropertyVO();
+                                propertyVO.setFiledName(filed);
+                                propertyVO.setFiledValue(value);
+                                propertyVO.setOutname(attrVO.getName());
+                                propertyVOList.add(propertyVO);
+                            }
+                        }
+                        dataObjectVO.setPro(propertyVOList);
+                        dataObjectVOS.add(dataObjectVO);
+                    });
+                    resultDataVO.setObject(dataObjectVOS);
+                }
+            }
+            errorid = "0";
+            msg = "鏁版嵁鏌ヨ鎴愬姛";
+        }catch (Throwable e){
+            e.printStackTrace();;
+            msg="鏌ヨ鏁版嵁澶辫触:"+e.getMessage();
+        }finally {
+            resultDataVO.setErrorid(errorid);
+            resultDataVO.setMsg(msg);
+        }
+        ResultVO resultVO=new ResultVO();
+        resultVO.setData(resultDataVO);
+        if(dataType.equals("xml")){
+            //缁勭粐杩斿洖鎺ュ彛淇℃伅
+            XStream xStream = new XStream(new DomDriver());
+            xStream.processAnnotations(XMLResultSystemVO.class);
+            xStream.autodetectAnnotations(true);
+            resultStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(resultDataVO);
+        }else{
+            Object object = JSONObject.toJSON(resultVO);
+            resultStr = object.toString();
+        }
+        try {    //璁板綍鏃ュ織
+            this.saveLogs(systemId, systemId, data, resultStr, issucess, msg, "queryClassify");
+        }catch (Throwable e){
+            e.printStackTrace();
+        }
+        logger.info("杩斿洖鍙傛暟:"+resultStr);
+        return resultStr;
+    }
+
+    /***
+     * 鏌ヨ鏍¢獙鍒嗙被淇℃伅
+     * @param classfyVO
+     */
+    private  CodeClassifyVO getClassfy(ClassfyVO classfyVO) throws Throwable{
+        CodeClassifyVO classifyVO = new CodeClassifyVO();
+        try {
+            String classCode = classfyVO.getClassCode();
+            String className = classfyVO.getFullclsfNamePath();
+            //鏍规嵁鍒嗙被浠e彿鏌ヨ鍒嗙被淇℃伅
+            if (StringUtils.isNotBlank(classfyVO.getClassCode())) {
+                Map<String, String> conditionMap = new HashMap<>();
+                conditionMap.put("id", classCode);
+                VciQueryWrapperForDO wrapper = new VciQueryWrapperForDO(conditionMap, CodeClassifyDO.class);
+                List<CodeClassifyDO> codeClassifyDOS = classifyService.selectByWrapper(wrapper);
+                if (!CollectionUtils.isEmpty(codeClassifyDOS)) {
+                    CodeClassifyDO classifyDO = codeClassifyDOS.get(0);
+                    //灏咲TO杞崲涓篋O
+                    classifyVO = new CodeClassifyVO();
+                    BeanUtilForVCI.copyPropertiesIgnoreCase(classifyDO, classifyVO);
+                    if(StringUtils.isBlank(classifyVO.getOid())){
+                        throw new  Throwable("鏍规嵁鍒嗙被浠e彿鏈煡璇㈠埌鐩稿簲鐨勫垎绫讳俊鎭�");
+                    }
+                }else{
+                    throw new  Throwable("鏍规嵁鍒嗙被浠e彿鏈煡璇㈠埌鐩稿簲鐨勫垎绫讳俊鎭�");
+                }
+            } else {
+                classifyVO = classifyService.getObjectByClsfNamePath(className.replace(separator, "/"));
+                if(StringUtils.isBlank(classifyVO.getOid())){
+                    throw new  Throwable("鏍规嵁鍒嗙被鍚嶇О璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫讳俊鎭�");
+                }
+            }
+        }catch (Throwable e){
+            objerrorCode="100";
+            new  Throwable("鑾峰彇鍒嗙被淇℃伅澶辫触:"+e.getMessage());
+        }
+        return classifyVO;
+    }
+
+    /***
+     * 鏍规嵁绌垮叆鐨勫弬鏁颁俊鎭牎楠岀爜娈佃鍒�
+     */
+    private List<CodeOrderSecDTO> getRuleCodeOrderSecDTOs(List<SectionVO> SectionVOList,CodeRuleVO ruleVO) throws Throwable{
+        List<CodeBasicSecVO>  codeBasicSecVOS= ruleVO.getSecVOList();
+        Map<String,String> sectionVOMap=new HashMap<>();
+        SectionVOList.stream().forEach(SectionVO->{
+            sectionVOMap.put(SectionVO.getName(),SectionVO.getValue());
+        });
+        List<CodeOrderSecDTO> codeOrderSecDTOList=new ArrayList<>();
+        for(CodeBasicSecVO codeBasicSecVO: codeBasicSecVOS) {
+            String sectype = codeBasicSecVO.getSectype();
+            if (!sectype.equals(CodeSecTypeEnum.CODE_SERIAL_SEC.getValue())) {
+                String name = codeBasicSecVO.getName();
+                String sectypeText = codeBasicSecVO.getSectypeText();
+                logger.info("鐮佹鍚嶇О:"+name);
+                logger.info("鎻忚堪:"+sectypeText);
+                CodeOrderSecDTO CodeOrderSecDTO = new CodeOrderSecDTO();
+                if (sectionVOMap.containsKey(name)) {
+                    CodeOrderSecDTO.setSecOid(codeBasicSecVO.getOid());
+                    String sectypeValue = sectionVOMap.get(name);
+                    logger.info("鐮佹鍊�:"+sectypeValue);
+                    CodeOrderSecDTO.setSecValue(sectypeValue);
+                    codeOrderSecDTOList.add(CodeOrderSecDTO);
+                } else {
+                    objerrorCode="101";
+                    throw new Throwable("浼犲叆鐨勭爜娈佃鍒欑己灏�" + name + "鐮佹");
+                }
+            }
+        }
+        return codeOrderSecDTOList;
+    }
+
+    /***
+     * 鏍规嵁灞炴�ф槧灏勮浆鎹㈢紪鐮佹墍闇�瀛楁
+     */
+    public void getConfigDatas(String systemId, String libray, ApplyDatasVO applyDatasVO, List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOList, org.springblade.code.vo.universalInter.attrmap.DataObjectVO dataObjectVO) throws Throwable {
+        List<ApplyDataVO> applyDataVOList=applyDatasVO.getObject();
+        LinkedHashMap<String,LinkedHashMap<String,String>> dataKeyValueMap=new LinkedHashMap<>();
+        //濡傛灉灏嗘暟鎹浆鎹㈡垚鎵�闇�瑕佺殑鏁版嵁瀵硅薄
+        Map<String, String> attrMapConfigMap=new HashMap<>();
+        Map<String, String> propMaps=new HashMap<>();
+        try {
+            Map<String, String> stringStringMap=attributeMapConfig.getSystem_attrmap();
+            //stringStringMap.put("RLM","D:\\RLM.xml");
+            LibraryDO libraryDO= gennerAttrMapUtil.getNewInstance().gennerAttrMapBySystem(systemId,stringStringMap);
+            List<LibraryClsfDO> libraryClsfDOList=libraryDO.getClsf();
+            Map<String, List<ClsfAttrMappingDO>> libPropMaps = libraryClsfDOList.stream().collect(Collectors.toMap(LibraryClsfDO::getLibrary, LibraryClsfDO::getProp, (key1, key2) -> key2));
+            if(libPropMaps.containsKey(libray)){
+                List<ClsfAttrMappingDO> clsfAttrMappingDOList=libPropMaps.get(libray);
+                propMaps = clsfAttrMappingDOList.stream().collect(Collectors.toMap(ClsfAttrMappingDO::getSourceKey, ClsfAttrMappingDO::getTargetKey, (key1, key2) -> key2));
+            }
+        }catch (Throwable e){
+            objerrorCode="1";
+            throw new Throwable("MDM闆嗘垚灞炴�ч厤缃枃浠惰鍙栧け璐�");
+        }
+        LinkedList<String> rowNameList=new LinkedList<>();
+        LinkedHashMap<String,Integer> filedIndexMap=new LinkedHashMap<>();
+            //鏍规嵁鍒嗙被妯℃澘缁勭粐鏁版嵁
+        final int[] index = {0};
+        try {
+            codeClassifyTemplateAttrVOList.stream().forEach(codeClassifyTemplateAttrVO -> {
+                String attrName = codeClassifyTemplateAttrVO.getName();
+                String field = codeClassifyTemplateAttrVO.getId();
+                rowNameList.add(attrName);
+                filedIndexMap.put(field, index[0]++);
+            });
+            dataObjectVO.setColName(rowNameList);//鏀惧叆灞炴��
+            attrMapConfigMap.putAll(propMaps);
+            LinkedList<RowDatas> rowDataList = new LinkedList<>();
+            //Map<String, List<ProppertyVO>> dataPropMap = applyDataVOList.stream().collect(Collectors.toMap(ApplyDataVO::getId, ApplyDataVO::getProp, (key1, key2) -> key2));
+            final int[] rowIndex = {0};
+            applyDataVOList.stream().forEach(applyDataVO -> {
+                rowIndex[0]++;
+                RowDatas rowDatas = new RowDatas();
+                rowDatas.setOid(applyDataVO.getId());
+                rowDatas.setCreator(applyDataVO.getCreator());
+                rowDatas.setEditor(applyDataVO.getEditor());
+                rowDatas.setCode(applyDataVO.getCode());
+                rowDatas.setOperation(applyDataVO.getOperate());
+                rowDatas.setStatus(applyDataVO.getStatus());
+                rowDatas.setRowIndex(rowIndex[0] + "");
+                List<ProppertyVO> proppertyVOList = applyDataVO.getProp();
+
+                LinkedHashMap<Integer, String> integerValueMap = new LinkedHashMap<>();
+                Map<String, String> filedValueMap = new HashMap<>();
+                if (!CollectionUtils.isEmpty(proppertyVOList)) {
+                    Map<String, String> sourceKeyValueMap = proppertyVOList.stream().collect(Collectors.toMap(ProppertyVO::getKey, ProppertyVO::getValue, (key1, key2) -> key2));
+                    Map<String, String> keyValueMap = new HashMap<>();
+                    //鍒ゆ柇attrMapConfigMap鏄惁鏈夊�硷紝濡傛灉娌℃湁鍒欒鏄庡熀纭�榛樿鐨勬槸缂栫爜绯荤粺瀛楁
+                    if (!CollectionUtils.isEmpty(attrMapConfigMap)) {
+                        sourceKeyValueMap.keySet().forEach(sourceKey -> {
+                            String dataValue = sourceKeyValueMap.get(sourceKey);
+                            if (attrMapConfigMap.containsKey(sourceKey)) {
+                                String targetKey = attrMapConfigMap.get(sourceKey);
+                                keyValueMap.put(targetKey, StringUtils.isBlank(dataValue)?"":dataValue);
+                            }
+                        });
+                    } else {
+                        sourceKeyValueMap.forEach((filed,value)->{
+                            keyValueMap.put(filed,StringUtils.isBlank(value)?"":value) ;
+                        });
+                    }
+
+                    filedIndexMap.forEach((attrKey, column) -> {
+                        String keyValue = "";
+                        if (keyValueMap.containsKey(attrKey)) {
+                            keyValue =StringUtils.isBlank(keyValueMap.get(attrKey))?"":keyValueMap.get(attrKey);
+                        }
+                        integerValueMap.put(column, keyValue);
+                        filedValueMap.put(attrKey, keyValue);
+                    });
+                }
+                rowDatas.setData(integerValueMap);
+                rowDatas.setFiledValue(filedValueMap);
+                rowDataList.add(rowDatas);
+            });
+            dataObjectVO.setRowData(rowDataList);
+        }catch (Throwable e){
+            objerrorCode="1";
+            throw new   Throwable("缁勭粐鏁版嵁鏄犲皠鍊煎け璐�");
+        }
+    }
+    /***
+     * 鏁版嵁缁存姢涓庣紪鐮佺敵璇疯繑鍥�
+     * @param resultSystemVO
+     * @param dataType
+     * @return
+     */
+    private String transferResultXMl(XMLResultSystemVO resultSystemVO,String dataType){
+        String resultStr="";
+        if ("xml".equals(dataType)) {
+            //缁勭粐杩斿洖鎺ュ彛淇℃伅
+            XStream xStream = new XStream(new DomDriver());
+            xStream.processAnnotations(XMLResultSystemVO.class);
+            xStream.autodetectAnnotations(true);
+            resultStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(resultSystemVO);
+        } else {
+            List<XMLResultClassfyVO> resultClassfyVOList =resultSystemVO.getClassifys();
+            JSONResultDataVO resultDataVO = new JSONResultDataVO();
+            JSONResultSystemVO jsonResultSystemVO = new JSONResultSystemVO();
+            JSONResultClassfysVO jsonResultClassfysVO = new JSONResultClassfysVO();
+            List<JSONResultClassfyVO> jSONResultClassfyVOList = new ArrayList<>();
+            resultClassfyVOList.stream().forEach(resultClassfyVO -> {
+                List<XMLResultDataObjectDetailDO> xmlResultDataObjectDetailDOS = resultClassfyVO.getObjects();
+                List<JSONResultDataObjectDetailDO> JSONResultDataObjectDetailDOList = new ArrayList<>();
+                xmlResultDataObjectDetailDOS.stream().forEach(xmlResultDataObjectDetail -> {
+                    JSONResultDataObjectDetailDO jsonResultDataObjectDetail = new JSONResultDataObjectDetailDO();
+                    BeanUtilForVCI.copyPropertiesIgnoreCase(xmlResultDataObjectDetail, jsonResultDataObjectDetail);
+                    JSONResultDataObjectDetailDOList.add(jsonResultDataObjectDetail);
+                });
+                JSONResultClassfyVO jsonResultClassfyVO = new JSONResultClassfyVO();
+                jsonResultClassfyVO.setClassCode(resultClassfyVO.getClassCode());
+                jsonResultClassfyVO.setLibrary(resultClassfyVO.getLibrary());
+                jsonResultClassfyVO.setFullclsfNamePath(resultClassfyVO.getFullclsfNamePath());
+                JSONResultDataObjectDO JSONResultDataObjectDO = new JSONResultDataObjectDO();
+                JSONResultDataObjectDO.setObject(JSONResultDataObjectDetailDOList);
+                jsonResultClassfyVO.setObjects(JSONResultDataObjectDO);
+                jSONResultClassfyVOList.add(jsonResultClassfyVO);
+            });
+            jsonResultClassfysVO.setClassify(jSONResultClassfyVOList);
+            jsonResultSystemVO.setClassifys(jsonResultClassfysVO);
+            jsonResultSystemVO.setErrorid(resultSystemVO.getErrorid());
+            jsonResultSystemVO.setMsg(resultSystemVO.getMsg());
+            resultDataVO.setData(jsonResultSystemVO);
+            Object object = JSONObject.toJSON(resultDataVO);
+            resultStr = object.toString();
+
+        }
+        return resultStr;
+    }
+
+    /***
+     * 璁板綍鏃ュ織淇℃伅
+     * @param systemId
+     * @param parmaData
+     * @param result
+     * @return
+     */
+    private  void saveLogs(String systemId,String systemName,String parmaData, String result,boolean isSucess,String msg,String operation){
+        //璁板綍鏃ュ織淇℃伅
+        DockingLogeDO dockingLogeDO=new DockingLogeDO();
+        String oid=redisService.getUUIDEveryDay();
+        dockingLogeDO.setSystemcode(StringUtils.isBlank(systemId)?"-":systemId);//璁剧疆绯荤粺鏍囪瘑
+        dockingLogeDO.setSystemname(StringUtils.isBlank(systemName)?"-":systemName);
+        dockingLogeDO.setMsg(msg);//鏃ュ織娑堟伅
+        dockingLogeDO.setClassifyid("-");//鍒嗙被缂栧彿
+        dockingLogeDO.setClassifyname("-");//鍒嗙被鍚嶇О
+        dockingLogeDO.setClassifyoid("-");//鍒嗙被涓婚敭
+        dockingLogeDO.setUniquecode("-");//鍞竴鏍囪瘑
+        dockingLogeDO.setSystemoid("-");//绯荤粺鏍囪瘑
+//        dockingLogeDO.setName(operation);
+        dockingLogeDO.setOid(oid);//鏃ュ織涓婚敭
+        dockingLogeDO.setParamstring(parmaData);//鍙傛暟淇℃伅
+        dockingLogeDO.setReturnstring(result);//杩斿洖淇℃伅
+        dockingLogeDO.setType(operation);//鏃ュ織鎿嶄綔绫诲瀷
+        if(isSucess) {
+            dockingLogeDO.setInterfacestatus(MdmDuckingConstant.INTERFACE_STATUS_TRUE);//鎺ュ彛闆嗘垚鐘舵��
+        }else{
+            dockingLogeDO.setInterfacestatus(MdmDuckingConstant.INTERFACE_STATUS_FALSE);//鎺ュ彛闆嗘垚鐘舵��
+        }
+        BatchCBO insert = dockingLogeDao.insert(dockingLogeDO);
+        logger.info("闆嗘垚鎺ㄩ�佹暟鎹垚鍔�,systemId:"+systemId+",systemname:"+systemName+",operation:"+operation+",param:"+parmaData);
+    }
+}
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
index e9e5da2..c108432 100644
--- 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
@@ -15,7 +15,8 @@
 import java.util.List;
 import java.util.Map;
 
-import static com.vci.mdm.constant.MdmDuckingConstant.*;
+import static org.springblade.code.constant.MdmDuckingConstant.*;
+
 
 public class XmlUtil {
     /*
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
index e3672cd..d7a37cf 100644
--- 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
@@ -2,9 +2,9 @@
 
 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.springblade.code.vo.universalInter.attrmap.LibraryDO;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.Map;
@@ -25,7 +25,7 @@
      * 鑾峰彇
      * @param systemId
      */
-    public LibraryDO gennerAttrMapBySystem(String systemId,Map<String, String> system_attrmap) throws Throwable{
+    public LibraryDO gennerAttrMapBySystem(String systemId, Map<String, String> system_attrmap) throws Throwable{
         if(StringUtils.isBlank(systemId)){
             throw new Throwable("绯荤粺鏍囪瘑涓虹┖");
         }
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
index bbcd82d..9748255 100644
--- 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
@@ -12,6 +12,9 @@
     url: ${blade.datasource.dev.url}
     username: ${blade.datasource.dev.username}
     password: ${blade.datasource.dev.password}
+  messages:
+    encoding: UTF-8
+    basename: i18n/messages
 
 #####搴旂敤鍩烘湰閰嶇疆
 app:
@@ -20,13 +23,6 @@
   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"
diff --git a/Source/BladeX/blade-service/blade-code/src/main/resources/application-test.yml b/Source/BladeX/blade-service/blade-code/src/main/resources/application-test.yml
new file mode 100644
index 0000000..57b842e
--- /dev/null
+++ b/Source/BladeX/blade-service/blade-code/src/main/resources/application-test.yml
@@ -0,0 +1,10 @@
+#鏈嶅姟鍣ㄧ鍙�
+server:
+  port: 8102
+
+#鏁版嵁婧愰厤缃�
+spring:
+  datasource:
+    url: ${blade.datasource.test.url}
+    username: ${blade.datasource.test.username}
+    password: ${blade.datasource.test.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 9ae8a71..48102f9 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
@@ -334,7 +334,7 @@
 	 * 鐢ㄦ埛瑙i攣
 	 */
 	@PostMapping("/check-renexpr")
-	@ApiOperationSupport(order = 19)
+	@ApiOperationSupport(order = 20)
 	@ApiOperation(value = "鏌ヨ鐢ㄦ埛瀵嗙爜绛栫暐鏄惁闇�瑕佹彁閱�", notes = "浼犲叆id")
 	public R<Long> checkRenAndExpr(BladeUser user) {
 		System.out.println("==============================="+user.getUserId());
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 96f2490..6e92d92 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
@@ -489,7 +489,7 @@
 		}
 		Strategy strategy = sysClient.getByUserId(userId).getData();
 		//鏄惁鎻愰啋閫氳繃鏈�鍚庝竴娆′慨鏀瑰瘑鐮佺殑鏃堕棿鍔犱笂杩囨湡鏃堕棿鍑忓幓褰撳墠鏃堕棿锛屽鏋滃皬浜庤繃鏈熸彁閱掓椂闂村氨杩涜鎻愰啋锛屽鏋�<=0灏辨彁閱掑繀椤讳慨鏀瑰瘑鐮�
-		long reminder = pwdupdateday+strategy.getExpirationTime()-dateToDay(pwdUpdateTime);
+		long reminder = pwdupdateday+strategy.getExpirationTime()-dateToDay(new Date());
 		//鎻愰啋鐢ㄦ埛蹇呴』淇敼瀵嗙爜
 		if(reminder<=0){
 			return -1L;
diff --git a/Source/BladeX/blade-service/pom.xml b/Source/BladeX/blade-service/pom.xml
index 6920bb2..ae9fcd7 100644
--- a/Source/BladeX/blade-service/pom.xml
+++ b/Source/BladeX/blade-service/pom.xml
@@ -22,7 +22,6 @@
         <module>blade-system</module>
         <module>blade-user</module>
         <module>blade-code</module>
-        <module>blade-omd</module>
     </modules>
 
     <dependencies>

--
Gitblit v1.9.3